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