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. 8.9.x 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()

Tests importing and rolling back translated entities.

File

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

Class

MigrateEntityContentBaseTest
Tests the EntityContentBase destination.

Namespace

Drupal\Tests\migrate\Kernel

Code

public function testTranslated() : void {
  // 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.