From ecd6148ee5248b82b8389c18312da992d8ed74e6 Mon Sep 17 00:00:00 2001 From: Alex Pott <alex.a.pott@googlemail.com> Date: Thu, 27 Oct 2016 22:01:17 -0700 Subject: [PATCH] =?UTF-8?q?Issue=20#2806285=20by=20maxocub,=20G=C3=A1bor?= =?UTF-8?q?=20Hojtsy,=20quietone,=20catch:=20If=20the=20default=20language?= =?UTF-8?q?=20is=20not=20set,=20the=20migration=20log=20show=20an=20error?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../migration_templates/default_language.yml | 17 +++++++++-- .../Migrate/MigrateDefaultLanguageTrait.php | 28 ++++++++++++++++--- .../Migrate/d6/MigrateDefaultLanguageTest.php | 7 +++++ .../Migrate/d7/MigrateDefaultLanguageTest.php | 7 +++++ 4 files changed, 53 insertions(+), 6 deletions(-) diff --git a/core/modules/language/migration_templates/default_language.yml b/core/modules/language/migration_templates/default_language.yml index d7e52adf1072..6d7604deed38 100644 --- a/core/modules/language/migration_templates/default_language.yml +++ b/core/modules/language/migration_templates/default_language.yml @@ -10,9 +10,22 @@ source: process: default_langcode: - - plugin: callback - callable: get_object_vars + plugin: default_value source: language_default + default_value: + 'language': 'en' + # Encode and decode to turn the default_language variable, which is + # an stdClass, into an array so it can be passed to extract. + - + plugin: callback + callable: + - '\Drupal\Component\Serialization\Json' + - 'encode' + - + plugin: callback + callable: + - '\Drupal\Component\Serialization\Json' + - 'decode' - plugin: extract index: diff --git a/core/modules/language/tests/src/Kernel/Migrate/MigrateDefaultLanguageTrait.php b/core/modules/language/tests/src/Kernel/Migrate/MigrateDefaultLanguageTrait.php index deb60206ea2c..94bb02d33965 100644 --- a/core/modules/language/tests/src/Kernel/Migrate/MigrateDefaultLanguageTrait.php +++ b/core/modules/language/tests/src/Kernel/Migrate/MigrateDefaultLanguageTrait.php @@ -38,7 +38,7 @@ protected function doTestMigration($langcode, $existing = TRUE) { // 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')); + $this->assertSame($langcode, $this->config('system.site')->get('default_langcode')); } else { // Otherwise, the migration log should contain an error message. @@ -46,11 +46,31 @@ protected function doTestMigration($langcode, $existing = TRUE) { $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->assertSame($message->message, "The language '$langcode' does not exist on this site."); + $this->assertSame((int) $message->level, MigrationInterface::MESSAGE_ERROR); } - $this->assertEqual($count, 1); + $this->assertSame($count, 1); } } + /** + * Helper method to test migrating the default language when no default language is set. + */ + protected function doTestMigrationWithUnsetVariable() { + // Delete the language_default variable. + $this->sourceDatabase->delete('variable') + ->condition('name', 'language_default' ) + ->execute(); + + $this->startCollectingMessages(); + $this->executeMigrations(['language', 'default_language']); + $messages = $this->migration->getIdMap()->getMessageIterator()->fetchAll(); + + // Make sure there's no migration exceptions. + $this->assertEmpty($messages); + + // Make sure the default langcode is 'en', since it was the default on D6 & D7. + $this->assertSame('en', $this->config('system.site')->get('default_langcode')); + } + } 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 20beb96bf7e3..645af29fe57b 100644 --- a/core/modules/language/tests/src/Kernel/Migrate/d6/MigrateDefaultLanguageTest.php +++ b/core/modules/language/tests/src/Kernel/Migrate/d6/MigrateDefaultLanguageTest.php @@ -33,4 +33,11 @@ public function testMigrationWithNonExistentLanguage() { $this->doTestMigration('tv', FALSE); } + /** + * Tests language_default migration with unset variable. + */ + public function testMigrationWithUnsetVariable() { + $this->doTestMigrationWithUnsetVariable(); + } + } 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 0e584e53b231..79769bc00d13 100644 --- a/core/modules/language/tests/src/Kernel/Migrate/d7/MigrateDefaultLanguageTest.php +++ b/core/modules/language/tests/src/Kernel/Migrate/d7/MigrateDefaultLanguageTest.php @@ -33,4 +33,11 @@ public function testMigrationWithNonExistentLanguage() { $this->doTestMigration('tv', FALSE); } + /** + * Tests language_default migration with unset variable. + */ + public function testMigrationWithUnsetVariable() { + $this->doTestMigrationWithUnsetVariable(); + } + } -- GitLab