diff --git a/core/modules/language/src/Plugin/migrate/destination/DefaultLangcode.php b/core/modules/language/src/Plugin/migrate/destination/DefaultLangcode.php index 47c44c0..a5a50a9 100644 --- a/core/modules/language/src/Plugin/migrate/destination/DefaultLangcode.php +++ b/core/modules/language/src/Plugin/migrate/destination/DefaultLangcode.php @@ -21,10 +21,11 @@ class DefaultLangcode extends Config { */ public function import(Row $row, array $old_destination_id_values = array()) { $destination = $row->getDestination(); + $langcode = $destination['default_langcode']; // Check if the language exists. - if (ConfigurableLanguage::load($destination['default_langcode']) === NULL) { - throw new MigrateException(sprintf("The language '%s' does not exist on this site.", $destination['default_langcode'])); + if (ConfigurableLanguage::load($langcode) === NULL) { + throw new MigrateException("The language '$langcode' does not exist on this site."); } $this->config->set('default_langcode', $destination['default_langcode']); diff --git a/core/modules/language/tests/src/Kernel/Migrate/MigrateDefaultLanguageTrait.php b/core/modules/language/tests/src/Kernel/Migrate/MigrateDefaultLanguageTrait.php new file mode 100644 index 0000000..deb6020 --- /dev/null +++ b/core/modules/language/tests/src/Kernel/Migrate/MigrateDefaultLanguageTrait.php @@ -0,0 +1,56 @@ +sourceDatabase->update('variable') + ->fields(array( + 'value' => $value + )) + ->condition('name', 'language_default' ) + ->execute(); + + $this->startCollectingMessages(); + $this->executeMigrations(['language', 'default_language']); + + if ($existing) { + // If the default language exists, we should be able to load it and the + // default_langcode config should be set. + $default_language = ConfigurableLanguage::load($langcode); + $this->assertNotNull($default_language); + $this->assertIdentical($langcode, $this->config('system.site')->get('default_langcode')); + } + else { + // Otherwise, the migration log should contain an error message. + $messages = $this->migration->getIdMap()->getMessageIterator(); + $count = 0; + foreach ($messages as $message) { + $count++; + $this->assertEqual($message->message, "The language '$langcode' does not exist on this site."); + $this->assertEqual($message->level, MigrationInterface::MESSAGE_ERROR); + } + $this->assertEqual($count, 1); + } + } + +} diff --git a/core/modules/language/tests/src/Kernel/Migrate/d6/MigrateDefaultLanguageTest.php b/core/modules/language/tests/src/Kernel/Migrate/d6/MigrateDefaultLanguageTest.php index 4f408e2..de2dcfe 100644 --- a/core/modules/language/tests/src/Kernel/Migrate/d6/MigrateDefaultLanguageTest.php +++ b/core/modules/language/tests/src/Kernel/Migrate/d6/MigrateDefaultLanguageTest.php @@ -2,7 +2,7 @@ namespace Drupal\Tests\language\Kernel\Migrate\d6; -use Drupal\language\Entity\ConfigurableLanguage; +use Drupal\Tests\language\Kernel\Migrate\MigrateDefaultLanguageTrait; use Drupal\Tests\migrate_drupal\Kernel\d6\MigrateDrupal6TestBase; /** @@ -12,6 +12,8 @@ */ class MigrateDefaultLanguageTest extends MigrateDrupal6TestBase { + use MigrateDefaultLanguageTrait; + /** * {@inheritdoc} */ @@ -30,27 +32,7 @@ public function testMigrationWithExistingLanguage() { * system.site.default_langcode config key, with a non-existent language. */ public function testMigrationWithNonExistentLanguage() { - $this->doTestMigration('tv'); - } - - /** - * Helper method to test the migration. - */ - protected function doTestMigration($langcode) { - // The default language of the test fixture is English. Change it to - // something else before migrating, to be sure that the source site - // default language is migrated. - $value = 'O:8:"stdClass":11:{s:8:"language";s:2:"' . $langcode . '";s:4:"name";s:6:"French";s:6:"native";s:6:"French";s:9:"direction";s:1:"0";s:7:"enabled";i:1;s:7:"plurals";s:1:"0";s:7:"formula";s:0:"";s:6:"domain";s:0:"";s:6:"prefix";s:0:"";s:6:"weight";s:1:"0";s:10:"javascript";s:0:"";}'; - $this->sourceDatabase->update('variable') - ->fields(array( - 'value' => $value - )) - ->condition('name', 'language_default' ) - ->execute(); - $this->executeMigrations(['language', 'default_language']); - $default_language = ConfigurableLanguage::load($langcode); - $this->assertNotNull($default_language); - $this->assertIdentical($langcode, $this->config('system.site')->get('default_langcode')); + $this->doTestMigration('tv', FALSE); } } diff --git a/core/modules/language/tests/src/Kernel/Migrate/d7/MigrateDefaultLanguageTest.php b/core/modules/language/tests/src/Kernel/Migrate/d7/MigrateDefaultLanguageTest.php index 7867652..f4b4162 100644 --- a/core/modules/language/tests/src/Kernel/Migrate/d7/MigrateDefaultLanguageTest.php +++ b/core/modules/language/tests/src/Kernel/Migrate/d7/MigrateDefaultLanguageTest.php @@ -2,7 +2,7 @@ namespace Drupal\Tests\language\Kernel\Migrate\d7; -use Drupal\language\Entity\ConfigurableLanguage; +use Drupal\Tests\language\Kernel\Migrate\MigrateDefaultLanguageTrait; use Drupal\Tests\migrate_drupal\Kernel\d7\MigrateDrupal7TestBase; /** @@ -12,6 +12,8 @@ */ class MigrateDefaultLanguageTest extends MigrateDrupal7TestBase { + use MigrateDefaultLanguageTrait; + /** * {@inheritdoc} */ @@ -30,27 +32,7 @@ public function testMigrationWithExistingLanguage() { * system.site.default_langcode config key, with a non-existent language. */ public function testMigrationWithNonExistentLanguage() { - $this->doTestMigration('tv'); - } - - /** - * Helper method to test the migration. - */ - protected function doTestMigration($langcode) { - // The default language of the test fixture is English. Change it to - // something else before migrating, to be sure that the source site - // default language is migrated. - $value = 'O:8:"stdClass":11:{s:8:"language";s:2:"' . $langcode . '";s:4:"name";s:9:"Icelandic";s:6:"native";s:9:"Icelandic";s:9:"direction";s:1:"0";s:7:"enabled";i:1;s:7:"plurals";s:1:"0";s:7:"formula";s:0:"";s:6:"domain";s:0:"";s:6:"prefix";s:0:"";s:6:"weight";s:1:"0";s:10:"javascript";s:0:"";}'; - $this->sourceDatabase->update('variable') - ->fields(array( - 'value' => $value - )) - ->condition('name', 'language_default' ) - ->execute(); - $this->executeMigrations(['language', 'default_language']); - $default_language = ConfigurableLanguage::load($langcode); - $this->assertNotNull($default_language); - $this->assertIdentical($langcode, $this->config('system.site')->get('default_langcode')); + $this->doTestMigration('tv', FALSE); } }