/// <summary> /// Creates a new <see cref="ISearchResultRepository{T}"/> instance using the specified builder configuration. /// </summary> /// <param name="searchQueryElementProvider">The specified element provider.</param> /// <param name="searchQueryValueProvider">The specified value provider.</param> /// <returns>A configured <see cref="ISearchResultRepository{T}"/> instance.</returns> public ISearchResultRepository <T> Create(ISearchQueryElementProvider searchQueryElementProvider, ISearchQueryValueProvider searchQueryValueProvider) { Assert.ArgumentNotNull(searchQueryElementProvider, "searchQueryElementProvider"); Assert.ArgumentNotNull(searchQueryValueProvider, "searchQueryValueProvider"); var indexNameProvider = GetIndexNameProvider(); var predicateBuilder = GetSearchQueryPredicateBuilder(searchQueryValueProvider); return(new SearchResultRepository <T>(searchQueryElementProvider, indexNameProvider, predicateBuilder)); }
public SearchResultRepository(ISearchQueryElementProvider searchQueryElementProvider, IIndexNameProvider indexNameProvider, ISearchQueryPredicateBuilder <T> searchQueryPredicateBuilder) { Assert.ArgumentNotNull(searchQueryElementProvider, "searchQueryElementProvider"); Assert.ArgumentNotNull(indexNameProvider, "indexNameProvider"); Assert.ArgumentNotNull(searchQueryPredicateBuilder, "searchQueryPredicateBuilder"); SearchQueryElementProvider = searchQueryElementProvider; IndexNameProvider = indexNameProvider; SearchQueryPredicateBuilder = searchQueryPredicateBuilder; }
public void Ctor_SearchQueryPredicateBuilderIsNull_ThrowsException( ISearchQueryElementProvider elementProvider, IIndexNameProvider indexNameProvider) { // Arrange ISearchQueryPredicateBuilder <TestIndexableEntity> predicateBuilder = null; // Act Action act = () => new SearchResultRepository <TestIndexableEntity>(elementProvider, indexNameProvider, predicateBuilder); // Assert act.ShouldThrow <ArgumentNullException>(); }
public void Create_UsingDefaultSettings_ReturnsSearchQueryRepositoryUsingSitecoreMasterOrWebIndexNameProviderAndDefaultPredicateBuilder( ISearchQueryElementProvider elementProvider, ISearchQueryValueProvider valueProvider) { // Arrange var sut = new SearchResultRepositoryBuilder <TestIndexableEntity>(); // Act var actual = sut.Create(elementProvider, valueProvider); // Assert actual.IndexNameProvider.Should().BeOfType <SitecoreMasterOrWebIndexNameProvider>(); actual.SearchQueryPredicateBuilder.Should().BeOfType <SearchQueryPredicateBuilder <TestIndexableEntity> >(); }
public void Create_UsingCustomPredicateBuilder_ReturnsSearchQueryRepositoryUsingCustomPredicateBuilder( ISearchQueryElementProvider elementProvider, ISearchQueryValueProvider valueProvider) { // Arrange var sut = new SearchResultRepositoryBuilder <TestIndexableEntity>(); // Act var actual = sut .WithPredicateBuilder <TestPredicateBuilder <TestIndexableEntity> >() .Create(elementProvider, valueProvider); // Assert actual.SearchQueryPredicateBuilder.Should().BeOfType <TestPredicateBuilder <TestIndexableEntity> >(); }
public void GetSearchResult_ItemsWithDifferentProperties_ReturnItemsFulfillingPredicate( ISearchQueryElementProvider elementProvider, IIndexNameProvider indexNameProvider, ISearchQueryPredicateBuilder <TestIndexableEntity> predicateBuilder, ISearchIndex searchIndex, [Frozen] SearchProvider provider, Switcher <SearchProvider> switcher) { // Arrange elementProvider .GetSearchQueryElementRoot <TestIndexableEntity>() .Returns(new SearchQueryGrouping <TestIndexableEntity>(LogicalOperator.And)); indexNameProvider .IndexName .Returns("predicateTestIndex"); predicateBuilder .GetOutput() .Returns(x => x.Name.Contains("F")); var queryable = new QueryProviderStub <TestIndexableEntity>(new[] { CreateTestIndexableEntity("Faucet", paths: new List <ID> { ItemIDs.ContentRoot }), CreateTestIndexableEntity("Clamp", paths: new List <ID> { ItemIDs.ContentRoot }) }.AsQueryable()); searchIndex .CreateSearchContext() .GetQueryable <TestIndexableEntity>() .Returns(queryable); ContentSearchManager.SearchConfiguration.Indexes[indexNameProvider.IndexName] = searchIndex; var sut = new SearchResultRepository <TestIndexableEntity>(elementProvider, indexNameProvider, predicateBuilder); // Act var actual = sut.GetSearchResult(new SearchCriteria()); // Assert actual.TotalSearchResults.ShouldBeEquivalentTo(1); actual.Hits.First().Name.Should().Contain("F"); }
public void GetSearchResult_ItemsWithDiffentVersions_ReturnItemsWithLatestVersion( ISearchQueryElementProvider elementProvider, IIndexNameProvider indexNameProvider, ISearchQueryPredicateBuilder <TestIndexableEntity> predicateBuilder, ISearchIndex searchIndex, [Frozen] SearchProvider provider, Switcher <SearchProvider> switcher) { // Arrange indexNameProvider .IndexName .Returns("languageTestIndex"); predicateBuilder .GetOutput() .Returns(x => true); var queryable = new QueryProviderStub <TestIndexableEntity>(new[] { CreateTestIndexableEntity("Faucet", paths: new List <ID> { ItemIDs.ContentRoot }, latestVersion: true), CreateTestIndexableEntity("Fence", paths: new List <ID> { ItemIDs.ContentRoot }, latestVersion: false), }.AsQueryable()); searchIndex .CreateSearchContext() .GetQueryable <TestIndexableEntity>() .Returns(queryable); ContentSearchManager.SearchConfiguration.Indexes[indexNameProvider.IndexName] = searchIndex; var sut = new SearchResultRepository <TestIndexableEntity>(elementProvider, indexNameProvider, predicateBuilder); // Act var actual = sut.GetSearchResult(new SearchCriteria()); // Assert actual.TotalSearchResults.ShouldBeEquivalentTo(1); actual.Hits.First().Fields["_latestversion"].Should().Be("1"); }
public void GetSearchResult_ItemsBothContentAndNonContent_ReturnContentItems( ISearchQueryElementProvider elementProvider, IIndexNameProvider indexNameProvider, ISearchQueryPredicateBuilder <TestIndexableEntity> predicateBuilder, ISearchIndex searchIndex, [Frozen] SearchProvider provider, Switcher <SearchProvider> switcher) { // Arrange indexNameProvider .IndexName .Returns("contentItemTestIndex"); predicateBuilder .GetOutput() .Returns(x => true); var queryable = new QueryProviderStub <TestIndexableEntity>(new[] { CreateTestIndexableEntity("Faucet", paths: new List <ID> { ItemIDs.ContentRoot }), CreateTestIndexableEntity("Fence") }.AsQueryable()); searchIndex .CreateSearchContext() .GetQueryable <TestIndexableEntity>() .Returns(queryable); ContentSearchManager.SearchConfiguration.Indexes[indexNameProvider.IndexName] = searchIndex; var sut = new SearchResultRepository <TestIndexableEntity>(elementProvider, indexNameProvider, predicateBuilder); // Act var actual = sut.GetSearchResult(new SearchCriteria()); // Assert actual.TotalSearchResults.ShouldBeEquivalentTo(1); actual.Hits.First().Paths.Should().Contain(ItemIDs.ContentRoot); }