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');
}