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.