function LangcodeToAsciiUpdateTest::testLangcodeColumnCollation

Tests that the column collation has been updated on MySQL.

File

core/modules/system/tests/src/Functional/Entity/Update/LangcodeToAsciiUpdateTest.php, line 28

Class

LangcodeToAsciiUpdateTest
Tests that the entity langcode fields have been updated to varchar_ascii.

Namespace

Drupal\Tests\system\Functional\Entity\Update

Code

public function testLangcodeColumnCollation() {
  // Only testable on MySQL.
  // @see https://www.drupal.org/node/301038
  if (Database::getConnection()->databaseType() !== 'mysql') {
    $this->pass('This test can only run on MySQL');
    return;
  }
  // Check a few different tables.
  $tables = [
    'node_field_data' => [
      'langcode',
    ],
    'users_field_data' => [
      'langcode',
      'preferred_langcode',
      'preferred_admin_langcode',
    ],
  ];
  foreach ($tables as $table => $columns) {
    foreach ($columns as $column) {
      // Depending on MYSQL versions you get different collations.
      $this->assertContains($this->getColumnCollation($table, $column), [
        'utf8mb4_0900_ai_ci',
        'utf8mb4_general_ci',
      ], 'Found correct starting collation for ' . $table . '.' . $column);
    }
  }
  // Apply updates.
  $this->runUpdates();
  foreach ($tables as $table => $columns) {
    foreach ($columns as $column) {
      $this->assertEqual('ascii_general_ci', $this->getColumnCollation($table, $column), 'Found correct updated collation for ' . $table . '.' . $column);
    }
  }
}

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