function EntityRevisionTest::testRevisionTranslation

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. 8.9.x core/modules/migrate/tests/src/Kernel/Plugin/EntityRevisionTest.php \Drupal\Tests\migrate\Kernel\Plugin\EntityRevisionTest::testRevisionTranslation()
  3. 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 51

Class

EntityRevisionTest
Tests the EntityRevision destination plugin.

Namespace

Drupal\Tests\migrate\Kernel\Plugin

Code

public function testRevisionTranslation() : void {
    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());
}

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