Chris@0: getMock('Drupal\Tests\migrate\Unit\RequirementsAwareSourceInterface'); Chris@0: $source_plugin->expects($this->once()) Chris@0: ->method('checkRequirements') Chris@0: ->willThrowException(new RequirementsException('Missing source requirement', ['key' => 'value'])); Chris@0: $destination_plugin = $this->getMock('Drupal\Tests\migrate\Unit\RequirementsAwareDestinationInterface'); Chris@0: Chris@0: $migration->setSourcePlugin($source_plugin); Chris@0: $migration->setDestinationPlugin($destination_plugin); Chris@0: Chris@0: $this->setExpectedException(RequirementsException::class, 'Missing source requirement'); Chris@0: $migration->checkRequirements(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests checking requirements for destination plugins. Chris@0: * Chris@0: * @covers ::checkRequirements Chris@0: */ Chris@0: public function testRequirementsForDestinationPlugin() { Chris@0: $migration = new TestMigration(); Chris@0: Chris@0: $source_plugin = $this->getMock('Drupal\migrate\Plugin\MigrateSourceInterface'); Chris@0: $destination_plugin = $this->getMock('Drupal\Tests\migrate\Unit\RequirementsAwareDestinationInterface'); Chris@0: $destination_plugin->expects($this->once()) Chris@0: ->method('checkRequirements') Chris@0: ->willThrowException(new RequirementsException('Missing destination requirement', ['key' => 'value'])); Chris@0: Chris@0: $migration->setSourcePlugin($source_plugin); Chris@0: $migration->setDestinationPlugin($destination_plugin); Chris@0: Chris@0: $this->setExpectedException(RequirementsException::class, 'Missing destination requirement'); Chris@0: $migration->checkRequirements(); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests checking requirements for destination plugins. Chris@0: * Chris@0: * @covers ::checkRequirements Chris@0: */ Chris@0: public function testRequirementsForMigrations() { Chris@0: $migration = new TestMigration(); Chris@0: Chris@0: // Setup source and destination plugins without any requirements. Chris@0: $source_plugin = $this->getMock('Drupal\migrate\Plugin\MigrateSourceInterface'); Chris@0: $destination_plugin = $this->getMock('Drupal\migrate\Plugin\MigrateDestinationInterface'); Chris@0: $migration->setSourcePlugin($source_plugin); Chris@0: $migration->setDestinationPlugin($destination_plugin); Chris@0: Chris@0: $plugin_manager = $this->getMock('Drupal\migrate\Plugin\MigrationPluginManagerInterface'); Chris@0: $migration->setMigrationPluginManager($plugin_manager); Chris@0: Chris@0: // We setup the requirements that test_a doesn't exist and test_c is not Chris@0: // completed yet. Chris@0: $migration->setRequirements(['test_a', 'test_b', 'test_c', 'test_d']); Chris@0: Chris@0: $migration_b = $this->getMock(MigrationInterface::class); Chris@0: $migration_c = $this->getMock(MigrationInterface::class); Chris@0: $migration_d = $this->getMock(MigrationInterface::class); Chris@0: Chris@0: $migration_b->expects($this->once()) Chris@0: ->method('allRowsProcessed') Chris@0: ->willReturn(TRUE); Chris@0: $migration_c->expects($this->once()) Chris@0: ->method('allRowsProcessed') Chris@0: ->willReturn(FALSE); Chris@0: $migration_d->expects($this->once()) Chris@0: ->method('allRowsProcessed') Chris@0: ->willReturn(TRUE); Chris@0: Chris@0: $plugin_manager->expects($this->once()) Chris@0: ->method('createInstances') Chris@0: ->with(['test_a', 'test_b', 'test_c', 'test_d']) Chris@0: ->willReturn(['test_b' => $migration_b, 'test_c' => $migration_c, 'test_d' => $migration_d]); Chris@0: Chris@0: $this->setExpectedException(RequirementsException::class, 'Missing migrations test_a, test_c'); Chris@0: $migration->checkRequirements(); Chris@0: } Chris@0: Chris@0: } Chris@0: Chris@0: /** Chris@0: * Defines the TestMigration class. Chris@0: */ Chris@0: class TestMigration extends Migration { Chris@0: Chris@0: /** Chris@0: * Constructs an instance of TestMigration object. Chris@0: */ Chris@0: public function __construct() { Chris@0: } Chris@0: Chris@0: /** Chris@0: * Sets the requirements values. Chris@0: * Chris@0: * @param array $requirements Chris@0: * The array of requirement values. Chris@0: */ Chris@0: public function setRequirements(array $requirements) { Chris@0: $this->requirements = $requirements; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Sets the source Plugin. Chris@0: * Chris@0: * @param \Drupal\migrate\Plugin\MigrateSourceInterface $source_plugin Chris@0: * The source Plugin. Chris@0: */ Chris@0: public function setSourcePlugin(MigrateSourceInterface $source_plugin) { Chris@0: $this->sourcePlugin = $source_plugin; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Sets the destination Plugin. Chris@0: * Chris@0: * @param \Drupal\migrate\Plugin\MigrateDestinationInterface $destination_plugin Chris@0: * The destination Plugin. Chris@0: */ Chris@0: public function setDestinationPlugin(MigrateDestinationInterface $destination_plugin) { Chris@0: $this->destinationPlugin = $destination_plugin; Chris@0: } Chris@0: Chris@0: /** Chris@0: * Sets the plugin manager service. Chris@0: * Chris@0: * @param \Drupal\migrate\Plugin\MigrationPluginManagerInterface $plugin_manager Chris@0: * The plugin manager service. Chris@0: */ Chris@0: public function setMigrationPluginManager(MigrationPluginManagerInterface $plugin_manager) { Chris@0: $this->migrationPluginManager = $plugin_manager; Chris@0: } Chris@0: Chris@0: } Chris@0: Chris@0: /** Chris@0: * Defines the RequirementsAwareSourceInterface. Chris@0: */ Chris@0: interface RequirementsAwareSourceInterface extends MigrateSourceInterface, RequirementsInterface {} Chris@0: Chris@0: /** Chris@0: * Defines the RequirementsAwareDestinationInterface. Chris@0: */ Chris@0: interface RequirementsAwareDestinationInterface extends MigrateDestinationInterface, RequirementsInterface {}