Version 1
[yaffs-website] / web / core / modules / migrate / tests / src / Unit / MigrationTest.php
1 <?php
2
3 /**
4  * @file
5  * Contains \Drupal\Tests\migrate\Unit\MigrationTest.
6  */
7
8 namespace Drupal\Tests\migrate\Unit;
9
10 use Drupal\migrate\Plugin\MigrationInterface;
11 use Drupal\migrate\Plugin\Migration;
12 use Drupal\migrate\Exception\RequirementsException;
13 use Drupal\migrate\Plugin\MigrateDestinationInterface;
14 use Drupal\migrate\Plugin\MigrateSourceInterface;
15 use Drupal\migrate\Plugin\MigrationPluginManagerInterface;
16 use Drupal\migrate\Plugin\RequirementsInterface;
17 use Drupal\Tests\UnitTestCase;
18
19 /**
20  * @coversDefaultClass \Drupal\migrate\Plugin\Migration
21  *
22  * @group Migration
23  */
24 class MigrationTest extends UnitTestCase {
25
26   /**
27    * Tests checking requirements for source plugins.
28    *
29    * @covers ::checkRequirements
30    */
31   public function testRequirementsForSourcePlugin() {
32     $migration = new TestMigration();
33
34     $source_plugin = $this->getMock('Drupal\Tests\migrate\Unit\RequirementsAwareSourceInterface');
35     $source_plugin->expects($this->once())
36       ->method('checkRequirements')
37       ->willThrowException(new RequirementsException('Missing source requirement', ['key' => 'value']));
38     $destination_plugin = $this->getMock('Drupal\Tests\migrate\Unit\RequirementsAwareDestinationInterface');
39
40     $migration->setSourcePlugin($source_plugin);
41     $migration->setDestinationPlugin($destination_plugin);
42
43     $this->setExpectedException(RequirementsException::class, 'Missing source requirement');
44     $migration->checkRequirements();
45   }
46
47   /**
48    * Tests checking requirements for destination plugins.
49    *
50    * @covers ::checkRequirements
51    */
52   public function testRequirementsForDestinationPlugin() {
53     $migration = new TestMigration();
54
55     $source_plugin = $this->getMock('Drupal\migrate\Plugin\MigrateSourceInterface');
56     $destination_plugin = $this->getMock('Drupal\Tests\migrate\Unit\RequirementsAwareDestinationInterface');
57     $destination_plugin->expects($this->once())
58       ->method('checkRequirements')
59       ->willThrowException(new RequirementsException('Missing destination requirement', ['key' => 'value']));
60
61     $migration->setSourcePlugin($source_plugin);
62     $migration->setDestinationPlugin($destination_plugin);
63
64     $this->setExpectedException(RequirementsException::class, 'Missing destination requirement');
65     $migration->checkRequirements();
66   }
67
68   /**
69    * Tests checking requirements for destination plugins.
70    *
71    * @covers ::checkRequirements
72    */
73   public function testRequirementsForMigrations() {
74     $migration = new TestMigration();
75
76     // Setup source and destination plugins without any requirements.
77     $source_plugin = $this->getMock('Drupal\migrate\Plugin\MigrateSourceInterface');
78     $destination_plugin = $this->getMock('Drupal\migrate\Plugin\MigrateDestinationInterface');
79     $migration->setSourcePlugin($source_plugin);
80     $migration->setDestinationPlugin($destination_plugin);
81
82     $plugin_manager = $this->getMock('Drupal\migrate\Plugin\MigrationPluginManagerInterface');
83     $migration->setMigrationPluginManager($plugin_manager);
84
85     // We setup the requirements that test_a doesn't exist and test_c is not
86     // completed yet.
87     $migration->setRequirements(['test_a', 'test_b', 'test_c', 'test_d']);
88
89     $migration_b = $this->getMock(MigrationInterface::class);
90     $migration_c = $this->getMock(MigrationInterface::class);
91     $migration_d = $this->getMock(MigrationInterface::class);
92
93     $migration_b->expects($this->once())
94       ->method('allRowsProcessed')
95       ->willReturn(TRUE);
96     $migration_c->expects($this->once())
97       ->method('allRowsProcessed')
98       ->willReturn(FALSE);
99     $migration_d->expects($this->once())
100       ->method('allRowsProcessed')
101       ->willReturn(TRUE);
102
103     $plugin_manager->expects($this->once())
104       ->method('createInstances')
105       ->with(['test_a', 'test_b', 'test_c', 'test_d'])
106       ->willReturn(['test_b' => $migration_b, 'test_c' => $migration_c, 'test_d' => $migration_d]);
107
108     $this->setExpectedException(RequirementsException::class, 'Missing migrations test_a, test_c');
109     $migration->checkRequirements();
110   }
111
112 }
113
114 /**
115  * Defines the TestMigration class.
116  */
117 class TestMigration extends Migration {
118
119   /**
120    * Constructs an instance of TestMigration object.
121    */
122   public function __construct() {
123   }
124
125   /**
126    * Sets the requirements values.
127    *
128    * @param array $requirements
129    *   The array of requirement values.
130    */
131   public function setRequirements(array $requirements) {
132     $this->requirements = $requirements;
133   }
134
135   /**
136    * Sets the source Plugin.
137    *
138    * @param \Drupal\migrate\Plugin\MigrateSourceInterface $source_plugin
139    *   The source Plugin.
140    */
141   public function setSourcePlugin(MigrateSourceInterface $source_plugin) {
142     $this->sourcePlugin = $source_plugin;
143   }
144
145   /**
146    * Sets the destination Plugin.
147    *
148    * @param \Drupal\migrate\Plugin\MigrateDestinationInterface $destination_plugin
149    *   The destination Plugin.
150    */
151   public function setDestinationPlugin(MigrateDestinationInterface $destination_plugin) {
152     $this->destinationPlugin = $destination_plugin;
153   }
154
155   /**
156    * Sets the plugin manager service.
157    *
158    * @param \Drupal\migrate\Plugin\MigrationPluginManagerInterface $plugin_manager
159    *   The plugin manager service.
160    */
161   public function setMigrationPluginManager(MigrationPluginManagerInterface $plugin_manager) {
162     $this->migrationPluginManager = $plugin_manager;
163   }
164
165 }
166
167 /**
168  * Defines the RequirementsAwareSourceInterface.
169  */
170 interface RequirementsAwareSourceInterface extends MigrateSourceInterface, RequirementsInterface {}
171
172 /**
173  * Defines the RequirementsAwareDestinationInterface.
174  */
175 interface RequirementsAwareDestinationInterface extends MigrateDestinationInterface, RequirementsInterface {}