Skip to content
Snippets Groups Projects
QueryParamBuilderTest.php 3.63 KiB
Newer Older
namespace Drupal\Tests\search_api_opensearch\Unit\SearchAPI\Query;

use Drupal\search_api\IndexInterface;
use Drupal\search_api\Item\FieldInterface;
use Drupal\search_api\Query\ConditionGroupInterface;
use Drupal\search_api\Query\QueryInterface;
use Drupal\search_api\Utility\FieldsHelperInterface;
use Drupal\search_api_opensearch\Event\QueryParamsEvent;
use Drupal\search_api_opensearch\SearchAPI\MoreLikeThisParamBuilder;
use Drupal\search_api_opensearch\SearchAPI\Query\FacetParamBuilder;
use Drupal\search_api_opensearch\SearchAPI\Query\FilterBuilder;
use Drupal\search_api_opensearch\SearchAPI\Query\QueryParamBuilder;
use Drupal\search_api_opensearch\SearchAPI\Query\QuerySortBuilder;
use Drupal\search_api_opensearch\SearchAPI\Query\SearchParamBuilder;
use Drupal\Tests\UnitTestCase;
use Prophecy\Argument;
use Psr\Log\NullLogger;
use Symfony\Contracts\EventDispatcher\EventDispatcherInterface;

/**
 * Tests the query param builder.
 *
 * @coversDefaultClass \Drupal\search_api_opensearch\SearchAPI\Query\QueryParamBuilder
Kim Pepper's avatar
Kim Pepper committed
 * @group search_api_opensearch
 */
class QueryParamBuilderTest extends UnitTestCase {

  /**
   * @covers ::
   */
  public function testBuildQueryParams() {
    $indexId = "foo";

    $fieldsHelper = $this->prophesize(FieldsHelperInterface::class);

    $sortBuilder = $this->prophesize(QuerySortBuilder::class);
    $sortBuilder->getSortSearchQuery(Argument::any())
      ->willReturn([]);

    $filterBuilder = $this->prophesize(FilterBuilder::class);
    $filterBuilder->buildFilters(Argument::any(), Argument::any())
      ->willReturn([]);

    $searchParamBuilder = $this->prophesize(SearchParamBuilder::class);
    $searchParamBuilder->buildSearchParams(Argument::any(), Argument::any(), Argument::any())
      ->willReturn([]);

    $mltParamBuilder = $this->prophesize(MoreLikeThisParamBuilder::class);
    $facetParamBuilder = $this->prophesize(FacetParamBuilder::class);
    $eventDispatcher = $this->prophesize(EventDispatcherInterface::class);
    $event = new QueryParamsEvent($indexId, []);
    $eventDispatcher->dispatch(Argument::any())->willReturn($event);
    $logger = new NullLogger();

    $queryParamBuilder = new QueryParamBuilder($fieldsHelper->reveal(), $sortBuilder->reveal(), $filterBuilder->reveal(), $searchParamBuilder->reveal(), $mltParamBuilder->reveal(), $facetParamBuilder->reveal(), $eventDispatcher->reveal(), $logger);

    $index = $this->prophesize(IndexInterface::class);
    $index->id()->willReturn($indexId);

    $field1 = $this->prophesize(FieldInterface::class);

    $fields = [$field1->reveal()];

    $index->getFields()
      ->willReturn($fields);

    $query = $this->prophesize(QueryInterface::class);
Kim Pepper's avatar
Kim Pepper committed
    $query->getOption('offset', Argument::any())
      ->willReturn(0);
Kim Pepper's avatar
Kim Pepper committed
    $query->getOption('limit', Argument::any())
      ->willReturn(10);
    $query->getOption('opensearch_exclude_source_fields', Argument::any())
      ->willReturn([]);
    $query->getOption('search_api_mlt')
      ->willReturn(NULL);
    $query->getOption('search_api_facets')
      ->willReturn(NULL);
    $query->getLanguages()
      ->willReturn(NULL);
    $query->getIndex()
      ->willReturn($index->reveal());
    $conditionGroup = $this->prophesize(ConditionGroupInterface::class);
    $query->getConditionGroup()
      ->willReturn($conditionGroup->reveal());

    $expected = ['index' => 'foo', 'body' => ['from' => 0, 'size' => 10]];
    $query->setOption('OpenSearchParams', Argument::exact($expected))
      ->willReturn(Argument::any());
    $settings = ['fuzziness' => 'auto'];
    $queryParams = $queryParamBuilder->buildQueryParams($indexId, $query->reveal(), $settings);
    $this->assertEquals($expected, $queryParams);

  }

}