public void allpagescreatedby_should_add_to_cache_when_cache_is_empty() { // Arrange string adminCacheKey = CacheKeys.AllPagesCreatedByKey("admin"); SettingsRepositoryMock settingsRepository = new SettingsRepositoryMock(); PageRepositoryMock pageRepository = new PageRepositoryMock(); pageRepository.AddNewPage(new Page() { Title = "1" }, "text", "admin", DateTime.UtcNow); pageRepository.AddNewPage(new Page() { Title = "2" }, "text", "admin", DateTime.UtcNow); pageRepository.AddNewPage(new Page() { Title = "3" }, "text", "editor", DateTime.UtcNow); CacheMock listCache = new CacheMock(); PageService pageService = CreatePageService(null, listCache, settingsRepository, pageRepository); // Act pageService.AllPagesCreatedBy("admin"); // Assert Assert.That(listCache.CacheItems.Count, Is.EqualTo(1)); Assert.That(listCache.CacheItems.FirstOrDefault().Key, Is.EqualTo(adminCacheKey)); }
public void alltags_should_add_to_cache_when_cache_is_empty() { // Arrange SettingsRepositoryMock settingsRepository = new SettingsRepositoryMock(); PageRepositoryMock pageRepository = new PageRepositoryMock(); pageRepository.AddNewPage(new Page() { Tags = "tag1;tag2" }, "text", "admin", DateTime.UtcNow); pageRepository.AddNewPage(new Page() { Tags = "tag3;tag4" }, "text", "admin", DateTime.UtcNow); CacheMock listCache = new CacheMock(); PageService pageService = CreatePageService(null, listCache, settingsRepository, pageRepository); // Act pageService.AllTags(); // Assert Assert.That(listCache.CacheItems.Count, Is.EqualTo(1)); Assert.That(listCache.CacheItems.FirstOrDefault().Key, Is.EqualTo(CacheKeys.AllTags())); }
public void AllPages_Should_Add_To_Cache_When_Cache_Is_Empty(bool loadPageContent) { // Arrange string cacheKey = (loadPageContent) ? (CacheKeys.AllPagesWithContent()) : (CacheKeys.AllPages()); SettingsRepositoryMock settingsRepository = new SettingsRepositoryMock(); PageRepositoryMock pageRepository = new PageRepositoryMock(); pageRepository.AddNewPage(new Page() { Title = "1" }, "text", "admin", DateTime.UtcNow); pageRepository.AddNewPage(new Page() { Title = "2" }, "text", "admin", DateTime.UtcNow); CacheMock listCache = new CacheMock(); PageService pageService = CreatePageService(null, listCache, settingsRepository, pageRepository); // Act pageService.AllPages(loadPageContent); // Assert Assert.That(listCache.CacheItems.Count, Is.EqualTo(1)); Assert.That(listCache.CacheItems.FirstOrDefault().Key, Is.EqualTo(cacheKey)); }
public void findbytag_should_add_to_cache_when_cache_is_empty() { // Arrange string cacheKey = CacheKeys.PagesByTagKey("tag1"); SettingsRepositoryMock settingsRepository = new SettingsRepositoryMock(); PageRepositoryMock pageRepository = new PageRepositoryMock(); pageRepository.AddNewPage(new Page() { Title = "1", Tags = "tag1" }, "text", "admin", DateTime.UtcNow); pageRepository.AddNewPage(new Page() { Title = "2", Tags = "tag2" }, "text", "admin", DateTime.UtcNow); pageRepository.AddNewPage(new Page() { Title = "2", Tags = "tag3" }, "text", "admin", DateTime.UtcNow); CacheMock listCache = new CacheMock(); PageService pageService = CreatePageService(null, listCache, settingsRepository, pageRepository); // Act pageService.FindByTag("tag1"); // Assert Assert.That(listCache.CacheItems.Count, Is.EqualTo(1)); Assert.That(listCache.CacheItems.FirstOrDefault().Key, Is.EqualTo(cacheKey)); }
public void clearpages_should_set_tempdata_message_and_clear_cache_and_clear_all_pages() { // Arrange _pageRepository.AddNewPage(new Page() { Id = 1 }, "text", "admin", DateTime.UtcNow); _pageRepository.AddNewPage(new Page() { Id = 2 }, "text", "admin", DateTime.UtcNow); _pageCache.Add(1, new PageViewModel()); _listCache.Add("list.somekey", new List <string>()); _siteCache.AddMenu("should not be cleared"); // Act RedirectToRouteResult result = _toolsController.ClearPages() as RedirectToRouteResult; // Assert Assert.That(result, Is.Not.Null, "RedirectToRouteResult"); Assert.That(result.RouteValues["action"], Is.EqualTo("Index")); Assert.That(_toolsController.TempData["SuccessMessage"], Is.EqualTo(SiteStrings.SiteSettings_Tools_ClearDatabase_Message)); Assert.That(_cache.Count(), Is.EqualTo(1)); Assert.That(_pageRepository.AllPages().Count(), Is.EqualTo(0)); }
public void put_should_update_page() { // Arrange DateTime version1Date = DateTime.Today.AddDays(-1); // stops the getlatestcontent acting up when add+update are the same time Page page = new Page(); page.Title = "Hello world"; page.Tags = "tag1, tag2"; page.CreatedOn = version1Date; page.ModifiedOn = version1Date; PageContent pageContent = _pageRepositoryMock.AddNewPage(page, "Some content1", "editor", version1Date); PageViewModel model = new PageViewModel(pageContent.Page); model.Title = "New title"; model.Content = "Some content2"; model.ModifiedOn = DateTime.UtcNow; // Act _pagesController.Put(model); // Assert Assert.That(_pageService.AllPages().Count(), Is.EqualTo(1)); PageViewModel actualPage = _pageService.GetById(1, true); Assert.That(actualPage.Title, Is.EqualTo("New title")); Assert.That(actualPage.Content, Is.EqualTo("Some content2")); }
public void updatepage_should_remove_homepage_from_cache_when_homepage_is_updated() { // Arrange SettingsRepositoryMock settingsRepository = new SettingsRepositoryMock(); PageRepositoryMock pageRepository = new PageRepositoryMock(); pageRepository.AddNewPage(new Page() { Tags = "homepage" }, "text", "admin", DateTime.UtcNow); CacheMock pageCache = new CacheMock(); CacheMock listCache = new CacheMock(); PageService pageService = CreatePageService(pageCache, listCache, settingsRepository, pageRepository); PageViewModel homepageModel = CreatePageViewModel(); homepageModel.RawTags = "homepage"; pageCache.Add(CacheKeys.HomepageKey(), homepageModel, new CacheItemPolicy()); // Act pageService.UpdatePage(homepageModel); // Assert Assert.That(pageCache.CacheItems.Count, Is.EqualTo(0)); }
public void renametag_should_clear_listcache() { // Arrange string tag1CacheKey = CacheKeys.PagesByTagKey("tag1"); SettingsRepositoryMock settingsRepository = new SettingsRepositoryMock(); PageRepositoryMock pageRepository = new PageRepositoryMock(); pageRepository.AddNewPage(new Page() { Tags = "homepage, tag1" }, "text1", "admin", DateTime.UtcNow); CacheMock listCache = new CacheMock(); PageViewModel homepageModel = CreatePageViewModel(); PageViewModel page1Model = CreatePageViewModel(); AddListCacheItem(listCache, tag1CacheKey, new List <PageViewModel>() { homepageModel, page1Model }); PageService pageService = CreatePageService(null, listCache, settingsRepository, pageRepository); // Act pageService.RenameTag("tag1", "some.other.tag"); // calls UpdatePage, which clears the cache // Assert Assert.That(listCache.CacheItems.Count, Is.EqualTo(0)); }
public void deletepage_should_clear_list_and_pagesummary_caches() { // Arrange SettingsRepositoryMock settingsRepository = new SettingsRepositoryMock(); PageRepositoryMock pageRepository = new PageRepositoryMock(); pageRepository.AddNewPage(new Page(), "text", "admin", DateTime.UtcNow); CacheMock pageCache = new CacheMock(); CacheMock listCache = new CacheMock(); PageService pageService = CreatePageService(pageCache, listCache, settingsRepository, pageRepository); PageViewModel expectedModel = CreatePageViewModel(); AddPageCacheItem(pageCache, "key", expectedModel); AddListCacheItem(listCache, "key", new List <string>() { "tag1", "tag2" }); // Act pageService.DeletePage(1); // Assert Assert.That(pageCache.CacheItems.Count, Is.EqualTo(0)); Assert.That(listCache.CacheItems.Count, Is.EqualTo(0)); }
/// <summary> /// Adds a page to the mock repository (which is just a list of Page and PageContent objects in memory). /// </summary> public PageViewModel AddToMockedRepository(int id, string createdBy, string title, string tags, DateTime createdOn, string textContent = "") { Page page = new Page(); page.Id = id; page.CreatedBy = createdBy; page.Title = title; page.Tags = tags; page.CreatedOn = createdOn; if (string.IsNullOrEmpty(textContent)) { textContent = title + "'s text"; } PageContent content = _pageRepository.AddNewPage(page, textContent, createdBy, createdOn); PageViewModel model = new PageViewModel() { Id = id, Title = title, Content = textContent, RawTags = tags, CreatedBy = createdBy, CreatedOn = createdOn }; return(model); }
public void external_links_with_anchor_tag_should_retain_the_anchor() { // Issue #172 // Arrange _settingsRepository.SiteSettings.MarkupType = "Creole"; _pageRepository.AddNewPage(new Page() { Id = 1, Title = "foo" }, "foo", "admin", DateTime.Today); _markupConverter = new MarkupConverter(_applicationSettings, _settingsRepository, _pageRepository, _pluginFactory); string expectedHtml = "<p><a rel=\"nofollow\" href=\"http://www.google.com/?blah=xyz#myanchor\" class=\"external-link\">Some link text</a>\n</p>"; // Act string actualHtml = _markupConverter.ToHtml("[[http://www.google.com/?blah=xyz#myanchor|Some link text]]"); // Assert Assert.That(actualHtml, Is.EqualTo(expectedHtml), actualHtml); }
public void updatepage_should_clear_list_cache_and_pagesummary_cache() { // Arrange SettingsRepositoryMock settingsRepository = new SettingsRepositoryMock(); PageRepositoryMock pageRepository = new PageRepositoryMock(); pageRepository.AddNewPage(new Page() { Tags = "homepage" }, "text", "admin", DateTime.UtcNow); pageRepository.AddNewPage(new Page() { Tags = "tag2" }, "text", "admin", DateTime.UtcNow); CacheMock pageCache = new CacheMock(); CacheMock listCache = new CacheMock(); PageService pageService = CreatePageService(pageCache, listCache, settingsRepository, pageRepository); PageViewModel homepageModel = CreatePageViewModel(); homepageModel.Id = 1; PageViewModel page2Model = CreatePageViewModel(); page2Model.Id = 2; AddPageCacheItem(pageCache, CacheKeys.HomepageKey(), homepageModel); pageCache.Add(CacheKeys.PageViewModelKey(2, 0), page2Model, new CacheItemPolicy()); AddListCacheItem(listCache, CacheKeys.AllTags(), new List <string>() { "tag1", "tag2" }); // Act pageService.UpdatePage(page2Model); // Assert Assert.That(pageCache.CacheItems.Count, Is.EqualTo(1)); Assert.That(listCache.CacheItems.Count, Is.EqualTo(0)); }
public void pagetoolbar_should_return_partialview() { // Arrange _pageRepository.AddNewPage(new Page() { Title = "Title" }, "text", "admin", DateTime.UtcNow); // Act ActionResult result = _wikiController.PageToolbar(1); // Assert PartialViewResult partialResult = result.AssertResultIs <PartialViewResult>(); partialResult.AssertPartialViewRendered(); }
public void internal_links_should_resolve_with_id() { // Bug #87 // Arrange Page page = new Page() { Id = 1, Title = "My first page" }; var settingsRepository = new SettingsRepositoryMock(); settingsRepository.SiteSettings = new SiteSettings() { MarkupType = "Markdown" }; PageRepositoryMock pageRepositoryStub = new PageRepositoryMock(); pageRepositoryStub.AddNewPage(page, "My first page", "admin", DateTime.UtcNow); ApplicationSettings settings = new ApplicationSettings(); settings.Installed = true; UrlResolverMock resolver = new UrlResolverMock(); resolver.InternalUrl = "blah"; MarkupConverter converter = new MarkupConverter(settings, settingsRepository, pageRepositoryStub, _pluginFactory); converter.UrlResolver = resolver; string markdownText = "[Link](My-first-page)"; string invalidMarkdownText = "[Link](My first page)"; // Act string expectedHtml = "<p><a href=\"blah\">Link</a></p>\n"; string expectedInvalidLinkHtml = "<p>[Link](My first page)</p>\n"; string actualHtml = converter.ToHtml(markdownText); string actualHtmlInvalidLink = converter.ToHtml(invalidMarkdownText); // Assert Assert.That(actualHtml, Is.EqualTo(expectedHtml)); Assert.That(actualHtmlInvalidLink, Is.EqualTo(expectedInvalidLinkHtml)); }
public void should_replace_markdown_with_internal_link() { // Arrange string menuMarkup = "* [First link](my-page)\r\n"; string expectedHtml = "<ul><li><a href=\"/wiki/1/my-page\">First link</a></li></ul>"; _settingsRepository.SiteSettings.MenuMarkup = menuMarkup; _pageRepository.AddNewPage(new Page() { Title = "my page", Id = 1 }, "text", "user", DateTime.Now); // Act string actualHtml = _menuParser.GetMenu(); // Assert Assert.That(actualHtml, Is.EqualTo(expectedHtml)); }
public void compareversions_has_last_two_versions() { // Arrange DateTime createdDate = DateTime.Today.AddDays(-1); Page page = NewPage("admin"); PageContent v1Content = _pageRepository.AddNewPage(page, "v1 text", "admin", createdDate); PageContent v2Content = _pageRepository.AddNewPageContentVersion(page, "v2 text", "admin", createdDate.AddHours(1), 2); PageContent v3Content = _pageRepository.AddNewPageContentVersion(page, "v3 text", "admin", createdDate.AddHours(2), 3); PageContent v4Content = _pageRepository.AddNewPageContentVersion(page, "v4 text", "admin", createdDate.AddHours(3), 4); // Act List<PageViewModel> versionList = _historyService.CompareVersions(v4Content.Id).ToList(); // Assert Assert.That(versionList.Count, Is.EqualTo(2)); Assert.That(versionList[0].Id, Is.EqualTo(v3Content.Page.Id)); Assert.That(versionList[1].Id, Is.EqualTo(v4Content.Page.Id)); }
public void findhomepage_should_add_to_cache_when_cache_is_empty() { // Arrange SettingsRepositoryMock settingsRepository = new SettingsRepositoryMock(); PageRepositoryMock pageRepository = new PageRepositoryMock(); pageRepository.AddNewPage(new Page() { Title = "1", Tags = "homepage" }, "text", "admin", DateTime.UtcNow); CacheMock pageCache = new CacheMock(); PageService pageService = CreatePageService(pageCache, null, settingsRepository, pageRepository); // Act pageService.FindHomePage(); // Assert Assert.That(pageCache.CacheItems.Count, Is.EqualTo(1)); Assert.That(pageCache.CacheItems.FirstOrDefault().Key, Is.EqualTo(CacheKeys.HomepageKey())); }
private WikiController CreateWikiController(BrowserCacheAttribute attribute) { // Settings ApplicationSettings appSettings = new ApplicationSettings() { Installed = true, UseBrowserCache = true }; UserContextStub userContext = new UserContextStub() { IsLoggedIn = false }; // PageService PageViewModelCache pageViewModelCache = new PageViewModelCache(appSettings, CacheMock.RoadkillCache); ListCache listCache = new ListCache(appSettings, CacheMock.RoadkillCache); SiteCache siteCache = new SiteCache(CacheMock.RoadkillCache); SearchServiceMock searchService = new SearchServiceMock(appSettings, _settingsRepository, _pageRepository, _pluginFactory); PageHistoryService historyService = new PageHistoryService(appSettings, _settingsRepository, _pageRepository, userContext, pageViewModelCache, _pluginFactory); PageService pageService = new PageService(appSettings, _settingsRepository, _pageRepository, searchService, historyService, userContext, listCache, pageViewModelCache, siteCache, _pluginFactory); // WikiController SettingsService settingsService = new SettingsService(new RepositoryFactoryMock(), appSettings); UserServiceStub userManager = new UserServiceStub(); WikiController wikiController = new WikiController(appSettings, userManager, pageService, userContext, settingsService); // Create a page that the request is for Page page = new Page() { Title = "title", ModifiedOn = _pageModifiedDate }; _pageRepository.AddNewPage(page, "text", "user", _pageCreatedDate); // Update the BrowserCacheAttribute attribute.ApplicationSettings = appSettings; attribute.Context = userContext; attribute.PageService = pageService; return(wikiController); }
public void images_should_support_dimensions_and_titles() { // Arrange Page page = new Page() { Id = 1, Title = "My first page" }; PageRepositoryMock pageRepositoryStub = new PageRepositoryMock(); pageRepositoryStub.AddNewPage(page, "My first page", "admin", DateTime.UtcNow); var settingsRepository = new SettingsRepositoryMock(); settingsRepository.SiteSettings = new SiteSettings() { MarkupType = "Markdown" }; ApplicationSettings settings = new ApplicationSettings(); settings.Installed = true; MarkupConverter converter = new MarkupConverter(settings, settingsRepository, pageRepositoryStub, _pluginFactory); string markdownText = "Here is an image with a title:![Image](/Image1.png \"Image\") \n\n" + "And another with equal dimensions ![Square](/Image1.png \"Square\" =250x) \n\n" + "And this one is a rectangle ![Rectangle](/Image1.png \"Rectangle\" =250x350)"; string expectedHtml = "<p>Here is an image with a title:<img src=\"/Attachments/Image1.png\" class=\"img-responsive\" border=\"0\" alt=\"Image\" width=\"\" height=\"\" title=\"Image\" /> </p>\n\n" + "<p>And another with equal dimensions <img src=\"/Attachments/Image1.png\" class=\"img-responsive\" border=\"0\" alt=\"Square\" width=\"250px\" height=\"\" title=\"Square\" /> </p>\n\n" + "<p>And this one is a rectangle <img src=\"/Attachments/Image1.png\" class=\"img-responsive\" border=\"0\" alt=\"Rectangle\" width=\"250px\" height=\"350px\" title=\"Rectangle\" /></p>\n"; // Act string actualHtml = converter.ToHtml(markdownText); // Assert Assert.That(actualHtml, Is.EqualTo(expectedHtml)); }
public void code_blocks_should_allow_quotes() { // Issue #82 // Arrange Page page = new Page() { Id = 1, Title = "My first page" }; PageRepositoryMock pageRepositoryStub = new PageRepositoryMock(); pageRepositoryStub.AddNewPage(page, "My first page", "admin", DateTime.UtcNow); var settingsRepository = new SettingsRepositoryMock(); settingsRepository.SiteSettings = new SiteSettings() { MarkupType = "Markdown" }; ApplicationSettings settings = new ApplicationSettings(); settings.Installed = true; MarkupConverter converter = new MarkupConverter(settings, settingsRepository, pageRepositoryStub, _pluginFactory); string markdownText = "Here is some `// code with a 'quote' in it and another \"quote\"`\n\n" + " var x = \"some tabbed code\";\n\n"; // 2 line breaks followed by 4 spaces (tab stop) at the start indicates a code block string expectedHtml = "<p>Here is some <code>// code with a 'quote' in it and another \"quote\"</code></p>\n\n" + "<pre><code>var x = \"some tabbed code\";\n" + "</code></pre>\n"; // Act string actualHtml = converter.ToHtml(markdownText); // Assert Assert.That(actualHtml, Is.EqualTo(expectedHtml)); }
public void exportasxml_should_return_non_empty_stream() { // Arrange _pageRepository.AddNewPage(new Page() { Id = 1 }, "text", "admin", DateTime.UtcNow); _pageRepository.AddNewPage(new Page() { Id = 2 }, "text", "admin", DateTime.UtcNow); // Act Stream stream = _wikiExporter.ExportAsXml(); // Assert Assert.That(stream.Length, Is.GreaterThan(1)); }
public void about_should_return_viewresult_and_page_with_about_tag_as_model() { // Arrange Page aboutPage = new Page() { Id = 1, Title = "about", Tags = "about" }; _pageRepository.AddNewPage(aboutPage, "text", "nobody", DateTime.Now); // Act ViewResult result = _helpController.About() as ViewResult; // Assert Assert.That(result, Is.Not.Null); PageViewModel model = result.ModelFromActionResult <PageViewModel>(); Assert.NotNull(model, "Null model"); Assert.That(model.Id, Is.EqualTo(aboutPage.Id)); Assert.That(model.Title, Is.EqualTo(aboutPage.Title)); }
public void should_export_pages_with_content() { // Arrange var settingsRepository = new SettingsRepositoryMock(); var pageRepository = new PageRepositoryMock(); settingsRepository.SiteSettings.PluginLastSaveDate = DateTime.Today; DateTime page1CreatedOn = new DateTime(2013, 01, 01, 12, 00, 00); DateTime page1ModifiedOn = new DateTime(2013, 01, 01, 13, 00, 00); DateTime page2CreatedOn = new DateTime(2013, 01, 02, 12, 00, 00); DateTime page2ModifiedOn = new DateTime(2013, 01, 02, 13, 00, 00); DateTime page3CreatedOn = new DateTime(2013, 01, 03, 12, 00, 00); DateTime page3ModifiedOn = new DateTime(2013, 01, 03, 13, 00, 00); Guid page1ContentId = new Guid("13a8ad19-b203-46f5-be10-11e0ebf6f812"); Guid page2ContentId = new Guid("143b0023-329a-49b9-97a4-5094a0e378a2"); Guid page3ContentId = new Guid("15ee19ef-c093-47de-97d2-83dec406d92d"); string page1Text = @"the text ;''' "" more text """ ; string page2Text = @"the text ;''' #### sdfsdfsdf #### "" blah text """ ; string page3Text = @"the text ;''' #### dddd **dddd** #### "" pppp text """ ; Page page1 = new Page() { CreatedBy = "created-by-user1", CreatedOn = page1CreatedOn, Id = 1, IsLocked = true, ModifiedBy = "modified-by-user2", ModifiedOn = page1ModifiedOn, Tags = "tag1,tag2,tag3", Title = "Page 1 title" }; Page page2 = new Page() { CreatedBy = "created-by-user2", CreatedOn = page2CreatedOn, Id = 2, IsLocked = true, ModifiedBy = "modified-by-user2", ModifiedOn = page2ModifiedOn, Tags = "tagA,tagB,tagC", Title = "Page 2 title" }; Page page3 = new Page() { CreatedBy = "created-by-user3", CreatedOn = page3CreatedOn, Id = 3, IsLocked = false, ModifiedBy = "modified-by-user3", ModifiedOn = page3ModifiedOn, Tags = "tagX,tagY,tagZ", Title = "Page 3 title" }; PageContent pageContent1 = pageRepository.AddNewPage(page1, page1Text, "modified-by-user1", page1ModifiedOn); pageContent1.Id = page1ContentId; PageContent pageContent2 = pageRepository.AddNewPage(page2, page2Text, "modified-by-user2", page2ModifiedOn); pageContent2.Id = page2ContentId; PageContent pageContent3 = pageRepository.AddNewPage(page3, page3Text, "modified-by-user3", page3ModifiedOn); pageContent3.Id = page3ContentId; SqlExportBuilder builder = new SqlExportBuilder(settingsRepository, new UserRepositoryMock(), pageRepository, new PluginFactoryMock()); builder.IncludeConfiguration = false; builder.IncludePages = true; string expectedSql = ReadEmbeddedResource("expected-pages-export.sql"); // Act string actualSql = builder.Export(); // Assert Assert.That(actualSql, Is.EqualTo(expectedSql), actualSql); }