annotate core/modules/migrate/tests/src/Kernel/MigrateEventsTest.php @ 19:fa3358dc1485 tip

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