View source
<?php
namespace Drupal\Tests\metatag_import_export_csv\Kernel;
use Drupal\KernelTests\Core\Entity\EntityKernelTestBase;
use Drupal\language\Entity\ConfigurableLanguage;
use Drupal\metatag_import_export_csv\MetatagImport;
class MetatagImportTest extends EntityKernelTestBase {
protected static $modules = [
'system',
'user',
'token',
'metatag',
'metatag_import_export_csv',
'language',
'content_translation',
'path',
'path_alias',
'node',
];
protected $entityTypeManager;
protected function setUp() : void {
parent::setUp();
$this->entityTypeManager = $this->container
->get('entity_type.manager');
$this
->installSchema('node', 'node_access');
$this
->installEntitySchema('node');
$this
->installEntitySchema('path_alias');
$this
->installConfig([
'language',
]);
ConfigurableLanguage::createFromLangcode('fr')
->save();
$this->entityTypeManager
->getStorage('user')
->create([
'name' => '',
'uid' => 0,
])
->save();
$node_type_storage = $this->entityTypeManager
->getStorage('node_type');
$type = $node_type_storage
->create([
'type' => 'page',
'name' => 'Page',
]);
$type
->save();
$field_name = 'field_metatags';
$this->entityTypeManager
->getStorage('field_storage_config')
->create([
'field_name' => $field_name,
'entity_type' => 'node',
'type' => 'metatag',
])
->save();
$this->entityTypeManager
->getStorage('field_config')
->create([
'field_name' => $field_name,
'entity_type' => 'node',
'bundle' => 'page',
])
->save();
}
public function testEntityUpdate() {
$node_storage = $this->entityTypeManager
->getStorage('node');
$nodes = [];
$node = $node_storage
->create([
'type' => 'page',
'title' => 'Title 1',
]);
$node
->save();
$nodes[1] = $node;
$node = $node_storage
->create([
'type' => 'page',
'title' => 'Title 2',
'field_metatags' => serialize([
'abstract' => 'old value',
]),
]);
$node
->save();
$nodes[2] = $node;
$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();
$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();
$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 = $node_storage
->create([
'type' => 'page',
'title' => 'Title 6',
'path' => [
'alias' => '/foo',
],
]);
$node
->save();
$nodes[6] = $node;
$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();
$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']);
$metatag_data = unserialize($nodes[3]->field_metatags->value);
$this
->assertEquals('new value three', $metatag_data['abstract']);
$metatag_data = unserialize($nodes[3]
->getTranslation('fr')->field_metatags->value);
$this
->assertEquals('ancienne valeur', $metatag_data['abstract']);
$metatag_data = unserialize($nodes[4]->field_metatags->value);
$this
->assertEquals('old value', $metatag_data['abstract']);
$metatag_data = unserialize($nodes[4]
->getTranslation('fr')->field_metatags->value);
$this
->assertEquals('nouvelle valeur quatre', $metatag_data['abstract']);
$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']);
$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']);
foreach ($nodes as $index => $node) {
$this
->assertEquals("Title {$index}", $node->title->value);
}
}
public function testBadData($headers, $data) {
$node = $this->entityTypeManager
->getStorage('node')
->create([
'type' => 'page',
'title' => 'Title',
]);
$node
->save();
$this
->expectException(\Exception::class);
MetatagImport::importCsvRow($headers, $data);
}
public function providerBadData() {
return [
'missing entity type' => [
[
'entity_type',
'entity_id',
'path_alias',
'field_machine_name',
'abstract',
],
[
'',
1,
'',
'field_metatags',
'tag value',
],
],
'missing entity ID' => [
[
'entity_type',
'entity_id',
'path_alias',
'field_machine_name',
'abstract',
],
[
'node',
'',
'',
'field_metatags',
'tag value',
],
],
'missing any entity details' => [
[
'entity_type',
'entity_id',
'path_alias',
'field_machine_name',
'abstract',
],
[
'',
'',
'',
'field_metatags',
'tag value',
],
],
'bad entity type' => [
[
'entity_type',
'entity_id',
'field_machine_name',
'abstract',
],
[
'cake',
1,
'field_metatags',
'tag value',
],
],
'bad entity id' => [
[
'entity_type',
'entity_id',
'field_machine_name',
'abstract',
],
[
'node',
47,
'field_metatags',
'tag value',
],
],
'bad language' => [
[
'entity_type',
'entity_id',
'language',
'field_machine_name',
'abstract',
],
[
'node',
47,
'klingon',
'field_metatags',
'tag value',
],
],
'missing translation' => [
[
'entity_type',
'entity_id',
'language',
'field_machine_name',
'abstract',
],
[
'node',
47,
'fr',
'field_metatags',
'tag value',
],
],
'bad field' => [
[
'entity_type',
'entity_id',
'language',
'field_machine_name',
'abstract',
],
[
'node',
1,
'',
'bad_field',
'tag value',
],
],
'bad path alias' => [
[
'path_alias',
'field_machine_name',
'abstract',
],
[
'/bad-alias',
'field_metatags',
'tag value',
],
],
];
}
}