function LocaleStringTest::testStringSearchApi

Same name and namespace in other branches
  1. 9 core/modules/locale/tests/src/Kernel/LocaleStringTest.php \Drupal\Tests\locale\Kernel\LocaleStringTest::testStringSearchApi()
  2. 8.9.x core/modules/locale/tests/src/Kernel/LocaleStringTest.php \Drupal\Tests\locale\Kernel\LocaleStringTest::testStringSearchApi()
  3. 11.x core/modules/locale/tests/src/Kernel/LocaleStringTest.php \Drupal\Tests\locale\Kernel\LocaleStringTest::testStringSearchApi()

Tests Search API loading multiple objects.

File

core/modules/locale/tests/src/Kernel/LocaleStringTest.php, line 126

Class

LocaleStringTest
Tests the locale string storage, string objects and data API.

Namespace

Drupal\Tests\locale\Kernel

Code

public function testStringSearchApi() : void {
  $language_count = 3;
  // Strings 1 and 2 will have some common prefix.
  // Source 1 will have all translations, not customized.
  // Source 2 will have all translations, customized.
  // Source 3 will have no translations.
  $prefix = $this->randomMachineName(100);
  $source1 = $this->buildSourceString([
    'source' => $prefix . $this->randomMachineName(100),
  ])
    ->save();
  $source2 = $this->buildSourceString([
    'source' => $prefix . $this->randomMachineName(100),
  ])
    ->save();
  $source3 = $this->buildSourceString()
    ->save();
  // Load all source strings.
  $strings = $this->storage
    ->getStrings([]);
  $this->assertCount(3, $strings);
  // Load all source strings matching a given string.
  $filter_options['filters'] = [
    'source' => $prefix,
  ];
  $strings = $this->storage
    ->getStrings([], $filter_options);
  $this->assertCount(2, $strings);
  // Not customized translations.
  $translate1 = $this->createAllTranslations($source1);
  // Customized translations.
  $this->createAllTranslations($source2, [
    'customized' => LOCALE_CUSTOMIZED,
  ]);
  // Try quick search function with different field combinations.
  $langcode = 'es';
  $found = $this->storage
    ->findTranslation([
    'language' => $langcode,
    'source' => $source1->source,
    'context' => $source1->context,
  ]);
  $this->assertNotNull($found, 'Translation not found searching by source and context.');
  $this->assertNotNull($found->language);
  $this->assertNotNull($found->translation);
  $this->assertFalse($found->isNew());
  $this->assertEquals($translate1[$langcode]->translation, $found->translation);
  // Now try a translation not found.
  $found = $this->storage
    ->findTranslation([
    'language' => $langcode,
    'source' => $source3->source,
    'context' => $source3->context,
  ]);
  $this->assertNotNull($found);
  $this->assertSame($source3->lid, $found->lid);
  $this->assertNull($found->translation);
  $this->assertTrue($found->isNew());
  // Load all translations. For next queries we'll be loading only translated
  // strings.
  $translations = $this->storage
    ->getTranslations([
    'translated' => TRUE,
  ]);
  $this->assertCount(2 * $language_count, $translations);
  // Load all customized translations.
  $translations = $this->storage
    ->getTranslations([
    'customized' => LOCALE_CUSTOMIZED,
    'translated' => TRUE,
  ]);
  $this->assertCount($language_count, $translations);
  // Load all Spanish customized translations.
  $translations = $this->storage
    ->getTranslations([
    'language' => 'es',
    'customized' => LOCALE_CUSTOMIZED,
    'translated' => TRUE,
  ]);
  $this->assertCount(1, $translations);
  // Load all source strings without translation (1).
  $translations = $this->storage
    ->getStrings([
    'translated' => FALSE,
  ]);
  $this->assertCount(1, $translations);
  // Load Spanish translations using string filter.
  $filter_options['filters'] = [
    'source' => $prefix,
  ];
  $translations = $this->storage
    ->getTranslations([
    'language' => 'es',
  ], $filter_options);
  $this->assertCount(2, $translations);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.