You are here

public function MigrateEventsTest::testMigrateEvents in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/migrate/tests/src/Kernel/MigrateEventsTest.php \Drupal\Tests\migrate\Kernel\MigrateEventsTest::testMigrateEvents()
  2. 10 core/modules/migrate/tests/src/Kernel/MigrateEventsTest.php \Drupal\Tests\migrate\Kernel\MigrateEventsTest::testMigrateEvents()

Tests migration events.

File

core/modules/migrate/tests/src/Kernel/MigrateEventsTest.php, line 58

Class

MigrateEventsTest
Tests events fired on migrations.

Namespace

Drupal\Tests\migrate\Kernel

Code

public function testMigrateEvents() {

  // Run a simple little migration, which should trigger one of each event
  // other than map_delete.
  $definition = [
    'migration_tags' => [
      'Event test',
    ],
    'source' => [
      'plugin' => 'embedded_data',
      'data_rows' => [
        [
          'data' => 'dummy value',
        ],
      ],
      'ids' => [
        'data' => [
          'type' => 'string',
        ],
      ],
    ],
    'process' => [
      'value' => 'data',
    ],
    'destination' => [
      'plugin' => 'dummy',
    ],
  ];
  $migration = \Drupal::service('plugin.manager.migration')
    ->createStubMigration($definition);
  $executable = new MigrateExecutable($migration);

  // As the import runs, events will be dispatched, recording the received
  // information in state.
  $executable
    ->import();

  // Validate from the recorded state that the events were received.
  $event = $this->state
    ->get('migrate_events_test.pre_import_event', []);
  $this
    ->assertSame(MigrateEvents::PRE_IMPORT, $event['event_name']);
  $this
    ->assertSame($migration
    ->id(), $event['migration']
    ->id());
  $event = $this->state
    ->get('migrate_events_test.post_import_event', []);
  $this
    ->assertSame(MigrateEvents::POST_IMPORT, $event['event_name']);
  $this
    ->assertSame($migration
    ->id(), $event['migration']
    ->id());
  $event = $this->state
    ->get('migrate_events_test.map_save_event', []);
  $this
    ->assertSame(MigrateEvents::MAP_SAVE, $event['event_name']);

  // Validating the last row processed.
  $this
    ->assertSame('dummy value', $event['fields']['sourceid1']);
  $this
    ->assertSame('dummy value', $event['fields']['destid1']);
  $this
    ->assertSame(0, $event['fields']['source_row_status']);
  $event = $this->state
    ->get('migrate_events_test.map_delete_event', []);
  $this
    ->assertSame([], $event);
  $event = $this->state
    ->get('migrate_events_test.pre_row_save_event', []);
  $this
    ->assertSame(MigrateEvents::PRE_ROW_SAVE, $event['event_name']);
  $this
    ->assertSame($migration
    ->id(), $event['migration']
    ->id());

  // Validating the last row processed.
  $this
    ->assertSame('dummy value', $event['row']
    ->getSourceProperty('data'));
  $event = $this->state
    ->get('migrate_events_test.post_row_save_event', []);
  $this
    ->assertSame(MigrateEvents::POST_ROW_SAVE, $event['event_name']);
  $this
    ->assertSame($migration
    ->id(), $event['migration']
    ->id());

  // Validating the last row processed.
  $this
    ->assertSame('dummy value', $event['row']
    ->getSourceProperty('data'));
  $this
    ->assertSame('dummy value', $event['destination_id_values']['value']);

  // Generate a map delete event.
  $migration
    ->getIdMap()
    ->delete([
    'data' => 'dummy value',
  ]);
  $event = $this->state
    ->get('migrate_events_test.map_delete_event', []);
  $this
    ->assertSame(MigrateEvents::MAP_DELETE, $event['event_name']);
  $this
    ->assertSame([
    'data' => 'dummy value',
  ], $event['source_id']);
}