function MigrateEntityContentBaseTest::testTranslated

Same name and namespace in other branches
  1. 9 core/modules/migrate/tests/src/Kernel/MigrateEntityContentBaseTest.php \Drupal\Tests\migrate\Kernel\MigrateEntityContentBaseTest::testTranslated()
  2. 10 core/modules/migrate/tests/src/Kernel/MigrateEntityContentBaseTest.php \Drupal\Tests\migrate\Kernel\MigrateEntityContentBaseTest::testTranslated()
  3. 11.x core/modules/migrate/tests/src/Kernel/MigrateEntityContentBaseTest.php \Drupal\Tests\migrate\Kernel\MigrateEntityContentBaseTest::testTranslated()

Test importing and rolling back translated entities.

File

core/modules/migrate/tests/src/Kernel/MigrateEntityContentBaseTest.php, line 103

Class

MigrateEntityContentBaseTest
Tests the EntityContentBase destination.

Namespace

Drupal\Tests\migrate\Kernel

Code

public function testTranslated() {
    // Create a destination.
    $this->createDestination([
        'translations' => TRUE,
    ]);
    // Create some pre-existing entities.
    $this->storage
        ->create([
        'id' => 1,
        'langcode' => 'en',
    ])
        ->save();
    $this->storage
        ->create([
        'id' => 2,
        'langcode' => 'fr',
    ])
        ->save();
    $translated = $this->storage
        ->create([
        'id' => 3,
        'langcode' => 'en',
    ]);
    $translated->save();
    $translated->addTranslation('fr')
        ->save();
    // Pre-assert that things are as expected.
    $this->assertTranslations(1, 'en');
    $this->assertTranslations(2, 'fr');
    $this->assertTranslations(3, 'en', [
        'fr',
    ]);
    $this->assertNull($this->storage
        ->load(4));
    $destination_rows = [
        // Existing default translation.
[
            'id' => 1,
            'langcode' => 'en',
            'action' => MigrateIdMapInterface::ROLLBACK_PRESERVE,
        ],
        // New translation.
[
            'id' => 2,
            'langcode' => 'en',
            'action' => MigrateIdMapInterface::ROLLBACK_DELETE,
        ],
        // Existing non-default translation.
[
            'id' => 3,
            'langcode' => 'fr',
            'action' => MigrateIdMapInterface::ROLLBACK_PRESERVE,
        ],
        // Brand new row.
[
            'id' => 4,
            'langcode' => 'fr',
            'action' => MigrateIdMapInterface::ROLLBACK_DELETE,
        ],
    ];
    $rollback_actions = [];
    // Import some rows.
    foreach ($destination_rows as $idx => $destination_row) {
        $row = new Row();
        foreach ($destination_row as $key => $value) {
            $row->setDestinationProperty($key, $value);
        }
        $this->destination
            ->import($row);
        // Check that the rollback action is correct, and save it.
        $this->assertEquals($destination_row['action'], $this->destination
            ->rollbackAction());
        $rollback_actions[$idx] = $this->destination
            ->rollbackAction();
    }
    $this->assertTranslations(1, 'en');
    $this->assertTranslations(2, 'fr', [
        'en',
    ]);
    $this->assertTranslations(3, 'en', [
        'fr',
    ]);
    $this->assertTranslations(4, 'fr');
    // Rollback the rows.
    foreach ($destination_rows as $idx => $destination_row) {
        if ($rollback_actions[$idx] == MigrateIdMapInterface::ROLLBACK_DELETE) {
            $this->destination
                ->rollback($destination_row);
        }
    }
    // No change, update of existing translation.
    $this->assertTranslations(1, 'en');
    // Remove added translation.
    $this->assertTranslations(2, 'fr');
    // No change, update of existing translation.
    $this->assertTranslations(3, 'en', [
        'fr',
    ]);
    // No change, can't remove default translation.
    $this->assertTranslations(4, 'fr');
}

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