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 [];
  }

}

Главная | Обратная связь

drupal hosting | друпал хостинг | it patrol .inc