Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Tests\migrate\Kernel;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\migrate\Event\MigrateImportEvent;
|
Chris@0
|
6 use Drupal\migrate\Event\MigrateMapDeleteEvent;
|
Chris@0
|
7 use Drupal\migrate\Event\MigrateMapSaveEvent;
|
Chris@0
|
8 use Drupal\migrate\Event\MigratePostRowSaveEvent;
|
Chris@0
|
9 use Drupal\migrate\Event\MigratePreRowSaveEvent;
|
Chris@0
|
10 use Drupal\migrate\MigrateMessage;
|
Chris@0
|
11 use Drupal\migrate\Event\MigrateEvents;
|
Chris@0
|
12 use Drupal\migrate\MigrateExecutable;
|
Chris@0
|
13 use Drupal\KernelTests\KernelTestBase;
|
Chris@0
|
14
|
Chris@0
|
15 /**
|
Chris@0
|
16 * Tests events fired on migrations.
|
Chris@0
|
17 *
|
Chris@0
|
18 * @group migrate
|
Chris@0
|
19 */
|
Chris@0
|
20 class MigrateEventsTest extends KernelTestBase {
|
Chris@0
|
21
|
Chris@0
|
22 /**
|
Chris@0
|
23 * State service for recording information received by event listeners.
|
Chris@0
|
24 *
|
Chris@0
|
25 * @var \Drupal\Core\State\State
|
Chris@0
|
26 */
|
Chris@0
|
27 protected $state;
|
Chris@0
|
28
|
Chris@0
|
29 /**
|
Chris@0
|
30 * Modules to enable.
|
Chris@0
|
31 *
|
Chris@0
|
32 * @var array
|
Chris@0
|
33 */
|
Chris@0
|
34 public static $modules = ['migrate', 'migrate_events_test'];
|
Chris@0
|
35
|
Chris@0
|
36 /**
|
Chris@0
|
37 * {@inheritdoc}
|
Chris@0
|
38 */
|
Chris@0
|
39 protected function setUp() {
|
Chris@0
|
40 parent::setUp();
|
Chris@0
|
41 $this->state = \Drupal::state();
|
Chris@0
|
42 \Drupal::service('event_dispatcher')->addListener(MigrateEvents::MAP_SAVE,
|
Chris@0
|
43 [$this, 'mapSaveEventRecorder']);
|
Chris@0
|
44 \Drupal::service('event_dispatcher')->addListener(MigrateEvents::MAP_DELETE,
|
Chris@0
|
45 [$this, 'mapDeleteEventRecorder']);
|
Chris@0
|
46 \Drupal::service('event_dispatcher')->addListener(MigrateEvents::PRE_IMPORT,
|
Chris@0
|
47 [$this, 'preImportEventRecorder']);
|
Chris@0
|
48 \Drupal::service('event_dispatcher')->addListener(MigrateEvents::POST_IMPORT,
|
Chris@0
|
49 [$this, 'postImportEventRecorder']);
|
Chris@0
|
50 \Drupal::service('event_dispatcher')->addListener(MigrateEvents::PRE_ROW_SAVE,
|
Chris@0
|
51 [$this, 'preRowSaveEventRecorder']);
|
Chris@0
|
52 \Drupal::service('event_dispatcher')->addListener(MigrateEvents::POST_ROW_SAVE,
|
Chris@0
|
53 [$this, 'postRowSaveEventRecorder']);
|
Chris@0
|
54 }
|
Chris@0
|
55
|
Chris@0
|
56 /**
|
Chris@0
|
57 * Tests migration events.
|
Chris@0
|
58 */
|
Chris@0
|
59 public function testMigrateEvents() {
|
Chris@0
|
60 // Run a simple little migration, which should trigger one of each event
|
Chris@0
|
61 // other than map_delete.
|
Chris@0
|
62 $definition = [
|
Chris@0
|
63 'migration_tags' => ['Event test'],
|
Chris@0
|
64 'source' => [
|
Chris@0
|
65 'plugin' => 'embedded_data',
|
Chris@0
|
66 'data_rows' => [
|
Chris@0
|
67 ['data' => 'dummy value'],
|
Chris@0
|
68 ],
|
Chris@0
|
69 'ids' => [
|
Chris@0
|
70 'data' => ['type' => 'string'],
|
Chris@0
|
71 ],
|
Chris@0
|
72 ],
|
Chris@0
|
73 'process' => ['value' => 'data'],
|
Chris@0
|
74 'destination' => ['plugin' => 'dummy'],
|
Chris@0
|
75 ];
|
Chris@0
|
76
|
Chris@0
|
77 $migration = \Drupal::service('plugin.manager.migration')->createStubMigration($definition);
|
Chris@0
|
78
|
Chris@0
|
79 $executable = new MigrateExecutable($migration, new MigrateMessage());
|
Chris@0
|
80 // As the import runs, events will be dispatched, recording the received
|
Chris@0
|
81 // information in state.
|
Chris@0
|
82 $executable->import();
|
Chris@0
|
83
|
Chris@0
|
84 // Validate from the recorded state that the events were received.
|
Chris@0
|
85 $event = $this->state->get('migrate_events_test.pre_import_event', []);
|
Chris@0
|
86 $this->assertIdentical($event['event_name'], MigrateEvents::PRE_IMPORT);
|
Chris@0
|
87 $this->assertIdentical($event['migration']->id(), $migration->id());
|
Chris@0
|
88
|
Chris@0
|
89 $event = $this->state->get('migrate_events_test.post_import_event', []);
|
Chris@0
|
90 $this->assertIdentical($event['event_name'], MigrateEvents::POST_IMPORT);
|
Chris@0
|
91 $this->assertIdentical($event['migration']->id(), $migration->id());
|
Chris@0
|
92
|
Chris@0
|
93 $event = $this->state->get('migrate_events_test.map_save_event', []);
|
Chris@0
|
94 $this->assertIdentical($event['event_name'], MigrateEvents::MAP_SAVE);
|
Chris@0
|
95 // Validating the last row processed.
|
Chris@0
|
96 $this->assertIdentical($event['fields']['sourceid1'], 'dummy value');
|
Chris@0
|
97 $this->assertIdentical($event['fields']['destid1'], 'dummy value');
|
Chris@0
|
98 $this->assertIdentical($event['fields']['source_row_status'], 0);
|
Chris@0
|
99
|
Chris@0
|
100 $event = $this->state->get('migrate_events_test.map_delete_event', []);
|
Chris@0
|
101 $this->assertIdentical($event, []);
|
Chris@0
|
102
|
Chris@0
|
103 $event = $this->state->get('migrate_events_test.pre_row_save_event', []);
|
Chris@0
|
104 $this->assertIdentical($event['event_name'], MigrateEvents::PRE_ROW_SAVE);
|
Chris@0
|
105 $this->assertIdentical($event['migration']->id(), $migration->id());
|
Chris@0
|
106 // Validating the last row processed.
|
Chris@0
|
107 $this->assertIdentical($event['row']->getSourceProperty('data'), 'dummy value');
|
Chris@0
|
108
|
Chris@0
|
109 $event = $this->state->get('migrate_events_test.post_row_save_event', []);
|
Chris@0
|
110 $this->assertIdentical($event['event_name'], MigrateEvents::POST_ROW_SAVE);
|
Chris@0
|
111 $this->assertIdentical($event['migration']->id(), $migration->id());
|
Chris@0
|
112 // Validating the last row processed.
|
Chris@0
|
113 $this->assertIdentical($event['row']->getSourceProperty('data'), 'dummy value');
|
Chris@0
|
114 $this->assertIdentical($event['destination_id_values']['value'], 'dummy value');
|
Chris@0
|
115
|
Chris@0
|
116 // Generate a map delete event.
|
Chris@0
|
117 $migration->getIdMap()->delete(['data' => 'dummy value']);
|
Chris@0
|
118 $event = $this->state->get('migrate_events_test.map_delete_event', []);
|
Chris@0
|
119 $this->assertIdentical($event['event_name'], MigrateEvents::MAP_DELETE);
|
Chris@0
|
120 $this->assertIdentical($event['source_id'], ['data' => 'dummy value']);
|
Chris@0
|
121 }
|
Chris@0
|
122
|
Chris@0
|
123 /**
|
Chris@0
|
124 * Reacts to map save event.
|
Chris@0
|
125 *
|
Chris@0
|
126 * @param \Drupal\Migrate\Event\MigrateMapSaveEvent $event
|
Chris@0
|
127 * The migration event.
|
Chris@0
|
128 * @param string $name
|
Chris@0
|
129 * The event name.
|
Chris@0
|
130 */
|
Chris@0
|
131 public function mapSaveEventRecorder(MigrateMapSaveEvent $event, $name) {
|
Chris@0
|
132 $this->state->set('migrate_events_test.map_save_event', [
|
Chris@0
|
133 'event_name' => $name,
|
Chris@0
|
134 'map' => $event->getMap(),
|
Chris@0
|
135 'fields' => $event->getFields(),
|
Chris@0
|
136 ]);
|
Chris@0
|
137 }
|
Chris@0
|
138
|
Chris@0
|
139 /**
|
Chris@0
|
140 * Reacts to map delete event.
|
Chris@0
|
141 *
|
Chris@0
|
142 * @param \Drupal\Migrate\Event\MigrateMapDeleteEvent $event
|
Chris@0
|
143 * The migration event.
|
Chris@0
|
144 * @param string $name
|
Chris@0
|
145 * The event name.
|
Chris@0
|
146 */
|
Chris@0
|
147 public function mapDeleteEventRecorder(MigrateMapDeleteEvent $event, $name) {
|
Chris@0
|
148 $this->state->set('migrate_events_test.map_delete_event', [
|
Chris@0
|
149 'event_name' => $name,
|
Chris@0
|
150 'map' => $event->getMap(),
|
Chris@0
|
151 'source_id' => $event->getSourceId(),
|
Chris@0
|
152 ]);
|
Chris@0
|
153 }
|
Chris@0
|
154
|
Chris@0
|
155 /**
|
Chris@0
|
156 * Reacts to pre-import event.
|
Chris@0
|
157 *
|
Chris@0
|
158 * @param \Drupal\Migrate\Event\MigrateImportEvent $event
|
Chris@0
|
159 * The migration event.
|
Chris@0
|
160 * @param string $name
|
Chris@0
|
161 * The event name.
|
Chris@0
|
162 */
|
Chris@0
|
163 public function preImportEventRecorder(MigrateImportEvent $event, $name) {
|
Chris@0
|
164 $this->state->set('migrate_events_test.pre_import_event', [
|
Chris@0
|
165 'event_name' => $name,
|
Chris@0
|
166 'migration' => $event->getMigration(),
|
Chris@0
|
167 ]);
|
Chris@0
|
168 }
|
Chris@0
|
169
|
Chris@0
|
170 /**
|
Chris@0
|
171 * Reacts to post-import event.
|
Chris@0
|
172 *
|
Chris@0
|
173 * @param \Drupal\Migrate\Event\MigrateImportEvent $event
|
Chris@0
|
174 * The migration event.
|
Chris@0
|
175 * @param string $name
|
Chris@0
|
176 * The event name.
|
Chris@0
|
177 */
|
Chris@0
|
178 public function postImportEventRecorder(MigrateImportEvent $event, $name) {
|
Chris@0
|
179 $this->state->set('migrate_events_test.post_import_event', [
|
Chris@0
|
180 'event_name' => $name,
|
Chris@0
|
181 'migration' => $event->getMigration(),
|
Chris@0
|
182 ]);
|
Chris@0
|
183 }
|
Chris@0
|
184
|
Chris@0
|
185 /**
|
Chris@0
|
186 * Reacts to pre-row-save event.
|
Chris@0
|
187 *
|
Chris@0
|
188 * @param \Drupal\Migrate\Event\MigratePreRowSaveEvent $event
|
Chris@0
|
189 * The migration event.
|
Chris@0
|
190 * @param string $name
|
Chris@0
|
191 * The event name.
|
Chris@0
|
192 */
|
Chris@0
|
193 public function preRowSaveEventRecorder(MigratePreRowSaveEvent $event, $name) {
|
Chris@0
|
194 $this->state->set('migrate_events_test.pre_row_save_event', [
|
Chris@0
|
195 'event_name' => $name,
|
Chris@0
|
196 'migration' => $event->getMigration(),
|
Chris@0
|
197 'row' => $event->getRow(),
|
Chris@0
|
198 ]);
|
Chris@0
|
199 }
|
Chris@0
|
200
|
Chris@0
|
201 /**
|
Chris@0
|
202 * Reacts to post-row-save event.
|
Chris@0
|
203 *
|
Chris@0
|
204 * @param \Drupal\Migrate\Event\MigratePostRowSaveEvent $event
|
Chris@0
|
205 * The migration event.
|
Chris@0
|
206 * @param string $name
|
Chris@0
|
207 * The event name.
|
Chris@0
|
208 */
|
Chris@0
|
209 public function postRowSaveEventRecorder(MigratePostRowSaveEvent $event, $name) {
|
Chris@0
|
210 $this->state->set('migrate_events_test.post_row_save_event', [
|
Chris@0
|
211 'event_name' => $name,
|
Chris@0
|
212 'migration' => $event->getMigration(),
|
Chris@0
|
213 'row' => $event->getRow(),
|
Chris@0
|
214 'destination_id_values' => $event->getDestinationIdValues(),
|
Chris@0
|
215 ]);
|
Chris@0
|
216 }
|
Chris@0
|
217
|
Chris@0
|
218 }
|