diff --git a/core/modules/migrate/src/Plugin/migrate/process/Migration.php b/core/modules/migrate/src/Plugin/migrate/process/Migration.php index 5fc8b424896d..67f5a6aea399 100644 --- a/core/modules/migrate/src/Plugin/migrate/process/Migration.php +++ b/core/modules/migrate/src/Plugin/migrate/process/Migration.php @@ -102,6 +102,10 @@ class Migration extends ProcessPluginBase implements ContainerFactoryPluginInter } } + if (!$destination_ids && !empty($this->configuration['no_stub'])) { + return NULL; + } + if (!$destination_ids && ($self || isset($this->configuration['stub_id']) || count($migrations) == 1)) { // If the lookup didn't succeed, figure out which migration will do the // stubbing. diff --git a/core/modules/migrate/tests/src/Unit/process/MigrationTest.php b/core/modules/migrate/tests/src/Unit/process/MigrationTest.php new file mode 100644 index 000000000000..03d7bd930fef --- /dev/null +++ b/core/modules/migrate/tests/src/Unit/process/MigrationTest.php @@ -0,0 +1,92 @@ +prophesize(MigrationInterface::class); + $migration_storage = $this->prophesize(EntityStorageInterface::class); + $process_plugin_manager = $this->prophesize(MigratePluginManager::class); + + $destination_id_map = $this->prophesize(MigrateIdMapInterface::class); + $destination_migration = $this->prophesize(MigrationInterface::class); + $destination_migration->getIdMap()->willReturn($destination_id_map->reveal()); + $migration_storage->loadMultiple(['destination_migration']) + ->willReturn(['destination_migration' => $destination_migration->reveal()]); + $destination_id_map->lookupDestinationId([1])->willReturn(NULL); + + $configuration = [ + 'no_stub' => TRUE, + 'migration' => 'destination_migration', + ]; + + $migration_entity->id()->willReturn('actual_migration'); + $destination_migration->getDestinationPlugin(TRUE)->shouldNotBeCalled(); + + $migration = new Migration($configuration, '', [], $migration_entity->reveal(), $migration_storage->reveal(), $process_plugin_manager->reveal()); + $result = $migration->transform(1, $this->migrateExecutable, $this->row, ''); + $this->assertNull($result); + } + + /** + * @covers ::transform + */ + public function testTransformWithStubbing() { + $migration_entity = $this->prophesize(MigrationInterface::class); + $migration_storage = $this->prophesize(EntityStorageInterface::class); + $process_plugin_manager = $this->prophesize(MigratePluginManager::class); + + $destination_id_map = $this->prophesize(MigrateIdMapInterface::class); + $destination_migration = $this->prophesize(MigrationInterface::class); + $destination_migration->getIdMap()->willReturn($destination_id_map->reveal()); + $migration_storage->loadMultiple(['destination_migration']) + ->willReturn(['destination_migration' => $destination_migration->reveal()]); + $destination_id_map->lookupDestinationId([1])->willReturn(NULL); + + $configuration = [ + 'no_stub' => FALSE, + 'migration' => 'destination_migration', + ]; + + $migration_entity->id()->willReturn('actual_migration'); + $destination_migration->id()->willReturn('destination_migration'); + $destination_migration->getDestinationPlugin(TRUE)->shouldBeCalled(); + $destination_migration->get('process')->willReturn([]); + $destination_migration->get('source')->willReturn([]); + + $source_plugin = $this->prophesize(MigrateSourceInterface::class); + $source_plugin->getIds()->willReturn(['nid']); + $destination_migration->getSourcePlugin()->willReturn($source_plugin->reveal()); + $destination_plugin = $this->prophesize(MigrateDestinationInterface::class); + $destination_plugin->import(Argument::any())->willReturn([2]); + $destination_migration->getDestinationPlugin(TRUE)->willReturn($destination_plugin->reveal()); + + $migration = new Migration($configuration, '', [], $migration_entity->reveal(), $migration_storage->reveal(), $process_plugin_manager->reveal()); + $result = $migration->transform(1, $this->migrateExecutable, $this->row, ''); + $this->assertEquals(2, $result); + } + +}