public IndexOperation Autocomplete(AutocompleteRequest request)
        {
            if (HasInvalidParameters(request, request.PackageType))
            {
                return(IndexOperation.Empty());
            }

            var text       = _textBuilder.Autocomplete(request);
            var parameters = _parametersBuilder.Autocomplete(request, IsEmptySearchQuery(text));

            return(IndexOperation.Search(text, parameters));
        }
        public IndexOperation Autocomplete(AutocompleteRequest request)
        {
            if (HasInvalidParameters(request, request.PackageType))
            {
                return(IndexOperation.Empty());
            }

            var text       = _textBuilder.Autocomplete(request);
            var parameters = _parametersBuilder.Autocomplete(request, text.IsDefaultSearch);

            return(IndexOperation.Search(text.Value, parameters));
        }
            public async Task SearchIndexAndEmptyOperation()
            {
                _operation = IndexOperation.Empty();

                var response = await _target.AutocompleteAsync(_autocompleteRequest);

                Assert.Same(_autocompleteResponse, response);
                _operationBuilder.Verify(
                    x => x.Autocomplete(_autocompleteRequest),
                    Times.Once);
                _searchOperations.Verify(
                    x => x.SearchAsync <SearchDocument.Full>(It.IsAny <string>(), It.IsAny <SearchParameters>()),
                    Times.Never);
                _responseBuilder.Verify(
                    x => x.EmptyAutocomplete(_autocompleteRequest),
                    Times.Once);
            }
            public async Task HijackIndexAndEmptyOperation()
            {
                _v2Request.IgnoreFilter = true;
                _operation = IndexOperation.Empty();

                var response = await _target.V2SearchAsync(_v2Request);

                Assert.Same(_v2Response, response);
                _operationBuilder.Verify(
                    x => x.V2SearchWithHijackIndex(_v2Request),
                    Times.Once);
                _searchOperations.Verify(
                    x => x.SearchAsync <HijackDocument.Full>(It.IsAny <string>(), It.IsAny <SearchParameters>()),
                    Times.Never);
                _responseBuilder.Verify(
                    x => x.EmptyV2(_v2Request),
                    Times.Once);
            }
        public IndexOperation V2SearchWithHijackIndex(V2SearchRequest request)
        {
            if (HasInvalidParameters(request, packageType: null))
            {
                return(IndexOperation.Empty());
            }

            var parsed = _textBuilder.ParseV2Search(request);

            IndexOperation indexOperation;

            if (TryGetHijackDocumentByKey(request, parsed, out indexOperation))
            {
                return(indexOperation);
            }

            var text       = _textBuilder.Build(parsed);
            var parameters = _parametersBuilder.V2Search(request, text.IsDefaultSearch);

            return(IndexOperation.Search(text.Value, parameters));
        }
        public IndexOperation V2SearchWithSearchIndex(V2SearchRequest request)
        {
            if (HasInvalidParameters(request, packageType: null))
            {
                return(IndexOperation.Empty());
            }

            var parsed = _textBuilder.ParseV2Search(request);

            IndexOperation indexOperation;

            if (TryGetSearchDocumentByKey(request, parsed, out indexOperation))
            {
                return(indexOperation);
            }

            var text       = _textBuilder.Build(parsed);
            var parameters = _parametersBuilder.V2Search(request, IsEmptySearchQuery(text));

            return(IndexOperation.Search(text, parameters));
        }
        public IndexOperation V3Search(V3SearchRequest request)
        {
            if (HasInvalidParameters(request, request.PackageType))
            {
                return(IndexOperation.Empty());
            }

            var parsed = _textBuilder.ParseV3Search(request);

            IndexOperation indexOperation;

            if (request.PackageType == null &&
                TryGetSearchDocumentByKey(request, parsed, out indexOperation))
            {
                return(indexOperation);
            }

            var text       = _textBuilder.Build(parsed);
            var parameters = _parametersBuilder.V3Search(request, text.IsDefaultSearch);

            return(IndexOperation.Search(text.Value, parameters));
        }