public function MenuLinkContentNormalizerTest::testMenuLinkNormalizer in Better Normalizers 8
Tests prepare passengers event.
File
- tests/
src/ Kernel/ MenuLinkContentNormalizerTest.php, line 46
Class
- MenuLinkContentNormalizerTest
- Tests menu link content normalizer.
Namespace
Drupal\Tests\better_normalizers\KernelCode
public function testMenuLinkNormalizer() {
$node_type = NodeType::create([
'type' => 'article',
'name' => 'Article',
]);
$node_type
->save();
$node = Node::create([
'type' => 'article',
'title' => 'Some node',
'status' => 1,
'uid' => 1,
]);
$node
->save();
$parent = MenuLinkContent::create([
'title' => 'A front page menu link',
'link' => [
[
'uri' => 'internal:/',
],
],
'menu_name' => 'tools',
]);
$parent
->save();
$link = MenuLinkContent::create([
'title' => 'A menu link to a node',
'link' => [
[
'uri' => 'entity:node/' . $node
->id(),
],
],
'menu_name' => 'tools',
'parent' => 'menu_link_content:' . $parent
->uuid(),
]);
$link
->save();
$serializer = $this->container
->get('serializer');
$link_manager = $this->container
->get('hal.link_manager');
$mock_field_uri = $link_manager
->getRelationUri('menu_link_content', 'menu_link_content', MenuLinkContentNormalizer::PSUEDO_FIELD_NAME, []);
$parent_field_uri = $link_manager
->getRelationUri('menu_link_content', 'menu_link_content', MenuLinkContentNormalizer::PSUEDO_PARENT_FIELD_NAME, []);
$node_url = $node
->toUrl('canonical', [
'absolute' => TRUE,
])
->setRouteParameter('_format', 'hal_json')
->toString();
$parent_url = $parent
->toUrl('canonical', [
'absolute' => TRUE,
])
->setRouteParameter('_format', 'hal_json')
->toString();
$context['included_fields'] = [
'uuid',
];
$embedded = $serializer
->normalize($node, 'hal_json', $context);
$embedded_parent = $serializer
->normalize($parent, 'hal_json', $context);
$normalized = $serializer
->normalize($link, 'hal_json');
$this
->assertEquals($node
->uuid(), $normalized['link'][0]['target_uuid']);
$this
->assertEquals([
$embedded,
], $normalized['_embedded'][$mock_field_uri]);
$this
->assertEquals([
[
'href' => $node_url,
],
], $normalized['_links'][$mock_field_uri]);
$this
->assertEquals([
$embedded_parent,
], $normalized['_embedded'][$parent_field_uri]);
$this
->assertEquals([
[
'href' => $parent_url,
],
], $normalized['_links'][$parent_field_uri]);
$this
->assertEquals('menu_link_content:' . $parent
->uuid(), $normalized['parent'][0]['value']);
// Now we switch the URI to something else but it should still go back to
// the same node.
$normalized['link'][0]['link'] = 'entity:node/' . ($node
->id() + 1);
$parent_id = $link
->getParentId();
// Delete the menu link in order to create it again and test denormalize().
$link
->delete();
/** @var \Drupal\menu_link_content\MenuLinkContentInterface $denormalized */
$denormalized = $serializer
->denormalize($normalized, MenuLinkContent::class, 'hal_json');
$denormalized
->save();
$denormalized_url = $denormalized
->getUrlObject();
$this
->assertEquals($node
->toUrl()
->getRouteParameters(), $denormalized_url
->getRouteParameters());
$this
->assertEquals($node
->toUrl()
->getRouteName(), $denormalized_url
->getRouteName());
$this
->assertEquals($parent_id, $denormalized
->getParentId());
}