annotate core/modules/migrate/tests/src/Kernel/MigrateEventsTest.php @ 9:1fc0ff908d1f

Add another data file
author Chris Cannam
date Mon, 05 Feb 2018 12:34:32 +0000
parents 4c8ae668cc8c
children 1fec387a4317
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\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 }