public async Task SearchTestAsync()
        {
            //Arrange
            var fakeIndexClient        = A.Fake <ISearchIndexClient>(o => o.Strict());
            var fakeQueryConverter     = A.Fake <IAzSearchQueryConverter>(o => o.Strict());
            var fakeDocumentsOperation = A.Fake <IDocumentsOperations>();
            var dummySearchProperty    = A.Dummy <SearchProperties>();
            var dummySearchParameters  = A.Dummy <SearchParameters>();
            var dummySearchResult      = A.Dummy <Data.Model.SearchResult <JobProfileIndex> >();
            var fakeLogger             = A.Fake <IApplicationLogger>();

            //Configure
            A.CallTo(() => fakeQueryConverter.BuildSearchParameters(A <SearchProperties> ._)).Returns(dummySearchParameters);
            A.CallTo(() => fakeIndexClient.Documents).Returns(fakeDocumentsOperation);
            A.CallTo(() => fakeQueryConverter.ConvertToSearchResult(A <DocumentSearchResult <JobProfileIndex> > ._, A <SearchProperties> ._)).Returns(dummySearchResult);

            //Act
            var searchService = new AzSearchQueryService <JobProfileIndex>(fakeIndexClient, fakeQueryConverter, fakeLogger);
            await searchService.SearchAsync("searchTerm", dummySearchProperty);

            //Assert
            A.CallTo(() => fakeQueryConverter.BuildSearchParameters(A <SearchProperties> ._)).MustHaveHappened();
            A.CallTo(() => fakeIndexClient.Documents).MustHaveHappened();
            A.CallTo(() => fakeDocumentsOperation.SearchWithHttpMessagesAsync <JobProfileIndex>(A <string> ._, A <SearchParameters> ._, A <SearchRequestOptions> ._, A <Dictionary <string, List <string> > > ._, A <CancellationToken> ._)).MustHaveHappened();
            A.CallTo(() => fakeQueryConverter.ConvertToSearchResult(A <DocumentSearchResult <JobProfileIndex> > ._, A <SearchProperties> ._)).MustHaveHappened();
        }
        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();
        }