search_api_meilisearch-1.0.x-dev/tests/src/Kernel/Processor/LanguageFilterTests.php

tests/src/Kernel/Processor/LanguageFilterTests.php
<?php

namespace Drupal\Tests\search_api_meilisearch\Kernel\Processor;

use Drupal\entity_test\Entity\EntityTest;
use Drupal\language\Entity\ConfigurableLanguage;
use PHPUnit\Framework\Attributes\Group;

/**
 * Provides a base testing class for backend plugin.
 *
 * @group search_api_meilisearch
 */
#[Group('search_api_meilisearch')]
class LanguageFilterTests extends ProcessorKernelTestBase {

  protected const TEST_INDEX = 'kernel_language_filter_test_index';

  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'user',
    'system',
    'language',
    'entity_test',
    'search_api',
    'search_api_meilisearch',
  ];

  /**
   * Available language codes.
   *
   * @var array
   */
  protected array $langcodes;

  /**
   * {@inheritdoc}
   */
  public function setUp(): void {
    parent::setUp();

    // Prepare language system.
    $this->installConfig(['language']);
    $this->container->get('state')->set('entity_test.translation', TRUE);
    foreach ([0, 1] as $number) {
      $language = ConfigurableLanguage::create([
        'id' => 'l' . $number,
        'label' => $this->randomString(),
        'weight' => $number,
      ]);
      $this->langcodes[$number] = $language->getId();
      $language->save();
    }
  }

  /**
   * {@inheritdoc}
   */
  protected function getTestIndexes(): array {
    return [self::TEST_INDEX];
  }

  /**
   * Tests search with language filter.
   */
  public function testSearchWithLanguageFilter(): void {
    $this->prepareTestIndex(self::TEST_INDEX);
    $this->prepareTestItems();

    // Test search with language filter 'l0'.
    $query = $this->index->query()->range()->setLanguages(['l0']);
    $results = $query->execute();

    $this->assertCount(3, $results->getResultItems());

    $expected = [
      'entity:entity_test/2:l0',
      'entity:entity_test/4:l0',
      'entity:entity_test/6:l0',
    ];
    $this->assertEquals($expected, array_keys($results->getResultItems()));

    // Test search with language filter set to 'und'. Should return zero items.
    $query = $this->index->query()->range()->setLanguages(['und']);
    $results = $query->execute();

    $this->assertCount(0, $results->getResultItems());

    // Test search with language empty language filter. Should return all items.
    $query = $this->index->query()->range()->setLanguages();
    $results = $query->execute();

    $this->assertCount(6, $results->getResultItems());
  }

  /**
   * Prepares search api index with items for tests.
   *
   * @throws \Drupal\Core\Entity\EntityStorageException
   */
  protected function prepareTestItems(): void {
    for ($i = 1; $i <= 6; $i++) {
      $entity = EntityTest::create([
        'id' => $i,
        'name' => 'Test entity ' . $i,
        'langcode' => $this->langcodes[$i % 2],
      ]);
      $entity->save();
    }

    $this->index->indexItems();
  }

}

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

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