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