public void Crud_Success() { var newPage = Models.CreateDocumentationPage(); Assert.AreEqual(0, newPage.Id, "The page id should not be set until after data layer Page_Create method is called."); DocumentationPageRepository.Create(newPage); Assert.AreNotEqual(0, newPage.Id, "The page id should have been set by the data layer."); var oldTitle = newPage.Title; newPage.Title = "New Page Title"; DocumentationPageRepository.Update(newPage); var existingPage = DocumentationPageRepository.Read(newPage.Id); Assert.IsNotNull(existingPage, "The page should exist in the database."); Assert.AreNotEqual(oldTitle, existingPage.Title, "The page's title should have been updated."); Assert.AreEqual(newPage.Content, existingPage.Content, "The rest of the page instances' contents should be the same."); DocumentationPageRepository.Delete(newPage.Id); var deletedPage = DocumentationPageRepository.Read(newPage.Id); Assert.That(deletedPage, Is.Null, "The page should have been deleted from the database."); }
public void Process_Success() { // Arrange var page = Models.CreateDocumentationPage(id: 84932); var pageRepository = Mocks.Create <IDocumentationPageRepository>(); pageRepository.Setup(r => r.Read(page.Id)).Returns(page); var processor = new ReadDocumentationPageRequestProcessor(pageRepository.Object); // Act var result = processor.Process(page.Id.ToString()); // Assert Assert.That(result, Is.Not.Null, "A valid ResponseState should be returned."); Assert.That(result.StatusCode, Is.EqualTo(HttpStatusCode.OK), "The request should succeed."); Assert.That(result.ContentType, Is.EqualTo(ContentTypes.Json), "JSON should be returned in the response."); var serializer = new JavaScriptSerializer(); var clientPage = serializer.Deserialize <DocumentationPage>(result.Content); Assert.That(clientPage.Id, Is.EqualTo(page.Id), "The page read from the repository should be included in the result."); Mocks.VerifyAll(); }
public void Process_ExistingPage() { // Arrange var dataStorePage = Models.CreateDocumentationPage(id: 84926); var clientPage = new DocumentationPage { Id = dataStorePage.Id, // Same id as data store page because this is an existing page. Title = dataStorePage.Title, Content = dataStorePage.Content, Order = dataStorePage.Order, ParentPageId = dataStorePage.ParentPageId, }; var documentationPageRepository = Mocks.Create <IDocumentationPageRepository>(); documentationPageRepository.Setup(r => r.Read(clientPage.Id)).Returns(dataStorePage); documentationPageRepository.Setup(r => r.Update(It.Is <DocumentationPage>(p => p.Id == clientPage.Id))); var serializer = new JavaScriptSerializer(); var requestData = serializer.Serialize(clientPage); var processor = new SaveDocumentationPageRequestProcessor(documentationPageRepository.Object); // Act var result = processor.Process(requestData); // Assert Assert.That(result, Is.Not.Null, "A response state instance should be returned."); Assert.That(result.ContentType, Is.EqualTo(ContentTypes.Json), "The response content should contain JSON."); var resultPage = serializer.Deserialize <DocumentationPage>(result.Content); Assert.That(resultPage.Id, Is.EqualTo(clientPage.Id), "The page id should not change."); Mocks.VerifyAll(); }
public void ReadByParentId_Success() { // Arrange var parentPage = Models.CreateDocumentationPage(); DocumentationPageRepository.Create(parentPage); var childPage1 = Models.CreateDocumentationPage(parentPageId: parentPage.Id); DocumentationPageRepository.Create(childPage1); var childPage2 = Models.CreateDocumentationPage(parentPageId: parentPage.Id); DocumentationPageRepository.Create(childPage2); var noisePage = Models.CreateDocumentationPage(); DocumentationPageRepository.Create(noisePage); // Act var results = DocumentationPageRepository.ReadByParentId(parentPage.Id); // Assert Assert.AreEqual(2, results.Count(), "Two child pages exist and should be returned."); Assert.IsNotNull(results.Where(p => p.Id == childPage1.Id).FirstOrDefault(), "The results should contain childPage1."); var childPage2Result = results.Where(p => p.Id == childPage2.Id).FirstOrDefault(); Assert.IsNotNull(childPage2Result, "The results should contain childPage2."); }
public void InstallFromSkippedFile() { var dataStoreManager = new TestFixtureDataStoreManager(); var firstPage = Models.CreateDocumentationPage(); _documentationPageRepository.Create(firstPage); // Generate content file. var contentFileName = Path.GetTempFileName(); dataStoreManager.ExportContent(contentFileName); // Change content and recreate installation file. var deletedPage = Models.CreateDocumentationPage(); var recreatedPage = Models.CreateDocumentationPage(); var lastPage = Models.CreateDocumentationPage(); _documentationPageRepository.Create(deletedPage); _documentationPageRepository.Create(recreatedPage); _documentationPageRepository.Create(lastPage); _documentationPageRepository.Delete(recreatedPage.Id); _documentationPageRepository.Create(recreatedPage); _documentationPageRepository.Delete(deletedPage.Id); // Regenerate content file. dataStoreManager.ExportContent(contentFileName); // Reset data store and exercise startup file. dataStoreManager.DeleteDataStore(); dataStoreManager.CreateDataStore(); dataStoreManager.ImportContent(contentFileName); // Validate model ids. var newFirstPage = _documentationPageRepository.Read(firstPage.Id); var deletedPageResult = _documentationPageRepository.Read(deletedPage.Id); Assert.That(deletedPageResult, Is.Null, "The data layer should return null for non-existant pages."); var newRecreatedPage = _documentationPageRepository.Read(recreatedPage.Id); var newLastPage = _documentationPageRepository.Read(lastPage.Id); Assert.That(newFirstPage, Is.Not.Null, "First page should still exist."); Assert.That(newFirstPage.Title, Is.EqualTo(firstPage.Title), "Old first page title should match new page with its id."); Assert.That(newRecreatedPage, Is.Not.Null, "Recreated page should still exist."); Assert.That(newRecreatedPage.Title, Is.EqualTo(recreatedPage.Title), "Old recreated page title should match new recreated page title."); Assert.That(newLastPage, Is.Not.Null, "Last page should still exist."); Assert.That(newLastPage.Title, Is.EqualTo(lastPage.Title), "Old last page title should match new last page title."); }
public void Import_NewPage() { // Arrange var page = Models.CreateDocumentationPage(); page.Id = 10573; // Act DocumentationPageRepository.Import(page); var result = DocumentationPageRepository.Read(page.Id); // Assert Assert.That(result, Is.Not.Null, "The page should have been created with the supplied id."); Assert.That(result.Title, Is.EqualTo(page.Title), "The page Title should have been added to the data store."); }
public void Import_ExistingPage() { // Arrange var page = Models.CreateDocumentationPage(); DocumentationPageRepository.Create(page); page.Title = "Imported existing page title."; // Act DocumentationPageRepository.Import(page); var result = DocumentationPageRepository.Read(page.Id); // Assert Assert.That(result, Is.Not.Null, "The page should still exist in the repository."); Assert.That(result.Title, Is.EqualTo(page.Title), "The title should have been updated on import."); }
public void Process_MoveToNewParent() { // Arrange var oldParentPage = Models.CreateDocumentationPage(id: 46382); var newParentPage = Models.CreateDocumentationPage(id: 29556); var oldLowerSibling = Models.CreateDocumentationPage(id: 98732, parentPageId: oldParentPage.Id, order: 0); var targetPage = Models.CreateDocumentationPage(id: 43900, parentPageId: oldParentPage.Id, order: 1); var oldHigherSibling = Models.CreateDocumentationPage(id: 43729, parentPageId: oldParentPage.Id, order: 2); var oldSiblings = new List <DocumentationPage> { oldLowerSibling, targetPage, oldHigherSibling }; var newLowerSibling = Models.CreateDocumentationPage(id: 12943, parentPageId: newParentPage.Id, order: 0); var newHigherSibling = Models.CreateDocumentationPage(id: 84539, parentPageId: newParentPage.Id, order: 1); var newSiblings = new List <DocumentationPage> { newLowerSibling, newHigherSibling }; var pageRepository = Mocks.Create <IDocumentationPageRepository>(); pageRepository.Setup(r => r.Read(targetPage.Id)).Returns(targetPage); pageRepository.Setup(r => r.ReadByParentId(oldParentPage.Id)).Returns(oldSiblings); pageRepository.Setup(r => r.Update(It.Is <DocumentationPage>(p => p.Id == oldHigherSibling.Id && p.Order == 1))); pageRepository.Setup(r => r.ReadByParentId(newParentPage.Id)).Returns(newSiblings); pageRepository.Setup(r => r.Update(It.Is <DocumentationPage>(p => p.Id == targetPage.Id && p.ParentPageId == newParentPage.Id && p.Order == 1))); pageRepository.Setup(r => r.Update(It.Is <DocumentationPage>(p => p.Id == newHigherSibling.Id && p.Order == 2))); var serializer = new JavaScriptSerializer(); var moveRequest = new MoveTocRequest { PageId = targetPage.Id, NewParentId = newParentPage.Id, NewPosition = 1 }; var requestData = serializer.Serialize(moveRequest); var processor = new MovePageRequestProcessor(pageRepository.Object); // Act var result = processor.Process(requestData); // Assert Assert.That(result, Is.Not.Null, "A valid response state instance should be returned."); Assert.That(result.StatusCode, Is.EqualTo(HttpStatusCode.OK), "The result status code should be OK."); Assert.That(result.ContentType, Is.EqualTo(ContentTypes.Html), "The result content type should be HTML."); Mocks.VerifyAll(); }
public void Process_Success() { // Arrange var page = Models.CreateDocumentationPage(id: 66387, order: 1, parentPageId: 23198); var sibling0 = Models.CreateDocumentationPage(id: 98231, order: 0, parentPageId: page.ParentPageId); var sibling2 = Models.CreateDocumentationPage(id: 66123, order: 2, parentPageId: page.ParentPageId); var child0 = Models.CreateDocumentationPage(id: 4392, order: 0, parentPageId: page.Id); var child1 = Models.CreateDocumentationPage(id: 9342, order: 1, parentPageId: page.Id); var siblings = new List <DocumentationPage> { sibling0, page, sibling2 }; var children = new List <DocumentationPage> { child0, child1 }; var pageRepository = Mocks.Create <IDocumentationPageRepository>(); pageRepository.Setup(r => r.Read(page.Id)).Returns(page); pageRepository.Setup(r => r.ReadByParentId(page.ParentPageId)).Returns(siblings); // read to update orders. pageRepository.Setup(r => r.ReadByParentId(page.Id)).Returns(children); // read to update orders and parent id. pageRepository.Setup(r => r.Update(It.Is <DocumentationPage>(p => p.Id == child0.Id && p.ParentPageId == page.ParentPageId && p.Order == 1))); pageRepository.Setup(r => r.Update(It.Is <DocumentationPage>(p => p.Id == child1.Id && p.ParentPageId == page.ParentPageId && p.Order == 2))); pageRepository.Setup(r => r.Update(It.Is <DocumentationPage>(p => p.Id == sibling2.Id && p.ParentPageId == page.ParentPageId && p.Order == 3))); pageRepository.Setup(r => r.Delete(page.Id)); var bulletRepository = Mocks.Create <IBulletRepository>(); bulletRepository.Setup(r => r.DeleteByPageId(page.Id)); var userPageSettingsRepository = Mocks.Create <IUserPageSettingsRepository>(); userPageSettingsRepository.Setup(r => r.DeleteByPageId(page.Id)); var processor = new DeletePageRequestProcessor(bulletRepository.Object, pageRepository.Object, userPageSettingsRepository.Object); // Act var result = processor.Process(page.Id.ToString()); // Assert Assert.That(result, Is.Not.Null, "A Valid ResponseState should be returned."); Assert.That(result.StatusCode, Is.EqualTo(HttpStatusCode.OK), "The request should return a valid HTTP status."); }
public void ReadTableOfContents_Visible() { // Arrange var root = Models.CreateDocumentationPage(order: 1, isHidden: false); DocumentationPageRepository.Create(root); var child = Models.CreateDocumentationPage(order: 1, parentPageId: root.Id, isHidden: true); DocumentationPageRepository.Create(child); var grandchild = Models.CreateDocumentationPage(order: 1, parentPageId: child.Id, isHidden: false); DocumentationPageRepository.Create(grandchild); // Act var toc = DocumentationPageRepository.ReadTableOfContents(false); // Assert Assert.AreEqual(1, toc.Count(), "Only one page should be returned because all other pages are hidden or beneath hidden pages."); Assert.AreEqual(root.Id, toc[0].Id, "The root page should be the only page included in the table of contents."); }
public void Process_ChangeParentPage() { // Arrange var dataStorePage = Models.CreateDocumentationPage(id: 75326, parentPageId: 12943, order: 5); var clientPage = Models.CreateDocumentationPage(id: dataStorePage.Id, parentPageId: 543, order: dataStorePage.Order); var serializer = new JavaScriptSerializer(); var requestData = serializer.Serialize(clientPage); var documentationPageRepository = Mocks.Create <IDocumentationPageRepository>(); documentationPageRepository.Setup(r => r.Read(clientPage.Id)).Returns(dataStorePage); var processor = new SaveDocumentationPageRequestProcessor(documentationPageRepository.Object); // Act processor.Process(requestData); // Assert // InvalidOperationException should be thrown. }
public void Process_MoveLowerInSameParent() { // Arrange var parentPage = Models.CreateDocumentationPage(id: 37453); var firstSibling = Models.CreateDocumentationPage(id: 87623, parentPageId: parentPage.Id, order: 0); var secondSibling = Models.CreateDocumentationPage(id: 12387, parentPageId: parentPage.Id, order: 1); var thirdSibling = Models.CreateDocumentationPage(id: 54356, parentPageId: parentPage.Id, order: 2); var targetPage = Models.CreateDocumentationPage(id: 76527, parentPageId: parentPage.Id, order: 3); var fourthSibling = Models.CreateDocumentationPage(id: 33452, parentPageId: parentPage.Id, order: 4); var siblings = new List <DocumentationPage> { firstSibling, secondSibling, thirdSibling, targetPage, fourthSibling }; var pageRepository = Mocks.Create <IDocumentationPageRepository>(); pageRepository.Setup(r => r.Read(targetPage.Id)).Returns(targetPage); pageRepository.Setup(r => r.ReadByParentId(parentPage.Id)).Returns(siblings); pageRepository.Setup(r => r.Update(It.Is <DocumentationPage>(p => p.Id == targetPage.Id && p.ParentPageId == parentPage.Id && p.Order == 1))); pageRepository.Setup(r => r.Update(It.Is <DocumentationPage>(p => p.Id == secondSibling.Id && p.ParentPageId == parentPage.Id && p.Order == 2))); pageRepository.Setup(r => r.Update(It.Is <DocumentationPage>(p => p.Id == thirdSibling.Id && p.ParentPageId == parentPage.Id && p.Order == 3))); var serializer = new JavaScriptSerializer(); var moveRequest = new MoveTocRequest { PageId = targetPage.Id, NewParentId = parentPage.Id, NewPosition = 1 }; var requestData = serializer.Serialize(moveRequest); var processor = new MovePageRequestProcessor(pageRepository.Object); // Act var result = processor.Process(requestData); // Assert Assert.That(result, Is.Not.Null, "A valid response state instance should be returned."); Assert.That(result.StatusCode, Is.EqualTo(HttpStatusCode.OK), "The result status code should be OK."); Assert.That(result.ContentType, Is.EqualTo(ContentTypes.Html), "The result content type should be HTML."); Mocks.VerifyAll(); }
public void ReadTableOfContents_All() { // Arrange var root_1 = Models.CreateDocumentationPage(order: 1); DocumentationPageRepository.Create(root_1); var child_1_1 = Models.CreateDocumentationPage(parentPageId: root_1.Id, order: 1); DocumentationPageRepository.Create(child_1_1); var child_1_1_1 = Models.CreateDocumentationPage(parentPageId: child_1_1.Id, order: 1); DocumentationPageRepository.Create(child_1_1_1); var child_1_2 = Models.CreateDocumentationPage(parentPageId: root_1.Id, order: 2); DocumentationPageRepository.Create(child_1_2); var root_2 = Models.CreateDocumentationPage(order: 2); DocumentationPageRepository.Create(root_2); var child_2_1 = Models.CreateDocumentationPage(parentPageId: root_2.Id, order: 1); DocumentationPageRepository.Create(child_2_1); // Act var toc = DocumentationPageRepository.ReadTableOfContents(true); // Assert Assert.AreEqual(6, toc.Count(), "Six pages should be returned in the table of contents."); Assert.IsNull(toc[0].Content, "Content should not be returned in the table of contents."); // Nodes are returned first by their depth starting with root nodes, then by their order, then by name. Assert.AreEqual(root_1.Id, toc[0].Id, "The first root node should be first in the table of contents."); Assert.AreEqual(root_2.Id, toc[1].Id, "The second root node should be returned second in the table of contents."); Assert.AreEqual(child_1_1.Id, toc[2].Id, "The first child node of the first root node should be returned third in the table of contents."); Assert.AreEqual(child_2_1.Id, toc[3].Id, "The child node of the second root node should be returned fourth in the table of contents."); Assert.AreEqual(child_1_2.Id, toc[4].Id, "The second child node of the first root node should be returned fifth in the table of contents."); Assert.AreEqual(child_1_1_1.Id, toc[5].Id, "The grandchild node should be returned sixth in the table of contents."); }
public void DeleteExcept_Success() { // Arrange var keptPage = Models.CreateDocumentationPage(); DocumentationPageRepository.Create(keptPage); var deletedPage = Models.CreateDocumentationPage(); DocumentationPageRepository.Create(deletedPage); var anotherDeletedPage = Models.CreateDocumentationPage(); DocumentationPageRepository.Create(anotherDeletedPage); // Act DocumentationPageRepository.DeleteExcept(new List <int> { keptPage.Id }); // Assert var pages = DocumentationPageRepository.ReadAll().ToList(); Assert.That(pages.Count, Is.EqualTo(1), "Only one page should be left in the repository."); Assert.That(pages[0].Id, Is.EqualTo(keptPage.Id), "The kept page should remain because its id was in the list."); }
public void Process_NewPage() { // Arrange var parentPage = Models.CreateDocumentationPage(id: 74362); var lowerSiblingPage = Models.CreateDocumentationPage(id: 63254, parentPageId: parentPage.Id, order: 0); var higherSiblingPage = Models.CreateDocumentationPage(id: 1342, parentPageId: parentPage.Id, order: 1); var highestSiblingPage = Models.CreateDocumentationPage(id: 8724, parentPageId: parentPage.Id, order: 2); var siblingPages = new List <DocumentationPage> { lowerSiblingPage, higherSiblingPage, highestSiblingPage }; var clientPage = Models.CreateDocumentationPage(parentPageId: parentPage.Id, order: 1); var documentationPageRepository = Mocks.Create <IDocumentationPageRepository>(); documentationPageRepository.Setup(r => r.ReadByParentId(clientPage.ParentPageId)).Returns(siblingPages); documentationPageRepository.Setup(r => r.Update(It.Is <DocumentationPage>(p => p.Id == higherSiblingPage.Id && p.Order == 2))); documentationPageRepository.Setup(r => r.Update(It.Is <DocumentationPage>(p => p.Id == highestSiblingPage.Id && p.Order == 3))); documentationPageRepository.Setup(r => r.Create(It.Is <DocumentationPage>(p => p.Title == clientPage.Title))); var serializer = new JavaScriptSerializer(); var requestData = serializer.Serialize(clientPage); var processor = new SaveDocumentationPageRequestProcessor(documentationPageRepository.Object); // Act var result = processor.Process(requestData); // Assert Mocks.VerifyAll(); Assert.That(result, Is.Not.Null, "Response state instance expected."); Assert.That(result.ContentType, Is.EqualTo(ContentTypes.Json), "JSON result expected."); Assert.That(result.StatusCode, Is.EqualTo(HttpStatusCode.OK), "Valid response code expected."); var resultPage = serializer.Deserialize <DocumentationPage>(result.Content); Assert.That(resultPage.Title, Is.EqualTo(clientPage.Title), "The title of the result page should match the client page."); }