public function MetatagImportTest::testEntityUpdate in Metatag Import Export CSV 8
Test entities are updated from the CSV data.
File
- tests/
src/ Kernel/ MetatagImportTest.php, line 89
Class
- MetatagImportTest
- Tests importing CSV data.
Namespace
Drupal\Tests\metatag_import_export_csv\KernelCode
public function testEntityUpdate() {
$node_storage = $this->entityTypeManager
->getStorage('node');
$nodes = [];
// Simple node.
$node = $node_storage
->create([
'type' => 'page',
'title' => 'Title 1',
]);
$node
->save();
$nodes[1] = $node;
// Node with an existing value.
$node = $node_storage
->create([
'type' => 'page',
'title' => 'Title 2',
'field_metatags' => serialize([
'abstract' => 'old value',
]),
]);
$node
->save();
$nodes[2] = $node;
// Translated node, only changing the original language.
$node = $node_storage
->create([
'type' => 'page',
'title' => 'Title 3',
'field_metatags' => serialize([
'abstract' => 'old value',
]),
]);
$node
->save();
$nodes[3] = $node;
$translation = $node
->addTranslation('fr', $node
->toArray());
$translation->field_metatags = serialize([
'abstract' => 'ancienne valeur',
]);
$translation
->save();
// Translated node, changing only the translation.
$node = $node_storage
->create([
'type' => 'page',
'title' => 'Title 4',
'field_metatags' => serialize([
'abstract' => 'old value',
]),
]);
$node
->save();
$nodes[4] = $node;
$translation = $node
->addTranslation('fr', $node
->toArray());
$translation->field_metatags = serialize([
'abstract' => 'ancienne valeur',
]);
$translation
->save();
// Translated node, changing both languages.
$node = $node_storage
->create([
'type' => 'page',
'title' => 'Title 5',
'field_metatags' => serialize([
'abstract' => 'old value',
]),
]);
$node
->save();
$nodes[5] = $node;
$translation = $node
->addTranslation('fr', $node
->toArray());
$translation->field_metatags = serialize([
'abstract' => 'ancienne valeur',
]);
$translation
->save();
// Node with a path alias.
$node = $node_storage
->create([
'type' => 'page',
'title' => 'Title 6',
'path' => [
'alias' => '/foo',
],
]);
$node
->save();
$nodes[6] = $node;
// Node with translated path alias.
$node = $node_storage
->create([
'type' => 'page',
'title' => 'Title 7',
'path' => [
'alias' => '/bar',
],
]);
$node
->save();
$nodes[7] = $node;
$translation = $node
->addTranslation('fr', $node
->toArray());
$translation->path->alias = '/toto';
$translation
->save();
// CSV data to import.
$headers = [
'entity_type',
'entity_id',
'path_alias',
'language',
'field_machine_name',
'abstract',
];
$data = [
[
'node',
$nodes[1]
->id(),
'',
'',
'field_metatags',
'new value one',
],
[
'node',
$nodes[2]
->id(),
'',
'',
'field_metatags',
'new value two',
],
[
'node',
$nodes[3]
->id(),
'',
'',
'field_metatags',
'new value three',
],
[
'node',
$nodes[4]
->id(),
'',
'fr',
'field_metatags',
'nouvelle valeur quatre',
],
[
'node',
$nodes[5]
->id(),
'',
'en',
'field_metatags',
'new value five',
],
[
'node',
$nodes[5]
->id(),
'',
'fr',
'field_metatags',
'nouvelle valeur cinq',
],
[
'',
'',
'/foo',
'',
'field_metatags',
'new value six',
],
[
'',
'',
'/bar',
'en',
'field_metatags',
'new value seven',
],
[
'',
'',
'/toto',
'fr',
'field_metatags',
'nouvelle valeur sept',
],
];
foreach ($data as $row) {
MetatagImport::importCsvRow($headers, $row);
}
foreach ($nodes as $index => $node) {
$nodes[$index] = $this
->reloadEntity($node);
}
$metatag_data = unserialize($nodes[1]->field_metatags->value);
$this
->assertEquals('new value one', $metatag_data['abstract']);
$metatag_data = unserialize($nodes[2]->field_metatags->value);
$this
->assertEquals('new value two', $metatag_data['abstract']);
// Original is affected.
$metatag_data = unserialize($nodes[3]->field_metatags->value);
$this
->assertEquals('new value three', $metatag_data['abstract']);
// Translation is not affected.
$metatag_data = unserialize($nodes[3]
->getTranslation('fr')->field_metatags->value);
$this
->assertEquals('ancienne valeur', $metatag_data['abstract']);
// Original is not affected.
$metatag_data = unserialize($nodes[4]->field_metatags->value);
$this
->assertEquals('old value', $metatag_data['abstract']);
// Translation is updated.
$metatag_data = unserialize($nodes[4]
->getTranslation('fr')->field_metatags->value);
$this
->assertEquals('nouvelle valeur quatre', $metatag_data['abstract']);
// Both translations are updated.
$metatag_data = unserialize($nodes[5]->field_metatags->value);
$this
->assertEquals('new value five', $metatag_data['abstract']);
$metatag_data = unserialize($nodes[5]
->getTranslation('fr')->field_metatags->value);
$this
->assertEquals('nouvelle valeur cinq', $metatag_data['abstract']);
$metatag_data = unserialize($nodes[6]->field_metatags->value);
$this
->assertEquals('new value six', $metatag_data['abstract']);
// Both translations are updated.
$metatag_data = unserialize($nodes[7]->field_metatags->value);
$this
->assertEquals('new value seven', $metatag_data['abstract']);
$metatag_data = unserialize($nodes[7]
->getTranslation('fr')->field_metatags->value);
$this
->assertEquals('nouvelle valeur sept', $metatag_data['abstract']);
// Check other field values are not changed.
foreach ($nodes as $index => $node) {
$this
->assertEquals("Title {$index}", $node->title->value);
}
}