diff --git a/core/modules/migrate/src/Plugin/Migration.php b/core/modules/migrate/src/Plugin/Migration.php index 607ef5eaa8..b0802616e3 100644 --- a/core/modules/migrate/src/Plugin/Migration.php +++ b/core/modules/migrate/src/Plugin/Migration.php @@ -364,9 +364,6 @@ public function getProcessPlugins(array $process = NULL) { $this->processPlugins[$index] = []; foreach ($this->getProcessNormalized($process) as $property => $configurations) { $this->processPlugins[$index][$property] = []; - if (!is_array($configurations) && !$this->processPlugins[$index][$property]) { - throw new MigrateException(sprintf("Process configuration for '$property' must be an array", $property)); - } foreach ($configurations as $configuration) { if (isset($configuration['source'])) { $this->processPlugins[$index][$property][] = $this->processPluginManager->createInstance('get', $configuration, $this); @@ -405,6 +402,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 aceb73e807..5c32c0dcc6 100644 --- a/core/modules/migrate/tests/src/Kernel/Plugin/MigrationTest.php +++ b/core/modules/migrate/tests/src/Kernel/Plugin/MigrationTest.php @@ -44,21 +44,62 @@ public function testGetProcessPluginsException() { /** * Tests Migration::getDestinationPlugin() * - * @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() *