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();
}
}
