Esempio n. 1
0
        public async Task PopulateIndexAsyncTest(int statusCode)
        {
            //Arrange or configure
            var dummyCollectionOfData = DummyJobProfileIndex.GenerateJobProfileIndexDummyCollection("test", 5);

            A.Dummy <IndexBatch <JobProfileIndex> >();
            var azOpResponse = new AzureOperationResponse <DocumentIndexResult>
            {
                Body = new DocumentIndexResult(new List <IndexingResult>
                {
                    new IndexingResult(statusCode: statusCode, succeeded: statusCode < 400)
                })
            };

            A.CallTo(() => fakeIndexClient.Documents).Returns(fakeDocuments);
            A.CallTo(() => fakeDocuments.IndexWithHttpMessagesAsync(
                         A <IndexBatch <JobProfileIndex> > ._, A <SearchRequestOptions> ._, A <Dictionary <string, List <string> > > ._, A <CancellationToken> ._))
            .Returns(azOpResponse);

            var azSearchService = new AzSearchService <JobProfileIndex>(fakeSearchClient, fakeIndexClient, fakeSuggesterBuilder, policy, fakeWeightingBuilder);
            await azSearchService.PopulateIndexAsync(dummyCollectionOfData);

            A.CallTo(() => fakeIndexClient.Documents).MustHaveHappened();

            A.CallTo(() => fakeDocuments.IndexWithHttpMessagesAsync(
                         A <IndexBatch <JobProfileIndex> > ._,
                         A <SearchRequestOptions> ._,
                         A <Dictionary <string, List <string> > > ._,
                         A <CancellationToken> ._))
            .MustHaveHappened(statusCode > 400 ? Repeated.Exactly.Times(strategy.Retry + 1) : Repeated.Exactly.Once);
        }
        public void GetSuggestionTest()
        {
            var fakeDocuments      = A.Fake <IDocumentsOperations>();
            var fakeIndexClient    = A.Fake <ISearchIndexClient>();
            var fakeQueryConverter = A.Fake <IAzSearchQueryConverter>();
            var fakeLogger         = A.Fake <IApplicationLogger>(ops => ops.Strict());
            var suggestParameters  = new SuggestParameters {
                UseFuzzyMatching = true, Top = null
            };
            var azResponse = new AzureOperationResponse <DocumentSuggestResult <JobProfileIndex> >
            {
                Body = new DocumentSuggestResult <JobProfileIndex>
                {
                    Coverage = 1,
                    Results  = new List <SuggestResult <JobProfileIndex> >
                    {
                        new SuggestResult <JobProfileIndex>
                        {
                            Document = DummyJobProfileIndex.GenerateJobProfileIndexDummy("one"),
                            Text     = "one",
                        },
                        new SuggestResult <JobProfileIndex>
                        {
                            Document = DummyJobProfileIndex.GenerateJobProfileIndexDummy("two"),
                            Text     = "two",
                        }
                    }
                }
            };

            A.CallTo(() => fakeQueryConverter.BuildSuggestParameters(A <SuggestProperties> ._)).Returns(suggestParameters);
            A.CallTo(() => fakeDocuments.SuggestWithHttpMessagesAsync <JobProfileIndex>(A <string> ._, A <string> ._, A <SuggestParameters> ._, A <SearchRequestOptions> ._, A <Dictionary <string, List <string> > > ._, A <CancellationToken> ._))
            .Returns(azResponse);
            A.CallTo(() => fakeIndexClient.Documents).Returns(fakeDocuments);

            // Act
            var searchService = new AzSearchQueryService <JobProfileIndex>(fakeIndexClient, fakeQueryConverter, fakeLogger);

            searchService.GetSuggestion("searchTerm", new SuggestProperties {
                MaxResultCount = 20, UseFuzzyMatching = true
            });

            A.CallTo(() => fakeQueryConverter.BuildSuggestParameters(A <SuggestProperties> ._)).MustHaveHappened();
            A.CallTo(() => fakeIndexClient.Documents).MustHaveHappened();
            A.CallTo(() => fakeDocuments.SuggestWithHttpMessagesAsync <JobProfileIndex>(A <string> ._, A <string> ._, A <SuggestParameters> ._, A <SearchRequestOptions> ._, A <Dictionary <string, List <string> > > ._, A <CancellationToken> ._)).MustHaveHappened();
            A.CallTo(() => fakeQueryConverter.ConvertToSuggestionResult(A <DocumentSuggestResult <JobProfileIndex> > ._, A <SuggestProperties> ._)).MustHaveHappened();
        }
        public void TitleAsPriorityTest(string searchTerm, string expectedFirstResult)
        {
            var mannipulator = new JobProfileSearchManipulator();
            SearchResult <Data.Model.JobProfileIndex> data = new SearchResult <JobProfileIndex>
            {
                Results = DummyJobProfileIndex.GenerateJobProfileResultItemDummyCollectionWithOrderPicker("Test")
            };

            SearchProperties searchProperties = new SearchProperties
            {
                Page = 1
            };

            var result = mannipulator.Reorder(data, searchTerm, searchProperties);

            result.Results.First().ResultItem.Title.Should().Be(expectedFirstResult);
        }
        public void ReorderAlternativeTitleTest(string searchTitle, int page, string expectedFirstResult)
        {
            var mannipulator = new JobProfileSearchManipulator();
            SearchResult <Data.Model.JobProfileIndex> data = new SearchResult <JobProfileIndex>
            {
                Results = DummyJobProfileIndex.GenerateJobProfileResultItemDummyCollection("Test", 10, 1)
            };

            SearchProperties searchProperties = new SearchProperties
            {
                Page = page
            };

            var result = mannipulator.Reorder(data, searchTitle, searchProperties);

            result.Results.First().ResultItem.AlternativeTitle.First().Should().Be(expectedFirstResult);
        }
        public void ConvertResultTest()
        {
            var properties = new SearchProperties
            {
                Count            = 2,
                FilterBy         = "filterby",
                Page             = 3,
                SearchFields     = new[] { "Field1", "Field2" },
                UseRawSearchTerm = true
            };

            var indexResult = new DocumentSearchResult <JobProfileIndex>
            {
                Count   = 101,
                Results = new List <Microsoft.Azure.Search.Models.SearchResult <JobProfileIndex> >
                {
                    new Microsoft.Azure.Search.Models.SearchResult <JobProfileIndex>
                    {
                        Score    = 1,
                        Document = DummyJobProfileIndex.GenerateJobProfileIndexDummy("one")
                    },
                    new Microsoft.Azure.Search.Models.SearchResult <JobProfileIndex>
                    {
                        Score    = 1.2,
                        Document = DummyJobProfileIndex.GenerateJobProfileIndexDummy("two")
                    },
                }
            };

            var queryConverter = new AzSearchQueryConverter();
            var result         = queryConverter.ConvertToSearchResult(indexResult, properties);

            result.Count.Should().Be(indexResult.Count);                                            //Count = result.Count,
            result.Results.First().Rank.Should().Be(5);                                             //Results = result.ToSearchResultItems(properties)
            result.Results.First().ResultItem
            .Should().BeEquivalentTo(DummyJobProfileIndex.GenerateJobProfileIndexDummy("one"));     //Results = result.ToSearchResultItems(properties)

            result.Results.Last().Rank.Should().Be(6);                                              //Results = result.ToSearchResultItems(properties)
            result.Results.Last().ResultItem
            .Should().BeEquivalentTo(DummyJobProfileIndex.GenerateJobProfileIndexDummy("two"));     //Results = result.ToSearchResultItems(properties)
        }
        public void ConvertToSuggestionResultTest()
        {
            var suggestResult = new DocumentSuggestResult <JobProfileIndex>
            {
                Coverage = 1,
                Results  = new List <SuggestResult <JobProfileIndex> >
                {
                    new SuggestResult <JobProfileIndex>
                    {
                        Document = DummyJobProfileIndex.GenerateJobProfileIndexDummy("one"),
                        Text     = "one"
                    },
                    new SuggestResult <JobProfileIndex>
                    {
                        Document = DummyJobProfileIndex.GenerateJobProfileIndexDummy("two"),
                        Text     = "two"
                    }
                }
            };

            var properties = new SuggestProperties
            {
                MaxResultCount   = 5,
                UseFuzzyMatching = true
            };

            var queryConverter = new AzSearchQueryConverter();
            var result         = queryConverter.ConvertToSuggestionResult(suggestResult, properties);

            result.Coverage.Should().Be(1);
            result.Results.Count().Should().Be(suggestResult.Results.Count());
            result.Results.First().Index.Should().BeEquivalentTo(DummyJobProfileIndex.GenerateJobProfileIndexDummy("one"));
            result.Results.First().MatchedSuggestion.Should().Be("one");
            result.Results.Last().Index.Should().BeEquivalentTo(DummyJobProfileIndex.GenerateJobProfileIndexDummy("two"));
            result.Results.Last().MatchedSuggestion.Should().Be("two");
        }