You are here

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\SerializeContentField

Code

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