From b1007e34e4a53bc1e7258a3a4bb04b4919be606c Mon Sep 17 00:00:00 2001 From: Alex Pott <alex.a.pott@googlemail.com> Date: Fri, 29 May 2020 20:29:45 +0100 Subject: [PATCH] Issue #2969231 by quietone, NickDickinsonWilde, joachim, xjm: errors in migration process configuration don't give a clear message (cherry picked from commit 93545bd5374746e065d9a01372047286d719acbd) --- core/modules/migrate/src/Plugin/Migration.php | 4 ++ .../tests/src/Kernel/Plugin/MigrationTest.php | 57 ++++++++++++++++--- 2 files changed, 53 insertions(+), 8 deletions(-) diff --git a/core/modules/migrate/src/Plugin/Migration.php b/core/modules/migrate/src/Plugin/Migration.php index 607ef5eaa8a9..ca325f27ae0c 100644 --- a/core/modules/migrate/src/Plugin/Migration.php +++ b/core/modules/migrate/src/Plugin/Migration.php @@ -405,6 +405,10 @@ protected function getProcessNormalized(array $process) { if (isset($configuration['plugin'])) { $configuration = [$configuration]; } + if (!is_array($configuration)) { + $migration_id = $this->getPluginId(); + throw new MigrateException("Invalid process for destination '$destination' in migration '$migration_id'"); + } $normalized_configurations[$destination] = $configuration; } return $normalized_configurations; diff --git a/core/modules/migrate/tests/src/Kernel/Plugin/MigrationTest.php b/core/modules/migrate/tests/src/Kernel/Plugin/MigrationTest.php index aceb73e807de..9dc89d1f1f15 100644 --- a/core/modules/migrate/tests/src/Kernel/Plugin/MigrationTest.php +++ b/core/modules/migrate/tests/src/Kernel/Plugin/MigrationTest.php @@ -42,23 +42,64 @@ public function testGetProcessPluginsException() { } /** - * Tests Migration::getDestinationPlugin() + * Tests Migration::getProcessPlugins() * - * @covers ::getDestinationPlugin + * @param array $process + * The migration process pipeline. + * + * @covers ::getProcessPlugins + * + * @dataProvider getProcessPluginsExceptionMessageProvider */ - public function testGetProcessPluginsExceptionMessage() { + public function testGetProcessPluginsExceptionMessage(array $process) { // Test with an invalid process pipeline. $plugin_definition = [ - 'process' => [ - 'dest1' => 123, - ], + 'id' => 'foo', + 'process' => $process, ]; - $migration = \Drupal::service('plugin.manager.migration')->createStubMigration($plugin_definition); + + reset($process); + $destination = key(($process)); + + $migration = \Drupal::service('plugin.manager.migration') + ->createStubMigration($plugin_definition); $this->expectException(MigrateException::class); - $this->expectExceptionMessage("Process configuration for 'dest1' must be an array"); + $this->expectExceptionMessage("Invalid process for destination '$destination' in migration 'foo'"); $migration->getProcessPlugins(); } + /** + * Provides data for testing invalid process pipeline. + */ + public function getProcessPluginsExceptionMessageProvider() { + return [ + [ + 'Null' => + [ + 'dest' => NULL, + ], + ], + [ + 'boolean' => + [ + 'dest' => TRUE, + ], + ], + [ + 'integer' => + [ + 'dest' => 2370, + ], + ], + [ + 'float' => + [ + 'dest' => 1.61, + ], + ], + ]; + } + /** * Tests Migration::getMigrationDependencies() * -- GitLab