X-Git-Url: http://www.aleph1.co.uk/gitweb/?a=blobdiff_plain;f=web%2Fcore%2Fmodules%2Fsystem%2Fsrc%2FTests%2FEntity%2FUpdate%2FLangcodeToAsciiUpdateTest.php;fp=web%2Fcore%2Fmodules%2Fsystem%2Fsrc%2FTests%2FEntity%2FUpdate%2FLangcodeToAsciiUpdateTest.php;h=270bc4946cb4d9c486786c0ae59376739c46026c;hb=a2bd1bf0c2c1f1a17d188f4dc0726a45494cefae;hp=0000000000000000000000000000000000000000;hpb=57c063afa3f66b07c4bbddc2d6129a96d90f0aad;p=yaffs-website diff --git a/web/core/modules/system/src/Tests/Entity/Update/LangcodeToAsciiUpdateTest.php b/web/core/modules/system/src/Tests/Entity/Update/LangcodeToAsciiUpdateTest.php new file mode 100644 index 000000000..270bc4946 --- /dev/null +++ b/web/core/modules/system/src/Tests/Entity/Update/LangcodeToAsciiUpdateTest.php @@ -0,0 +1,74 @@ +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); + } + +}