/// <summary> /// Updates the provided page. /// </summary> /// <param name="model">The summary.</param> /// <exception cref="DatabaseException">An databaseerror occurred while updating.</exception> /// <exception cref="SearchException">An error occurred adding the page to the search index.</exception> public void UpdatePage(PageViewModel model) { try { string currentUser = _context.CurrentUsername; Page page = Repository.GetPageById(model.Id); page.Title = model.Title; page.Tags = model.CommaDelimitedTags(); page.ModifiedOn = DateTime.UtcNow; page.ModifiedBy = AppendIpForDemoSite(currentUser); page.ProjectStart = model.ProjectStart; page.ProjectEnd = model.ProjectEnd; page.ProjectEstimatedTime = model.ProjectEstimatedTime; page.ProjectLanguage = model.ProjectLanguage; page.ProjectStatus = model.ProjectStatus; page.OrgID = model.OrgID; // A second check to ensure a fake IsLocked POST doesn't work. if (_context.IsAdmin) { page.IsLocked = model.IsLocked; } Repository.SaveOrUpdatePage(page); // // Update the cache - updating a page is expensive for the cache right now // this could be improved by updating the item in the listcache instead of invalidating it // _pageViewModelCache.Remove(model.Id, 0); if (model.Tags.Contains("homepage")) { _pageViewModelCache.RemoveHomePage(); } _listCache.RemoveAll(); int newVersion = _historyService.MaxVersion(model.Id) + 1; PageContent pageContent = Repository.AddNewPageContentVersion(page, model.Content, AppendIpForDemoSite(currentUser), DateTime.UtcNow, newVersion, model.ProjectStart, model.ProjectEnd, model.ProjectEstimatedTime, model.ProjectStatus, model.ProjectLanguage, model.OrgID); // Update all links to this page (if it has had its title renamed). Case changes don't need any updates. if (model.PreviousTitle != null && model.PreviousTitle.ToLower() != model.Title.ToLower()) { UpdateLinksToPage(model.PreviousTitle, model.Title); } // Update the lucene index PageViewModel updatedModel = new PageViewModel(Repository.GetLatestPageContent(page.Id), _markupConverter); _searchService.Update(updatedModel); } catch (DatabaseException ex) { throw new DatabaseException(ex, "An error occurred updating the page with title '{0}' in the database", model.Title); } }
public void Update_Should_Show_In_Index_Search() { // Arrange SearchService searchService = new SearchService(_config, _repository, _pluginFactory); searchService.CreateIndex(); PageViewModel page1 = CreatePage(1, "admin", "homepage title", "homepage1, tag1", "title content"); PageViewModel page2 = CreatePage(2, "admin", "random name2", "tag1", "random name 2"); searchService.Add(page1); searchService.Add(page2); // Act page1.Title = "A new hope"; searchService.Update(page1); Thread thread = new Thread(delegate() { // Perform the test in a new thread, so that the add + delete commit is picked up // which is periodically done by Lucene. List<SearchResultViewModel> oldResults = searchService.Search("homepage title").ToList(); List<SearchResultViewModel> newResults = searchService.Search("A new hope").ToList(); // Assert Assert.That(oldResults.Count, Is.EqualTo(0), "old results"); Assert.That(newResults.Count, Is.EqualTo(1), "new results"); }); thread.Start(); }