Issue #2675156 by maijs, rocketeerbkw, mitrpaka, quietone: Pipeline using explode and extract fails

8.3.x
Alex Pott 2016-10-27 22:36:17 -07:00
parent 36bc91215c
commit 0aed30b60e
2 changed files with 113 additions and 1 deletions

View File

@ -14,7 +14,8 @@ use Drupal\migrate\Row;
* @link https://www.drupal.org/node/2152731 Online handbook documentation for extract process plugin @endlink
*
* @MigrateProcessPlugin(
* id = "extract"
* id = "extract",
* handle_multiples = TRUE
* )
*/
class Extract extends ProcessPluginBase {

View File

@ -0,0 +1,111 @@
<?php
namespace Drupal\Tests\migrate\Kernel\process;
use Drupal\KernelTests\KernelTestBase;
use Drupal\migrate\MigrateExecutable;
use Drupal\migrate\MigrateMessage;
use Drupal\migrate\Plugin\MigrationInterface;
/**
* Tests the extract process plugin.
*
* @group migrate
*/
class ExtractTest extends KernelTestBase {
/**
* {@inheritdoc}
*/
public static $modules = ['migrate'];
/**
* Returns test migration definition.
*
* @return array
*/
public function getDefinition() {
return [
'source' => [
'plugin' => 'embedded_data',
'data_rows' => [],
'ids' => [
'id' => ['type' => 'string'],
],
],
'process' => [
'first' => [
'plugin' => 'extract',
'index' => [0],
'source' => 'simple_array',
],
'second' => [
'plugin' => 'extract',
'index' => [1],
'source' => 'complex_array',
],
],
'destination' => [
'plugin' => 'config',
'config_name' => 'migrate_test.settings',
],
];
}
/**
* Tests multiple value handling.
*
* @dataProvider multipleValueProviderSource
*
* @param array $source_data
* @param array $expected_data
*/
public function testMultipleValueExplode(array $source_data, array $expected_data) {
$definition = $this->getDefinition();
$definition['source']['data_rows'] = [$source_data];
$migration = \Drupal::service('plugin.manager.migration')->createStubMigration($definition);
$executable = new MigrateExecutable($migration, new MigrateMessage());
$result = $executable->import();
// Migration needs to succeed before further assertions are made.
$this->assertSame(MigrationInterface::RESULT_COMPLETED, $result);
// Compare with expected data.
$this->assertEquals($expected_data, \Drupal::config('migrate_test.settings')->get());
}
/**
* Provides multiple source data for "extract" process plugin test.
*/
public function multipleValueProviderSource() {
$tests = [
[
'source_data' => [
'id' => '1',
'simple_array' => ['alpha', 'beta'],
'complex_array' => [['alpha', 'beta'], ['psi', 'omega']],
],
'expected_data' => [
'first' => 'alpha',
'second' => ['psi', 'omega'],
],
],
[
'source_data' => [
'id' => '2',
'simple_array' => ['one'],
'complex_array' => [0, 1],
],
'expected_data' => [
'first' => 'one',
'second' => 1,
],
],
];
return $tests;
}
}