Chris@0: state = \Drupal::state(); Chris@0: \Drupal::service('event_dispatcher')->addListener(MigrateEvents::MAP_SAVE, Chris@0: [$this, 'mapSaveEventRecorder']); Chris@0: \Drupal::service('event_dispatcher')->addListener(MigrateEvents::MAP_DELETE, Chris@0: [$this, 'mapDeleteEventRecorder']); Chris@0: \Drupal::service('event_dispatcher')->addListener(MigrateEvents::PRE_IMPORT, Chris@0: [$this, 'preImportEventRecorder']); Chris@0: \Drupal::service('event_dispatcher')->addListener(MigrateEvents::POST_IMPORT, Chris@0: [$this, 'postImportEventRecorder']); Chris@0: \Drupal::service('event_dispatcher')->addListener(MigrateEvents::PRE_ROW_SAVE, Chris@0: [$this, 'preRowSaveEventRecorder']); Chris@0: \Drupal::service('event_dispatcher')->addListener(MigrateEvents::POST_ROW_SAVE, Chris@0: [$this, 'postRowSaveEventRecorder']); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Tests migration events. Chris@0: */ Chris@0: public function testMigrateEvents() { Chris@0: // Run a simple little migration, which should trigger one of each event Chris@0: // other than map_delete. Chris@0: $definition = [ Chris@0: 'migration_tags' => ['Event test'], Chris@0: 'source' => [ Chris@0: 'plugin' => 'embedded_data', Chris@0: 'data_rows' => [ Chris@0: ['data' => 'dummy value'], Chris@0: ], Chris@0: 'ids' => [ Chris@0: 'data' => ['type' => 'string'], Chris@0: ], Chris@0: ], Chris@0: 'process' => ['value' => 'data'], Chris@0: 'destination' => ['plugin' => 'dummy'], Chris@0: ]; Chris@0: Chris@0: $migration = \Drupal::service('plugin.manager.migration')->createStubMigration($definition); Chris@0: Chris@14: $executable = new MigrateExecutable($migration); Chris@0: // As the import runs, events will be dispatched, recording the received Chris@0: // information in state. Chris@0: $executable->import(); Chris@0: Chris@0: // Validate from the recorded state that the events were received. Chris@0: $event = $this->state->get('migrate_events_test.pre_import_event', []); Chris@0: $this->assertIdentical($event['event_name'], MigrateEvents::PRE_IMPORT); Chris@0: $this->assertIdentical($event['migration']->id(), $migration->id()); Chris@0: Chris@0: $event = $this->state->get('migrate_events_test.post_import_event', []); Chris@0: $this->assertIdentical($event['event_name'], MigrateEvents::POST_IMPORT); Chris@0: $this->assertIdentical($event['migration']->id(), $migration->id()); Chris@0: Chris@0: $event = $this->state->get('migrate_events_test.map_save_event', []); Chris@0: $this->assertIdentical($event['event_name'], MigrateEvents::MAP_SAVE); Chris@0: // Validating the last row processed. Chris@0: $this->assertIdentical($event['fields']['sourceid1'], 'dummy value'); Chris@0: $this->assertIdentical($event['fields']['destid1'], 'dummy value'); Chris@0: $this->assertIdentical($event['fields']['source_row_status'], 0); Chris@0: Chris@0: $event = $this->state->get('migrate_events_test.map_delete_event', []); Chris@0: $this->assertIdentical($event, []); Chris@0: Chris@0: $event = $this->state->get('migrate_events_test.pre_row_save_event', []); Chris@0: $this->assertIdentical($event['event_name'], MigrateEvents::PRE_ROW_SAVE); Chris@0: $this->assertIdentical($event['migration']->id(), $migration->id()); Chris@0: // Validating the last row processed. Chris@0: $this->assertIdentical($event['row']->getSourceProperty('data'), 'dummy value'); Chris@0: Chris@0: $event = $this->state->get('migrate_events_test.post_row_save_event', []); Chris@0: $this->assertIdentical($event['event_name'], MigrateEvents::POST_ROW_SAVE); Chris@0: $this->assertIdentical($event['migration']->id(), $migration->id()); Chris@0: // Validating the last row processed. Chris@0: $this->assertIdentical($event['row']->getSourceProperty('data'), 'dummy value'); Chris@0: $this->assertIdentical($event['destination_id_values']['value'], 'dummy value'); Chris@0: Chris@0: // Generate a map delete event. Chris@0: $migration->getIdMap()->delete(['data' => 'dummy value']); Chris@0: $event = $this->state->get('migrate_events_test.map_delete_event', []); Chris@0: $this->assertIdentical($event['event_name'], MigrateEvents::MAP_DELETE); Chris@0: $this->assertIdentical($event['source_id'], ['data' => 'dummy value']); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Reacts to map save event. Chris@0: * Chris@18: * @param \Drupal\migrate\Event\MigrateMapSaveEvent $event Chris@0: * The migration event. Chris@0: * @param string $name Chris@0: * The event name. Chris@0: */ Chris@0: public function mapSaveEventRecorder(MigrateMapSaveEvent $event, $name) { Chris@0: $this->state->set('migrate_events_test.map_save_event', [ Chris@0: 'event_name' => $name, Chris@0: 'map' => $event->getMap(), Chris@0: 'fields' => $event->getFields(), Chris@0: ]); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Reacts to map delete event. Chris@0: * Chris@18: * @param \Drupal\migrate\Event\MigrateMapDeleteEvent $event Chris@0: * The migration event. Chris@0: * @param string $name Chris@0: * The event name. Chris@0: */ Chris@0: public function mapDeleteEventRecorder(MigrateMapDeleteEvent $event, $name) { Chris@0: $this->state->set('migrate_events_test.map_delete_event', [ Chris@0: 'event_name' => $name, Chris@0: 'map' => $event->getMap(), Chris@0: 'source_id' => $event->getSourceId(), Chris@0: ]); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Reacts to pre-import event. Chris@0: * Chris@18: * @param \Drupal\migrate\Event\MigrateImportEvent $event Chris@0: * The migration event. Chris@0: * @param string $name Chris@0: * The event name. Chris@0: */ Chris@0: public function preImportEventRecorder(MigrateImportEvent $event, $name) { Chris@0: $this->state->set('migrate_events_test.pre_import_event', [ Chris@0: 'event_name' => $name, Chris@0: 'migration' => $event->getMigration(), Chris@0: ]); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Reacts to post-import event. Chris@0: * Chris@18: * @param \Drupal\migrate\Event\MigrateImportEvent $event Chris@0: * The migration event. Chris@0: * @param string $name Chris@0: * The event name. Chris@0: */ Chris@0: public function postImportEventRecorder(MigrateImportEvent $event, $name) { Chris@0: $this->state->set('migrate_events_test.post_import_event', [ Chris@0: 'event_name' => $name, Chris@0: 'migration' => $event->getMigration(), Chris@0: ]); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Reacts to pre-row-save event. Chris@0: * Chris@18: * @param \Drupal\migrate\Event\MigratePreRowSaveEvent $event Chris@0: * The migration event. Chris@0: * @param string $name Chris@0: * The event name. Chris@0: */ Chris@0: public function preRowSaveEventRecorder(MigratePreRowSaveEvent $event, $name) { Chris@0: $this->state->set('migrate_events_test.pre_row_save_event', [ Chris@0: 'event_name' => $name, Chris@0: 'migration' => $event->getMigration(), Chris@0: 'row' => $event->getRow(), Chris@0: ]); Chris@0: } Chris@0: Chris@0: /** Chris@0: * Reacts to post-row-save event. Chris@0: * Chris@18: * @param \Drupal\migrate\Event\MigratePostRowSaveEvent $event Chris@0: * The migration event. Chris@0: * @param string $name Chris@0: * The event name. Chris@0: */ Chris@0: public function postRowSaveEventRecorder(MigratePostRowSaveEvent $event, $name) { Chris@0: $this->state->set('migrate_events_test.post_row_save_event', [ Chris@0: 'event_name' => $name, Chris@0: 'migration' => $event->getMigration(), Chris@0: 'row' => $event->getRow(), Chris@0: 'destination_id_values' => $event->getDestinationIdValues(), Chris@0: ]); Chris@0: } Chris@0: Chris@0: }