Search code examples
c#elasticsearchnunitnest

Accessing SearchDescriptor properties for testing


I am separating my query building and query execution, so I have a QueryBuilder which returns a SearchDescriptor<Video>

So to put it into context in my Web Api Controller:

SearchDescriptor<ElasticVideo> documentQuery = _queryBuilder.BuildDocumentQuery(elasticSearchParameters);
ISearchResponse<ElasticVideo> documentResults = _videoRepository.Search(documentQuery);

But when it comes to testing the QueryBuilder I can't access any of the properties on the SearchDescriptor returned in order to validate my test, for example:

        [Test]
        public void BuildDocumentQuery_WithEmptyPhrase_ReturnsProperlyFormedQueryDescriptor()
        {
            var elasticSearchVideoQueryBuilder = new ElasticSearchVideoQueryBuilder();
            var descriptor = elasticSearchVideoQueryBuilder.BuildDocumentQuery(new ElasticSearchVideoParameters());
            descriptor.// How can I get the raw query?
        }

I can see in the source code that there doesn't appear to be anything to expose this? Does anyone else have a similar problem?


Solution

  • I don't know exactly how do you build your query, but you can cast SearchDescriptor to ISearchRequest to get more details.

    var searchDescriptor = new SearchDescriptor<ElasticsearchProject>()
        .From(0)
        .Size(20)
        .Query(q => q.Match(m => m.OnField(f => f.Country).Query("Country")));
    
    var query = ((ISearchRequest) searchDescriptor).Query.Match.Query;
    
    Assert.AreEqual("Country", query);