You are here

public function LangcodeToAsciiUpdateTest::testLangcodeColumnCollation in Drupal 8

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