diff --git a/core/modules/migrate/src/Plugin/Migration.php b/core/modules/migrate/src/Plugin/Migration.php index 607ef5eaa8a96c298ce843496b78f31d0c5e6446..ca325f27ae0c8d80137ffd4e0d2f4e5b8767f49c 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 aceb73e807de5bf3b1448cdea102b888ff4925d6..9dc89d1f1f15ebacdee4f44e611022902a969dba 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() *