public PageViewModel(PageContent pageContent, MarkupConverter converter) { if (pageContent == null) throw new ArgumentNullException("pageContent"); if (pageContent.Page == null) throw new ArgumentNullException("pageContent.Page"); if (converter == null) throw new ArgumentNullException("converter"); Id = pageContent.Page.Id; Title = pageContent.Page.Title; PreviousTitle = pageContent.Page.Title; CreatedBy = pageContent.Page.CreatedBy; CreatedOn = pageContent.Page.CreatedOn; IsLocked = pageContent.Page.IsLocked; ModifiedBy = pageContent.Page.ModifiedBy; ModifiedOn = pageContent.Page.ModifiedOn; RawTags = pageContent.Page.Tags; Content = pageContent.Text; VersionNumber = pageContent.VersionNumber; PageHtml pageHtml = converter.ToHtml(pageContent.Text); ContentAsHtml = pageHtml.Html; IsCacheable = pageHtml.IsCacheable; PluginHeadHtml = pageHtml.HeadHtml; PluginFooterHtml = pageHtml.FooterHtml; PluginPreContainer = pageHtml.PreContainerHtml; PluginPostContainer = pageHtml.PostContainerHtml; CreatedOn = DateTime.SpecifyKind(CreatedOn, DateTimeKind.Utc); ModifiedOn = DateTime.SpecifyKind(ModifiedOn, DateTimeKind.Utc); AllTags = new List<TagViewModel>(); }
public void SetUp() { // Setup the repository Repository = GetRepository(); Clearup(); // Create 5 Pages with 2 versions of content each _createdDate = DateTime.Today.ToUniversalTime().AddDays(-1); _editedDate = _createdDate.AddHours(1); _page1 = NewPage("admin", "homepage, newpage"); _pageContent1 = Repository.AddNewPage(_page1, "text", "admin", _createdDate); _page1 = _pageContent1.Page; _pageContent2 = Repository.AddNewPageContentVersion(_page1, "v2", "admin", _editedDate, 2); _page1 = _pageContent2.Page; // update the modified date Page page2 = NewPage("editor1"); PageContent pageContent2 = Repository.AddNewPage(page2, "text", "editor1", _createdDate); Repository.AddNewPageContentVersion(pageContent2.Page, "v2", "editor1", _editedDate, 1); Page page3 = NewPage("editor2"); PageContent pageContent3 = Repository.AddNewPage(page3, "text", "editor2", _createdDate); Repository.AddNewPageContentVersion(pageContent3.Page, "v2", "editor2", _editedDate, 1); Page page4 = NewPage("editor3"); PageContent pageContent4 = Repository.AddNewPage(page4, "text", "editor3", _createdDate); Repository.AddNewPageContentVersion(pageContent4.Page, "v2", "editor3", _editedDate, 1); Page page5 = NewPage("editor4"); PageContent pageContent5 = Repository.AddNewPage(page5, "text", "editor4", _createdDate); Repository.AddNewPageContentVersion(pageContent5.Page, "v2", "editor4", _editedDate, 1); }
public void index_should_return_page() { // Arrange Page page1 = new Page() { Id = 50, Tags = "homepage, tag2", Title = "Welcome to the site" }; PageContent page1Content = new PageContent() { Id = Guid.NewGuid(), Page = page1, Text = "Hello world" }; _pageRepository.Pages.Add(page1); _pageRepository.PageContents.Add(page1Content); // Act ActionResult result = _wikiController.Index(50, ""); // Assert Assert.That(result, Is.TypeOf<ViewResult>(), "ViewResult"); PageViewModel model = result.ModelFromActionResult<PageViewModel>(); Assert.NotNull(model, "Null model"); Assert.That(model.Title, Is.EqualTo(page1.Title)); Assert.That(model.Content, Is.EqualTo(page1Content.Text)); }
public void Constructor_Should_Throw_Exception_When_PageContent_Page_Is_Null() { // Arrange PageContent content = new PageContent(); // Act + Assert PageHistoryViewModel model = new PageHistoryViewModel(content); }
public void PageContent_Constructor_Should_Throw_Exception_When_MarkupConverter_IsNull() { // Arrange PageContent content = new PageContent(); content.Page = new Page(); // Act + Assert PageViewModel model = new PageViewModel(content, null); }
public void pagecontent_objectid_should_match_id() { // Arrange PageContent page = new PageContent(); page.ObjectId = Guid.NewGuid(); // Act Guid objectId = page.ObjectId; // Assert Assert.That(objectId, Is.EqualTo(page.Id)); }
public void PageContent_ObjectId_Should_Match_Id() { // Arrange PageContent page = new PageContent(); page.ObjectId = Guid.NewGuid(); // Act Guid objectId = page.ObjectId; // Assert Assert.That(objectId, Is.EqualTo(page.Id)); }
/// <summary> /// Fills this instance using the <see cref="PageContent"/> object. /// </summary> /// <exception cref="ArgumentNullException">PageContent.Page should not be null.</exception> public PageHistoryViewModel(PageContent pageContent) { if (pageContent.Page == null) throw new ArgumentNullException("pageContent.Page should not be null"); Id = pageContent.Id; PageId = pageContent.Page.Id; EditedBy = pageContent.EditedBy; EditedOn = pageContent.EditedOn; VersionNumber = pageContent.VersionNumber; IsPageAdminOnly = pageContent.Page.IsLocked; }
public PageContent AddNewPageContentVersion(Page page, string text, string editedBy, DateTime editedOn, int version) { PageContent content = new PageContent(); content.Id = Guid.NewGuid(); page.ModifiedBy = content.EditedBy = editedBy; page.ModifiedOn = content.EditedOn = editedOn; content.Page = page; content.Text = text; content.VersionNumber = FindPageContentsByPageId(page.Id).Max(x => x.VersionNumber) +1; PageContents.Add(content); return content; }
public void editedonwithoffset_should_be_rfc_format_and_not_include_time_zone() { // Arrange PageContent content = new PageContent(); content.Page = new Page() { Id = 1 }; content.EditedOn = DateTime.Today; PageHistoryViewModel model = new PageHistoryViewModel(content); string expectedEditedOn = DateTime.Today.ToString("s") +"Z"; // Act string actualEditedOn = model.EditedOnWithOffset; // Assert Assert.That(actualEditedOn, Is.EqualTo(expectedEditedOn)); }
public PageContent AddNewPage(Page page, string text, string editedBy, DateTime editedOn) { page.Id = Pages.Count + 1; Pages.Add(page); PageContent content = new PageContent(); content.Id = Guid.NewGuid(); content.EditedBy = editedBy; content.EditedOn = editedOn; content.Page = page; content.Text = text; content.VersionNumber = 1; PageContents.Add(content); return content; }
public void EditedOnWithOffset_Should_Be_RFC_Format_And_Not_Include_Time_Zone() { // Arrange PageContent content = new PageContent(); content.Page = new Page() { Id = 1 }; content.EditedOn = DateTime.Today; PageHistoryViewModel model = new PageHistoryViewModel(content); string expectedEditedOn = DateTime.Today.ToString("s") +"Z"; // Act string actualEditedOn = model.EditedOnWithOffset; // Assert Assert.That(actualEditedOn, Is.EqualTo(expectedEditedOn)); }
public void constructor_should_fill_properties() { // Arrange PageContent content = new PageContent(); content.Page = new Page() { Id = 7, IsLocked = true }; content.EditedOn = DateTime.Today; content.EditedBy = "adude"; content.VersionNumber = 9; // Act PageHistoryViewModel model = new PageHistoryViewModel(content); // Assert Assert.That(model.Id, Is.EqualTo(content.Id)); Assert.That(model.EditedBy, Is.EqualTo(content.EditedBy)); Assert.That(model.EditedOn, Is.EqualTo(content.EditedOn)); Assert.That(model.EditedOnWithOffset, Is.Not.Empty); Assert.That(model.IsPageAdminOnly, Is.EqualTo(content.Page.IsLocked)); Assert.That(model.PageId, Is.EqualTo(content.Page.Id)); Assert.That(model.VersionNumber, Is.EqualTo(content.VersionNumber)); }
public void frompagecontent_shouldfillcorrectproperties() { // Arrange PageContent pageContent = new PageContent(); pageContent.Id = Guid.NewGuid(); pageContent.EditedBy = "editedby"; pageContent.EditedOn = DateTime.UtcNow; pageContent.Text = "text"; PageContentEntity entity = new PageContentEntity(); // Act ToEntity.FromPageContent(pageContent, entity); // Assert Assert.That(entity.Id, Is.Not.EqualTo(pageContent.Id)); // the id isn't copied from the page Assert.That(entity.EditedBy, Is.EqualTo(pageContent.EditedBy)); Assert.That(entity.EditedOn, Is.EqualTo(pageContent.EditedOn)); Assert.That(entity.Text, Is.EqualTo(pageContent.Text)); Assert.That(entity.Page , Is.Null); }
public void Search_Should_Return_Some_Results_With_Unicode_Content() { // Arrange Page page1 = new Page() { Id = 1, Tags = "homepage, tag2", Title = "ОШИБКА: неверная последовательность байт для кодировки" }; PageContent page1Content = new PageContent() { Id = Guid.NewGuid(), Page = page1, Text = "БД сервера событий была перенесена из PostgreSQL 8.3 на PostgreSQL 9.1.4. Сервер, развернутый на Windows платформе" }; _repository.Pages.Add(page1); _repository.PageContents.Add(page1Content); // Act ActionResult result = _homeController.Search("ОШИБКА: неверная последовательность байт для кодировки"); // Assert Assert.That(result, Is.TypeOf<ViewResult>(), "ViewResult"); List<SearchResultViewModel> searchResults = result.ModelFromActionResult<IEnumerable<SearchResultViewModel>>().ToList(); Assert.NotNull(searchResults, "Null model"); Assert.That(searchResults.Count(), Is.EqualTo(1)); Assert.That(searchResults[0].Title, Is.EqualTo(page1.Title)); Assert.That(searchResults[0].ContentSummary, Contains.Substring(page1Content.Text)); }
public void pagecontent_constructor_should_fill_properties_and_parse_markup() { // Arrange PageContent content = new PageContent(); content.Page = new Page(); content.Page.Id = 3; content.Page.Title = "my title"; content.Page.CreatedBy = "me"; content.Page.CreatedOn = DateTime.Now; content.Page.IsLocked = true; content.Page.ModifiedBy = "me2"; content.Page.ModifiedOn = DateTime.Now.AddDays(1); content.Page.Tags = "tag1,tag2,tag3"; content.Text = "some text **in bold**"; content.VersionNumber = 5; TextPluginStub plugin = new TextPluginStub(); plugin.IsCacheable = false; plugin.HeadContent = "head content"; plugin.FooterContent = "footer content"; plugin.PreContainerHtml = "pre container"; plugin.PostContainerHtml = "post container"; plugin.PluginCache = new SiteCache(CacheMock.RoadkillCache); plugin.Repository = _settingsRepository; plugin.Settings.IsEnabled = true; _pluginFactory.RegisterTextPlugin(plugin); // Act PageViewModel model = new PageViewModel(content, _markupConverter); // Assert Assert.That(model.Id, Is.EqualTo(content.Page.Id)); Assert.That(model.Title, Is.EqualTo(content.Page.Title)); Assert.That(model.CreatedBy, Is.EqualTo(content.Page.CreatedBy)); Assert.That(model.ModifiedBy, Is.EqualTo(content.Page.ModifiedBy)); Assert.That(model.VersionNumber, Is.EqualTo(content.VersionNumber)); Assert.That(model.Content, Is.EqualTo(content.Text)); Assert.That(model.CreatedOn, Is.EqualTo(content.Page.CreatedOn)); Assert.That(model.CreatedOn.Kind, Is.EqualTo(DateTimeKind.Utc)); Assert.That(model.ModifiedOn, Is.EqualTo(content.Page.ModifiedOn)); Assert.That(model.ModifiedOn.Kind, Is.EqualTo(DateTimeKind.Utc)); Assert.That(model.Tags.Count(), Is.EqualTo(3)); Assert.That(model.Tags, Contains.Item("tag1")); Assert.That(model.Tags, Contains.Item("tag2")); Assert.That(model.Tags, Contains.Item("tag3")); // (this extra html is from the plugin) Assert.That(model.ContentAsHtml, Is.EqualTo("<p>some text <strong style='color:green'><iframe src='javascript:alert(test)'>in bold</strong>\n</p>"), model.ContentAsHtml); Assert.That(model.IsCacheable, Is.EqualTo(plugin.IsCacheable)); Assert.That(model.PluginHeadHtml, Is.EqualTo(plugin.HeadContent)); Assert.That(model.PluginFooterHtml, Is.EqualTo(plugin.FooterContent)); Assert.That(model.PluginPreContainer, Is.EqualTo(plugin.PreContainerHtml)); Assert.That(model.PluginPostContainer, Is.EqualTo(plugin.PostContainerHtml)); }
/// <summary> /// Extracts and saves all textual content for a page. /// </summary> /// <param name="pageName"></param> /// <param name="page">The page the content belongs to.</param> /// <param name="nameTitleMapping">Mapping between name and title</param> private void AddContent(string pageName, Page page, Dictionary<string, string> nameTitleMapping) { using (SqlConnection connection = new SqlConnection(_connectionString)) { using (SqlCommand command = connection.CreateCommand()) { connection.Open(); command.CommandText = @"SELECT *, (SELECT MAX(Revision) FROM PageContent PC WHERE PC.Page = PageContent.Page) AS MaxRevision FROM PageContent WHERE [Page]=@Page ORDER BY LastModified"; SqlParameter parameter = new SqlParameter(); parameter.ParameterName = "@Page"; parameter.SqlDbType = System.Data.SqlDbType.VarChar; parameter.Value = pageName; command.Parameters.Add(parameter); bool hasContent = false; using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { PageContent content = new PageContent(); string editedBy = reader["User"].ToString(); DateTime editedOn = ConvertToUtcDateTime(reader["LastModified"]); string text = reader["Content"].ToString(); text = CleanContent(text, nameTitleMapping); int versionNumber = (int.Parse(reader["Revision"].ToString())) + 1; if (versionNumber == 0) versionNumber = (int.Parse(reader["MaxRevision"].ToString())) + 2; PageRepository.AddNewPageContentVersion(page, text, editedBy, editedOn, versionNumber); hasContent = true; } } // For broken content, make sure the page has something if (!hasContent) { PageRepository.AddNewPage(page, "", "unknown", DateTime.UtcNow); } } } }
/// <summary> /// Extracts and saves all textual content for a page. /// </summary> /// <param name="page">The page the content belongs to.</param> private void AddContent(string pageName, Page page) { using (SqlConnection connection = new SqlConnection(_connectionString)) { using (SqlCommand command = connection.CreateCommand()) { connection.Open(); command.CommandText = "SELECT * FROM PageContent WHERE [Page]=@Page"; SqlParameter parameter = new SqlParameter(); parameter.ParameterName = "@Page"; parameter.SqlDbType = System.Data.SqlDbType.VarChar; parameter.Value = pageName; command.Parameters.Add(parameter); List<PageContent> categories = new List<PageContent>(); bool hasContent = false; using (SqlDataReader reader = command.ExecuteReader()) { while (reader.Read()) { PageContent content = new PageContent(); string editedBy = reader["User"].ToString(); DateTime EditedOn = (DateTime)reader["LastModified"]; string text = reader["Content"].ToString(); text = CleanContent(text); int versionNumber = (int.Parse(reader["Revision"].ToString())) + 1; Repository.AddNewPageContentVersion(page, text, editedBy, EditedOn, versionNumber); hasContent = true; } } // For broken content, make sure the page has something if (!hasContent) { Repository.AddNewPage(page, "", "unknown", DateTime.UtcNow); } } } }
public PageViewModel(PageContent pageContent, MarkupConverter converter) { if (pageContent == null) throw new ArgumentNullException("pageContent"); if (pageContent.Page == null) throw new ArgumentNullException("pageContent.Page"); if (converter == null) throw new ArgumentNullException("converter"); RoadkillContext = ObjectFactory.GetInstance<IUserContext>(); Id = pageContent.Page.Id; Title = pageContent.Page.Title; PreviousTitle = pageContent.Page.Title; CreatedBy = pageContent.Page.CreatedBy; CreatedOn = pageContent.Page.CreatedOn; IsLocked = pageContent.Page.IsLocked; ModifiedBy = pageContent.Page.ModifiedBy; ModifiedOn = pageContent.Page.ModifiedOn; RawTags = pageContent.Page.Tags; Content = pageContent.Text; VersionNumber = pageContent.VersionNumber; ProjectStart = pageContent.Page.ProjectStart; ProjectEnd = pageContent.ProjectEnd; ProjectEstimatedTime = pageContent.ProjectEstimatedTime; ProjectStatus = pageContent.ProjectStatus; ProjectLanguage = pageContent.ProjectLanguage; orgID = pageContent.orgID; Rel = RelToUserToPage(Id); Relationships = GetRelationships(); PageHtml pageHtml = converter.ToHtml(pageContent.Text); ContentAsHtml = pageHtml.Html; IsCacheable = pageHtml.IsCacheable; PluginHeadHtml = pageHtml.HeadHtml; PluginFooterHtml = pageHtml.FooterHtml; PluginPreContainer = pageHtml.PreContainerHtml; PluginPostContainer = pageHtml.PostContainerHtml; CreatedOn = DateTime.SpecifyKind(CreatedOn, DateTimeKind.Utc); ModifiedOn = DateTime.SpecifyKind(ModifiedOn, DateTimeKind.Utc); AllTags = new List<TagViewModel>(); }
private Page AddDummyPage1() { Page page1 = new Page() { Id = 1, Tags = "tag1,tag2", Title = "Welcome to the site", CreatedBy = "admin" }; PageContent page1Content = new PageContent() { Id = Guid.NewGuid(), Page = page1, Text = "Hello world 1", VersionNumber = 1 }; _pageRepository.Pages.Add(page1); _pageRepository.PageContents.Add(page1Content); return page1; }
public void DeletePageContent(PageContent pageContent) { PageContents.Remove(pageContent); }
private Page AddDummyPage2() { Page page2 = new Page() { Id = 50, Tags = "anothertag", Title = "Page 2" }; PageContent page2Content = new PageContent() { Id = Guid.NewGuid(), Page = page2, Text = "Hello world 2" }; _pageRepository.Pages.Add(page2); _pageRepository.PageContents.Add(page2Content); return page2; }
public void UpdatePageContent(PageContent content) { PageContent existingContent = PageContents.FirstOrDefault(x => x.Id == content.Id); if (existingContent == null) { // Do nothing } else { existingContent.EditedOn = content.EditedOn; existingContent.EditedBy = content.EditedBy; existingContent.Text = content.Text; existingContent.VersionNumber = content.VersionNumber; } }