public function LinkFieldSerializerTest::testOnSerializeContentFieldMultiLang in Acquia Content Hub 8.2
@covers ::onSerializeContentField
File
- tests/
src/ Kernel/ EventSubscriber/ SerializeContentField/ LinkFieldSerializerTest.php, line 180
Class
- LinkFieldSerializerTest
- Tests Link Field Serialization.
Namespace
Drupal\Tests\acquia_contenthub\Kernel\EventSubscriber\SerializeContentFieldCode
public function testOnSerializeContentFieldMultiLang() : void {
ConfigurableLanguage::create([
'id' => 'hu',
'label' => 'HU',
])
->save();
ConfigurableLanguage::create([
'id' => 'es',
'label' => 'ES',
])
->save();
// Create main node with translations.
$node = $this
->createNode();
$node
->addTranslation('hu', [
'title' => 'Title - HU',
'body' => 'Body - HU',
])
->save();
$node
->addTranslation('es', [
'title' => 'Title - ES',
'body' => 'Body - ES',
])
->save();
// Provide a couple of referable nodes with translations.
$referred_node = $this
->createNode();
$referred_node
->addTranslation('hu', [
'title' => 'Title - HU',
'body' => 'Body - HU',
])
->save();
$translated_node = $referred_node
->getTranslation('hu');
$referred_node_2 = $this
->createNode();
$referred_node_2
->addTranslation('es', [
'title' => 'Title - ES',
'body' => 'Body - ES',
])
->save();
$translated_node_2 = $referred_node_2
->getTranslation('es');
// Add referable nodes to the main node with their translation and
// original language.
$trans_node_hu = $node
->getTranslation('hu');
$trans_node_hu
->get('link')
->appendItem([
'uri' => "entity:node/{$translated_node->id()}",
'title' => $translated_node
->label(),
]);
$trans_node_es = $node
->getTranslation('es');
$trans_node_es
->get('link')
->appendItem([
'uri' => "entity:node/{$translated_node_2->id()}",
'title' => $translated_node_2
->label(),
]);
$node
->get('link')
->appendItem([
'uri' => "entity:node/{$referred_node->id()}",
'title' => $referred_node
->label(),
]);
$node
->get('link')
->appendItem([
'uri' => "entity:node/{$referred_node_2->id()}",
'title' => $referred_node_2
->label(),
]);
$node
->save();
$node_cdf = $this->container
->get('acquia_contenthub_common_actions')
->getLocalCdfDocument($node)
->getCdfEntity($node
->uuid());
$event = new SerializeCdfEntityFieldEvent($node, 'link', $node
->get('link'), $node_cdf);
$this->serializer
->onSerializeContentField($event);
$data = $event
->getFieldData()['value'];
// All translation must be present in the field data.
$this
->assertArraySubsetWrapper([
'en',
'es',
'hu',
], array_keys($data));
$this
->assertCount(2, $data['en']);
$this
->assertCount(1, $data['es']);
$this
->assertCount(1, $data['hu']);
$expected = [
[
'uri' => $referred_node
->uuid(),
],
[
'uri' => $referred_node_2
->uuid(),
],
];
$this
->assertArraySubsetWrapper($expected, $data['en']);
$referred_node_2
->delete();
$event = new SerializeCdfEntityFieldEvent($node, 'link', $node
->get('link'), $node_cdf);
$this->serializer
->onSerializeContentField($event);
$data = $event
->getFieldData()['value'];
$this
->assertArraySubsetWrapper([
'en',
'hu',
], array_keys($data));
$this
->assertCount(1, $data['hu']);
$this
->assertCount(1, $data['en']);
$expected = [
[
'uri' => $referred_node
->uuid(),
],
];
$this
->assertArraySubsetWrapper($expected, $data['en']);
$event = new SerializeCdfEntityFieldEvent($node, 'link2', $node
->get('link2'), $node_cdf);
$this->serializer
->onSerializeContentField($event);
$data = $event
->getFieldData()['value'];
$this
->assertArraySubsetWrapper([
'en',
'es',
'hu',
], array_keys($data));
$this
->assertCount(1, $data['hu']);
$this
->assertCount(1, $data['es']);
$this
->assertCount(1, $data['en']);
$this
->assertNull($data['hu'][0]);
$this
->assertNull($data['es'][0]);
$this
->assertNull($data['en'][0]);
}