/// <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;
        }
Exemplo n.º 3
0
        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>();
        }
Exemplo n.º 4
0
        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> >();
        }
Exemplo n.º 5
0
        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> >();
        }
Exemplo n.º 6
0
        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");
        }
Exemplo n.º 7
0
        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");
        }
Exemplo n.º 8
0
        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);
        }