You are here

public function IteratorTest::testIterator in Drupal 8

Tests the iterator process plugin.

@group legacy @expectedDeprecation The Drupal\migrate\Plugin\migrate\process\Iterator is deprecated in Drupal 8.4.x and will be removed before Drupal 9.0.0. Instead, use Drupal\migrate\Plugin\migrate\process\SubProcess

File

core/modules/migrate/tests/src/Unit/process/IteratorTest.php, line 38

Class

IteratorTest
Tests the iterator process plugin.

Namespace

Drupal\Tests\migrate\Unit\process

Code

public function testIterator() {
  $migration = $this
    ->getMigration();

  // Set up the properties for the iterator.
  $configuration = [
    'process' => [
      'foo' => 'source_foo',
      'id' => 'source_id',
    ],
    'key' => '@id',
  ];
  $plugin = new Iterator($configuration, 'iterator', []);

  // Manually create the plugins. Migration::getProcessPlugins does this
  // normally but the plugin system is not available.
  foreach ($configuration['process'] as $destination => $source) {
    $iterator_plugins[$destination][] = new Get([
      'source' => $source,
    ], 'get', []);
  }
  $migration
    ->expects($this
    ->at(1))
    ->method('getProcessPlugins')
    ->will($this
    ->returnValue($iterator_plugins));

  // Set up the key plugins.
  $key_plugin['key'][] = new Get([
    'source' => '@id',
  ], 'get', []);
  $migration
    ->expects($this
    ->at(2))
    ->method('getProcessPlugins')
    ->will($this
    ->returnValue($key_plugin));
  $event_dispatcher = $this
    ->createMock('Symfony\\Component\\EventDispatcher\\EventDispatcherInterface');
  $migrate_executable = new MigrateExecutable($migration, $this
    ->createMock('Drupal\\migrate\\MigrateMessageInterface'), $event_dispatcher);

  // The current value of the pipeline.
  $current_value = [
    [
      'source_foo' => 'test',
      'source_id' => 42,
    ],
  ];

  // This is not used but the interface requires it, so create an empty row.
  $row = new Row();

  // After transformation, check to make sure that source_foo and source_id's
  // values ended up in the proper destinations, and that the value of the
  // key (@id) is the same as the destination ID (42).
  $new_value = $plugin
    ->transform($current_value, $migrate_executable, $row, 'test');
  $this
    ->assertCount(1, $new_value);
  $this
    ->assertCount(2, $new_value[42]);
  $this
    ->assertSame('test', $new_value[42]['foo']);
  $this
    ->assertSame(42, $new_value[42]['id']);
}