databaseDumpFiles = [ __DIR__ . '/../../../../tests/fixtures/update/drupal-8.bare.standard.php.gz', ]; } /** * Tests that the column collation has been updated on MySQL. */ 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) { $this->assertEqual('utf8mb4_general_ci', $this->getColumnCollation($table, $column), '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); } } } /** * Determine the column collation. * * @param string $table * The table name. * @param string $column * The column name. */ protected function getColumnCollation($table, $column) { $query = Database::getConnection()->query("SHOW FULL COLUMNS FROM {" . $table . "}"); while ($row = $query->fetchAssoc()) { if ($row['Field'] === $column) { return $row['Collation']; } } $this->fail('No collation found for ' . $table . '.' . $column); } }