class MigrateLookupTest

Same name in this branch
  1. 9 core/modules/migrate/tests/src/Unit/MigrateLookupTest.php \Drupal\Tests\migrate\Unit\MigrateLookupTest
Same name and namespace in other branches
  1. 11.x core/modules/migrate/tests/src/Unit/MigrateLookupTest.php \Drupal\Tests\migrate\Unit\MigrateLookupTest
  2. 11.x core/modules/migrate/tests/src/Kernel/MigrateLookupTest.php \Drupal\Tests\migrate\Kernel\MigrateLookupTest

Tests the Migrate Lookup service.

@group migrate

Hierarchy

Expanded class hierarchy of MigrateLookupTest

File

core/modules/migrate/tests/src/Kernel/MigrateLookupTest.php, line 13

Namespace

Drupal\Tests\migrate\Kernel
View source
class MigrateLookupTest extends MigrateTestBase {
  use ContentTypeCreationTrait;
  
  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'system',
    'node',
    'field',
    'user',
    'text',
    'migrate_lookup_test',
  ];
  
  /**
   * The migration lookup service.
   *
   * @var \Drupal\migrate\MigrateLookupInterface
   */
  protected $migrateLookup;
  
  /**
   * {@inheritdoc}
   */
  public function setUp() : void {
    parent::setUp();
    $this->setTestLogger();
    $this->migrateLookup = $this->container
      ->get('migrate.lookup');
    $this->installEntitySchema('node');
    $this->installEntitySchema('user');
    $this->installConfig([
      'node',
      'user',
    ]);
    $this->createContentType([
      'type' => 'node_lookup',
    ]);
  }
  
  /**
   * Tests scenarios around single id lookups.
   */
  public function testSingleLookup() {
    $this->executeMigration('sample_lookup_migration');
    // Test numerically indexed source id.
    $result = $this->migrateLookup
      ->lookup('sample_lookup_migration', [
      17,
    ]);
    $this->assertSame('1', $result[0]['nid']);
    // Test associatively indexed source id.
    $result = $this->migrateLookup
      ->lookup('sample_lookup_migration', [
      'id' => 25,
    ]);
    $this->assertSame('2', $result[0]['nid']);
    // Test lookup not found.
    $result = $this->migrateLookup
      ->lookup('sample_lookup_migration', [
      1337,
    ]);
    $this->assertSame([], $result);
  }
  
  /**
   * Tests an invalid lookup.
   */
  public function testInvalidIdLookup() {
    $this->executeMigration('sample_lookup_migration');
    $this->expectException(MigrateException::class);
    $this->expectExceptionMessage("Extra unknown items for map migrate_map_sample_lookup_migration in source IDs: array (\n  'invalid_id' => 25,\n)");
    // Test invalidly indexed source id.
    $this->migrateLookup
      ->lookup('sample_lookup_migration', [
      'invalid_id' => 25,
    ]);
  }
  
  /**
   * Tests lookups with multiple source ids.
   */
  public function testMultipleSourceIds() {
    $this->executeMigration('sample_lookup_migration_multiple_source_ids');
    // Test with full set of numerically indexed source ids.
    $result = $this->migrateLookup
      ->lookup('sample_lookup_migration_multiple_source_ids', [
      25,
      26,
    ]);
    $this->assertCount(1, $result);
    $this->assertSame('3', $result[0]['nid']);
    // Test with full set of associatively indexed source ids.
    $result = $this->migrateLookup
      ->lookup('sample_lookup_migration_multiple_source_ids', [
      'id' => 17,
      'version_id' => 17,
    ]);
    $this->assertCount(1, $result);
    $this->assertSame('1', $result[0]['nid']);
    // Test with full set of associatively indexed source ids in the wrong
    // order.
    $result = $this->migrateLookup
      ->lookup('sample_lookup_migration_multiple_source_ids', [
      'version_id' => 26,
      'id' => 25,
    ]);
    $this->assertCount(1, $result);
    $this->assertSame('3', $result[0]['nid']);
    // Test with a partial set of numerically indexed ids.
    $result = $this->migrateLookup
      ->lookup('sample_lookup_migration_multiple_source_ids', [
      25,
    ]);
    $this->assertCount(2, $result);
    $this->assertSame('2', $result[0]['nid']);
    $this->assertSame('3', $result[1]['nid']);
    // Test with a partial set of associatively indexed ids.
    $result = $this->migrateLookup
      ->lookup('sample_lookup_migration_multiple_source_ids', [
      'version_id' => 25,
    ]);
    $this->assertCount(1, $result);
    $this->assertSame('2', $result[0]['nid']);
  }
  
  /**
   * Tests looking up against multiple migrations at once.
   *
   * @throws \Drupal\Component\Plugin\Exception\PluginException
   * @throws \Drupal\migrate\MigrateException
   */
  public function testMultipleMigrationLookup() {
    $migrations = [
      'sample_lookup_migration',
      'sample_lookup_migration_2',
    ];
    foreach ($migrations as $migration) {
      $this->executeMigration($migration);
    }
    // Test numerically indexed source id.
    $result = $this->migrateLookup
      ->lookup($migrations, [
      17,
    ]);
    $this->assertSame('1', $result[0]['nid']);
    // Test associatively indexed source id.
    $result = $this->migrateLookup
      ->lookup($migrations, [
      'id' => 35,
    ]);
    $this->assertSame('4', $result[0]['nid']);
    // Test lookup not found.
    $result = $this->migrateLookup
      ->lookup($migrations, [
      1337,
    ]);
    $this->assertSame([], $result);
  }
  
  /**
   * Tests a lookup with string source ids.
   */
  public function testLookupWithStringIds() {
    $this->executeMigration('sample_lookup_migration_string_ids');
    // Test numerically indexed source id.
    $result = $this->migrateLookup
      ->lookup('sample_lookup_migration_string_ids', [
      'node1',
    ]);
    $this->assertSame('10', $result[0]['nid']);
    // Test associatively indexed source id.
    $result = $this->migrateLookup
      ->lookup('sample_lookup_migration_string_ids', [
      'id' => 'node2',
    ]);
    $this->assertSame('11', $result[0]['nid']);
    // Test lookup not found.
    $result = $this->migrateLookup
      ->lookup('sample_lookup_migration_string_ids', [
      'node1337',
    ]);
    $this->assertSame([], $result);
  }

}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.