public function MigrateEntityContentBaseTest::testTranslated in Drupal 8
Same name and namespace in other branches
- 9 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\KernelCode
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');
}