Mercurial > hg > isophonics-drupal-site
diff core/modules/migrate/tests/src/Unit/MigrationTest.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 1fec387a4317 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/migrate/tests/src/Unit/MigrationTest.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,175 @@ +<?php + +/** + * @file + * Contains \Drupal\Tests\migrate\Unit\MigrationTest. + */ + +namespace Drupal\Tests\migrate\Unit; + +use Drupal\migrate\Plugin\MigrationInterface; +use Drupal\migrate\Plugin\Migration; +use Drupal\migrate\Exception\RequirementsException; +use Drupal\migrate\Plugin\MigrateDestinationInterface; +use Drupal\migrate\Plugin\MigrateSourceInterface; +use Drupal\migrate\Plugin\MigrationPluginManagerInterface; +use Drupal\migrate\Plugin\RequirementsInterface; +use Drupal\Tests\UnitTestCase; + +/** + * @coversDefaultClass \Drupal\migrate\Plugin\Migration + * + * @group Migration + */ +class MigrationTest extends UnitTestCase { + + /** + * Tests checking requirements for source plugins. + * + * @covers ::checkRequirements + */ + public function testRequirementsForSourcePlugin() { + $migration = new TestMigration(); + + $source_plugin = $this->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 {}