default_content-2.0.x-dev/tests/src/Kernel/MenuLinkContentNormalizerTest.php
tests/src/Kernel/MenuLinkContentNormalizerTest.php
<?php namespace Drupal\Tests\default_content\Kernel; use Drupal\menu_link_content\Entity\MenuLinkContent; use Drupal\node\Entity\Node; use Drupal\node\Entity\NodeType; use Drupal\Tests\field\Traits\EntityReferenceFieldCreationTrait; use Drupal\KernelTests\KernelTestBase; // Workaround to support tests against both Drupal 10.1 and Drupal 11.0. // @todo Remove once we depend on Drupal 10.2. if (!trait_exists(EntityReferenceFieldCreationTrait::class)) { class_alias('\Drupal\Tests\field\Traits\EntityReferenceTestTrait', EntityReferenceFieldCreationTrait::class); } /** * Tests export functionality. * * @coversDefaultClass \Drupal\default_content\Normalizer\ContentEntityNormalizer * @group default_content */ class MenuLinkContentNormalizerTest extends KernelTestBase { use EntityReferenceFieldCreationTrait; /** * {@inheritdoc} */ protected static $modules = [ 'system', 'user', 'field', 'serialization', 'default_content', 'link', 'menu_link_content', 'node', ]; /** * The tested default content exporter. * * @var \Drupal\default_content\Exporter */ protected $exporter; /** * {@inheritdoc} */ protected function setUp(): void { parent::setUp(); $this->installSchema('system', ['sequences']); $this->installSchema('node', ['node_access']); $this->installEntitySchema('user'); $this->installEntitySchema('node'); $this->installEntitySchema('menu_link_content'); // Create a node type with a paragraphs field. NodeType::create([ 'type' => 'page', 'name' => 'page', ])->save(); } /** * Tests menu_link_content entities. */ public function testMenuLinks() { /** @var \Drupal\node\NodeInterface $referenced_node */ $referenced_node = Node::create([ 'type' => 'page', 'title' => 'Referenced node', ]); $referenced_node->save(); /** @var \Drupal\menu_link_content\MenuLinkContentInterface $link */ $link = MenuLinkContent::create([ 'title' => 'Parent menu link', 'link' => 'entity:node/' . $referenced_node->id(), ]); $link->save(); /** @var \Drupal\menu_link_content\MenuLinkContentInterface $child_link */ $child_link = MenuLinkContent::create([ 'title' => 'Child menu link', 'parent' => 'menu_link_content:' . $link->uuid(), 'link' => [ 'uri' => 'https://www.example.org', 'options' => [ 'attributes' => [ 'target' => '_blank', ], ], ], ]); $child_link->save(); /** @var \Drupal\default_content\Normalizer\ContentEntityNormalizerInterface $normalizer */ $normalizer = \Drupal::service('default_content.content_entity_normalizer'); $normalized = $normalizer->normalize($link); $expected = [ '_meta' => [ 'version' => '1.0', 'entity_type' => 'menu_link_content', 'uuid' => $link->uuid(), 'bundle' => 'menu_link_content', 'default_langcode' => 'en', 'depends' => [ $referenced_node->uuid() => 'node', ], ], 'default' => [ 'enabled' => [ 0 => [ 'value' => TRUE, ], ], 'title' => [ 0 => [ 'value' => 'Parent menu link', ], ], 'menu_name' => [ 0 => [ 'value' => 'tools', ], ], 'link' => [ 0 => [ 'target_uuid' => $referenced_node->uuid(), 'title' => '', 'options' => [], ], ], 'external' => [ 0 => [ 'value' => FALSE, ], ], 'rediscover' => [ 0 => [ 'value' => FALSE, ], ], 'weight' => [ 0 => [ 'value' => 0, ], ], 'expanded' => [ 0 => [ 'value' => FALSE, ], ], 'revision_translation_affected' => [ 0 => [ 'value' => TRUE, ], ], ], ]; $this->assertEquals($expected, $normalized); $normalized_child = $normalizer->normalize($child_link); $expected_child = [ '_meta' => [ 'version' => '1.0', 'entity_type' => 'menu_link_content', 'uuid' => $child_link->uuid(), 'bundle' => 'menu_link_content', 'default_langcode' => 'en', 'depends' => [ $link->uuid() => 'menu_link_content', ], ], 'default' => [ 'enabled' => [ 0 => [ 'value' => TRUE, ], ], 'title' => [ 0 => [ 'value' => 'Child menu link', ], ], 'menu_name' => [ 0 => [ 'value' => 'tools', ], ], 'link' => [ 0 => [ 'uri' => 'https://www.example.org', 'title' => '', 'options' => [ 'attributes' => [ 'target' => '_blank', ], ], ], ], 'external' => [ 0 => [ 'value' => FALSE, ], ], 'rediscover' => [ 0 => [ 'value' => FALSE, ], ], 'weight' => [ 0 => [ 'value' => 0, ], ], 'expanded' => [ 0 => [ 'value' => FALSE, ], ], 'parent' => [ 0 => [ 'value' => $child_link->getParentId(), ], ], 'revision_translation_affected' => [ 0 => [ 'value' => TRUE, ], ], ], ]; $this->assertEquals($expected_child, $normalized_child); // Delete the link and referenced node and recreate them. $normalized_node = $normalizer->normalize($referenced_node); $child_link->delete(); $link->delete(); $referenced_node->delete(); $recreated_node = $normalizer->denormalize($normalized_node); $recreated_node->save(); $this->assertNotEquals($referenced_node->id(), $recreated_node->id()); $recreated_link = $normalizer->denormalize($normalized); $recreated_link->save(); $this->assertEquals('entity:node/' . $recreated_node->id(), $recreated_link->get('link')->uri); } }