Represents a version of a page's textual content, for use in the data store.
Inheritance: IDataStoreEntity
Ejemplo n.º 1
0
        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>();
        }
Ejemplo n.º 2
0
		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);
		}
Ejemplo n.º 3
0
		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);
		}
Ejemplo n.º 5
0
		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);
		}
Ejemplo n.º 6
0
		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));
		}
Ejemplo n.º 7
0
        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));
        }
Ejemplo n.º 8
0
        /// <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;
        }
Ejemplo n.º 9
0
		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;
		}
Ejemplo n.º 10
0
		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));
		}
Ejemplo n.º 11
0
		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;
		}
Ejemplo n.º 12
0
		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));
		}
Ejemplo n.º 13
0
		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));
		}
Ejemplo n.º 14
0
		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);
		}
Ejemplo n.º 15
0
        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));
        }
Ejemplo n.º 16
0
		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));

		}
Ejemplo n.º 17
0
		/// <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);
					}
				}
			}
		}
Ejemplo n.º 18
0
		/// <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);
					}
				}
			}
		}
Ejemplo n.º 19
0
        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>();
        }
Ejemplo n.º 20
0
		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;
		}
Ejemplo n.º 21
0
		public void DeletePageContent(PageContent pageContent)
		{
			PageContents.Remove(pageContent);
		}
Ejemplo n.º 22
0
		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;
		}
Ejemplo n.º 23
0
		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;
			}
		}