public IEnumerable <IMarketingTest> ReturnPaginatedResultsForSite(IEnumerable <IMarketingTest> list, string site, int page) { if (string.IsNullOrWhiteSpace(site) || string.Equals(site, Constants.AllFilterKey, StringComparison.OrdinalIgnoreCase)) { return(ReturnPaginatedResults(list, page)); } // Get the site reference to filter on var siteParentRoot = _siteHelperService.GetSiteStartPageReference(site); var filteredResults = new List <IMarketingTest>(); var neededResults = (page + 1) * 5; // Filter the results foreach (var test in list) { var contentReference = _siteHelperService.GetContentReferenceFromGuid(test.OriginalItemId); var parents = _contentRepository.GetAncestors(contentReference); if (parents.Any(w => _siteHelperService.CompareContentReferences(w.ContentLink, siteParentRoot))) { filteredResults.Add(test); } // Break early if required paged amount is found if (filteredResults.Count >= neededResults) { break; } } return(ReturnPaginatedResults(filteredResults, page)); }
public void ReturnPaginatedResultsForSite_WithSixItemsAndThreeForThisSite_ReturnsThreeItems() { // Arrange const string testSiteName = "Test Site"; const string testTitle = "Test Title"; const string allSiteName = "All"; const int page = 0; var thisSiteValidParentRoot = new ContentReference(123); _stubSiteHelperService.GetSiteStartPageReference(testSiteName).Returns(thisSiteValidParentRoot); // Items var thisSiteValidItemRoot = new ContentReference(1234); var testSiteGuidOne = Guid.Parse("737bbab0-137e-43fb-af19-93b2b4a04cd5"); var testSiteGuidTwo = Guid.Parse("f9e419c4-efc9-41f9-86ef-0096d81c8722"); var testSiteGuidThree = Guid.Parse("7cd884ef-0963-4a61-b762-a9f5e3b21886"); // These are setup to be "in" our filtered site var subTestOne = Substitute.For <IMarketingTest>(); subTestOne.OriginalItemId = testSiteGuidOne; var subTestFive = Substitute.For <IMarketingTest>(); subTestFive.OriginalItemId = testSiteGuidTwo; var subTestSix = Substitute.For <IMarketingTest>(); subTestSix.OriginalItemId = testSiteGuidThree; subTestSix.Title = testTitle; _stubSiteHelperService.GetContentReferenceFromGuid(testSiteGuidOne).Returns(thisSiteValidItemRoot); _stubSiteHelperService.GetContentReferenceFromGuid(testSiteGuidTwo).Returns(thisSiteValidItemRoot); _stubSiteHelperService.GetContentReferenceFromGuid(testSiteGuidThree).Returns(thisSiteValidItemRoot); _stubSiteHelperService.CompareContentReferences(thisSiteValidItemRoot, thisSiteValidParentRoot).Returns(true); var validSiteParent = Substitute.For <IContent>(); validSiteParent.ContentLink = thisSiteValidItemRoot; var validParentsList = new List <IContent> { validSiteParent }; _stubContentRepository.GetAncestors(thisSiteValidItemRoot).Returns(validParentsList.Select(s => s)); // these should be filtered out var subTestTwo = Substitute.For <IMarketingTest>(); var subTestThree = Substitute.For <IMarketingTest>(); var subTestFour = Substitute.For <IMarketingTest>(); var testFullList = new List <IMarketingTest> { subTestOne, subTestTwo, subTestThree, subTestFour, subTestFive, subTestSix }; // Act var result = _marketingTestListService.ReturnPaginatedResultsForSite(testFullList, testSiteName, page).ToList(); var noSiteFilterResults = _marketingTestListService.ReturnPaginatedResultsForSite(testFullList, allSiteName, page); // Assert Assert.IsNotEmpty(result); Assert.AreEqual(testFullList[0], result[0]); Assert.AreEqual(testSiteGuidOne, result[0].OriginalItemId); Assert.AreEqual(testFullList[4], result[1]); Assert.AreEqual(testSiteGuidTwo, result[1].OriginalItemId); Assert.AreEqual(testFullList[5], result[2]); Assert.AreEqual(testSiteGuidThree, result[2].OriginalItemId); Assert.AreEqual(testTitle, result[2].Title); Assert.AreEqual(3, result.Count()); Assert.IsNotEmpty(noSiteFilterResults); Assert.AreEqual(5, noSiteFilterResults.Count()); Assert.AreEqual(testFullList.Take(5), noSiteFilterResults); }