You are here

public function EntityRevisionTest::testRevisionTranslation in Drupal 8

Same name and namespace in other branches
  1. 9 core/modules/migrate/tests/src/Kernel/Plugin/EntityRevisionTest.php \Drupal\Tests\migrate\Kernel\Plugin\EntityRevisionTest::testRevisionTranslation()
  2. 10 core/modules/migrate/tests/src/Kernel/Plugin/EntityRevisionTest.php \Drupal\Tests\migrate\Kernel\Plugin\EntityRevisionTest::testRevisionTranslation()

Tests that EntityRevision correctly handles revision translations.

File

core/modules/migrate/tests/src/Kernel/Plugin/EntityRevisionTest.php, line 47

Class

EntityRevisionTest
Tests the EntityRevision destination plugin.

Namespace

Drupal\Tests\migrate\Kernel\Plugin

Code

public function testRevisionTranslation() {
  ConfigurableLanguage::createFromLangcode('fr')
    ->save();

  /** @var \Drupal\node\NodeInterface $node */
  $node = Node::create([
    'type' => $this
      ->createContentType()
      ->id(),
    'title' => 'Default 1',
  ]);
  $node
    ->addTranslation('fr', [
    'title' => 'French 1',
  ]);
  $node
    ->save();
  $node
    ->setNewRevision();
  $node
    ->setTitle('Default 2');
  $node
    ->getTranslation('fr')
    ->setTitle('French 2');
  $node
    ->save();
  $migration = [
    'source' => [
      'plugin' => 'embedded_data',
      'data_rows' => [
        [
          'nid' => $node
            ->id(),
          'vid' => $node
            ->getRevisionId(),
          'langcode' => 'fr',
          'title' => 'Titre nouveau, tabarnak!',
        ],
      ],
      'ids' => [
        'nid' => [
          'type' => 'integer',
        ],
        'vid' => [
          'type' => 'integer',
        ],
        'langcode' => [
          'type' => 'string',
        ],
      ],
    ],
    'process' => [
      'nid' => 'nid',
      'vid' => 'vid',
      'langcode' => 'langcode',
      'title' => 'title',
    ],
    'destination' => [
      'plugin' => 'entity_revision:node',
      'translations' => TRUE,
    ],
  ];

  /** @var \Drupal\migrate\Plugin\MigrationInterface $migration */
  $migration = $this->container
    ->get('plugin.manager.migration')
    ->createStubMigration($migration);
  $this
    ->executeMigration($migration);

  // The entity_revision destination uses the revision ID and langcode as its
  // keys (the langcode is only used if the destination is configured for
  // translation), so we should be able to look up the source IDs by revision
  // ID and langcode.
  $source_ids = $migration
    ->getIdMap()
    ->lookupSourceID([
    'vid' => $node
      ->getRevisionId(),
    'langcode' => 'fr',
  ]);
  $this
    ->assertNotEmpty($source_ids);
  $this
    ->assertSame($node
    ->id(), $source_ids['nid']);
  $this
    ->assertSame($node
    ->getRevisionId(), $source_ids['vid']);
  $this
    ->assertSame('fr', $source_ids['langcode']);

  // Confirm the french revision was used in the migration, instead of the
  // default revision.

  /** @var \Drupal\Core\Entity\EntityTypeManagerInterface $entity_type_manager */
  $entity_type_manager = \Drupal::entityTypeManager();
  $revision = $entity_type_manager
    ->getStorage('node')
    ->loadRevision(1);
  $this
    ->assertSame('Default 1', $revision
    ->label());
  $this
    ->assertSame('French 1', $revision
    ->getTranslation('fr')
    ->label());
  $revision = $entity_type_manager
    ->getStorage('node')
    ->loadRevision(2);
  $this
    ->assertSame('Default 2', $revision
    ->label());
  $this
    ->assertSame('Titre nouveau, tabarnak!', $revision
    ->getTranslation('fr')
    ->label());
}