search_api_meilisearch-1.0.x-dev/tests/src/Kernel/Converter/Item/ItemConverterTest.php
tests/src/Kernel/Converter/Item/ItemConverterTest.php
<?php
namespace Drupal\Tests\search_api_meilisearch\Kernel\Converter\Item;
use Drupal\Core\Entity\Plugin\DataType\EntityAdapter;
use Drupal\node\Entity\Node;
use Drupal\search_api\Datasource\DatasourceInterface;
use Drupal\search_api\Entity\Index;
use Drupal\search_api\Entity\Server;
use Drupal\search_api_meilisearch\Converter\Item\ItemConverterInterface;
use Drupal\Tests\search_api\Unit\Processor\TestItemsTrait;
use Drupal\Tests\search_api_meilisearch\Kernel\MeilisearchKernelTestBase;
use PHPUnit\Framework\Attributes\Group;
/**
* Provides item converter tests.
*
* @group search_api_meilisearch
*/
#[Group('search_api_meilisearch')]
class ItemConverterTest extends MeilisearchKernelTestBase {
use TestItemsTrait;
/**
* {@inheritdoc}
*/
protected static $modules = [
'search_api',
'search_api_meilisearch',
];
/**
* The search api item list converter service.
*
* @var \Drupal\search_api_meilisearch\Converter\Item\ItemConverterInterface
*/
protected ItemConverterInterface $converter;
/**
* {@inheritdoc}
*/
protected function setUp(): void {
parent::setUp();
$this->converter = $this->container->get('search_api_meilisearch.item_converter');
}
/**
* Tests converting search api items to meilisearch documents format.
*/
public function testConvertToDocuments() {
$datasource = $this->createMock(DatasourceInterface::class);
$datasource->method('getPropertyDefinitions')->willReturn([]);
$datasource->method('getItemLanguage')->willReturn('en');
$server = Server::create([
'id' => 'test_server',
'name' => 'Test server',
'backend' => 'search_api_meilisearch',
'backend_config' => [],
]);
$server->save();
$index = new Index([
'id' => 'movies',
'name' => 'Movies',
'datasourceInstances' => [
'entity:node' => $datasource,
],
'server' => $server->id(),
'field_settings' => [
'foo' => [
'type' => 'string',
'datasource_id' => 'entity:node',
'property_path' => 'foo',
],
'bar' => [
'type' => 'string',
'datasource_id' => 'entity:node',
'property_path' => 'foo:bar',
],
],
], 'search_api_index');
$node = $this->createMock(Node::class);
$title = 'Example title text';
$body = 'Example body text';
$created = 1611828760;
$fields = [
'entity:node/title' => [
'type' => 'text',
'values' => [$title],
],
'entity:node/body' => [
'type' => 'text',
'values' => [$body],
],
'entity:node/published' => [
'type' => 'boolean',
'values' => [TRUE],
],
'entity:node/created' => [
'type' => 'integer',
'values' => [$created],
],
'entity:node/short_description' => [
'type' => 'text',
'values' => [],
],
];
$items = $this->createItems($index, 2, $fields, EntityAdapter::createFromEntity($node));
$preparedItems = $this->converter->convertToDocuments($items);
$expectedItems = [
[
'id' => 'entity_node_1_en',
'title' => $title,
'body' => $body,
'published' => 1,
'created' => $created,
'search_api_id' => 'entity:node/1:en',
'search_api_datasource' => 'entity:node',
'search_api_language' => 'en',
],
[
'id' => 'entity_node_2_en',
'title' => $title,
'body' => $body,
'published' => 1,
'created' => $created,
'search_api_id' => 'entity:node/2:en',
'search_api_datasource' => 'entity:node',
'search_api_language' => 'en',
],
];
$this->assertEquals($expectedItems, $preparedItems);
}
/**
* {@inheritdoc}
*/
protected function getTestIndexes(): array {
return [];
}
}
