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