You are here

public function LocaleStringTest::testStringCRUDAPI in Zircon Profile 8

Same name and namespace in other branches
  1. 8.0 core/modules/locale/src/Tests/LocaleStringTest.php \Drupal\locale\Tests\LocaleStringTest::testStringCRUDAPI()

Test CRUD API.

File

core/modules/locale/src/Tests/LocaleStringTest.php, line 50
Contains \Drupal\locale\Tests\LocaleStringTest.

Class

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

Namespace

Drupal\locale\Tests

Code

public function testStringCRUDAPI() {

  // Create source string.
  $source = $this
    ->buildSourceString();
  $source
    ->save();
  $this
    ->assertTrue($source->lid, format_string('Successfully created string %string', array(
    '%string' => $source->source,
  )));

  // Load strings by lid and source.
  $string1 = $this->storage
    ->findString(array(
    'lid' => $source->lid,
  ));
  $this
    ->assertEqual($source, $string1, 'Successfully retrieved string by identifier.');
  $string2 = $this->storage
    ->findString(array(
    'source' => $source->source,
    'context' => $source->context,
  ));
  $this
    ->assertEqual($source, $string2, 'Successfully retrieved string by source and context.');
  $string3 = $this->storage
    ->findString(array(
    'source' => $source->source,
    'context' => '',
  ));
  $this
    ->assertFalse($string3, 'Cannot retrieve string with wrong context.');

  // Check version handling and updating.
  $this
    ->assertEqual($source->version, 'none', 'String originally created without version.');
  $string = $this->storage
    ->findTranslation(array(
    'lid' => $source->lid,
  ));
  $this
    ->assertEqual($string->version, \Drupal::VERSION, 'Checked and updated string version to Drupal version.');

  // Create translation and find it by lid and source.
  $langcode = 'es';
  $translation = $this
    ->createTranslation($source, $langcode);
  $this
    ->assertEqual($translation->customized, LOCALE_NOT_CUSTOMIZED, 'Translation created as not customized by default.');
  $string1 = $this->storage
    ->findTranslation(array(
    'language' => $langcode,
    'lid' => $source->lid,
  ));
  $this
    ->assertEqual($string1->translation, $translation->translation, 'Successfully loaded translation by string identifier.');
  $string2 = $this->storage
    ->findTranslation(array(
    'language' => $langcode,
    'source' => $source->source,
    'context' => $source->context,
  ));
  $this
    ->assertEqual($string2->translation, $translation->translation, 'Successfully loaded translation by source and context.');
  $translation
    ->setCustomized()
    ->save();
  $translation = $this->storage
    ->findTranslation(array(
    'language' => $langcode,
    'lid' => $source->lid,
  ));
  $this
    ->assertEqual($translation->customized, LOCALE_CUSTOMIZED, 'Translation successfully marked as customized.');

  // Delete translation.
  $translation
    ->delete();
  $deleted = $this->storage
    ->findTranslation(array(
    'language' => $langcode,
    'lid' => $source->lid,
  ));
  $this
    ->assertFalse(isset($deleted->translation), 'Successfully deleted translation string.');

  // Create some translations and then delete string and all of its
  // translations.
  $lid = $source->lid;
  $this
    ->createAllTranslations($source);
  $search = $this->storage
    ->getTranslations(array(
    'lid' => $source->lid,
  ));
  $this
    ->assertEqual(count($search), 3, 'Created and retrieved all translations for our source string.');
  $source
    ->delete();
  $string = $this->storage
    ->findString(array(
    'lid' => $lid,
  ));
  $this
    ->assertFalse($string, 'Successfully deleted source string.');
  $deleted = $search = $this->storage
    ->getTranslations(array(
    'lid' => $lid,
  ));
  $this
    ->assertFalse($deleted, 'Successfully deleted all translation strings.');

  // Tests that locations of different types and arbitrary lengths can be
  // added to a source string. Too long locations will be cut off.
  $source_string = $this
    ->buildSourceString();
  $source_string
    ->addLocation('javascript', $this
    ->randomString(8));
  $source_string
    ->addLocation('configuration', $this
    ->randomString(50));
  $source_string
    ->addLocation('code', $this
    ->randomString(100));
  $source_string
    ->addLocation('path', $location = $this
    ->randomString(300));
  $source_string
    ->save();
  $rows = db_query('SELECT * FROM {locales_location} WHERE sid = :sid', array(
    ':sid' => $source_string->lid,
  ))
    ->fetchAllAssoc('type');
  $this
    ->assertEqual(count($rows), 4, '4 source locations have been persisted.');
  $this
    ->assertEqual($rows['path']->name, substr($location, 0, 255), 'Too long location has been limited to 255 characters.');
}