3e27ef637bb45713286c82d77e0687945e00f00b
[yaffs-website] / web / core / modules / hal / tests / src / Kernel / EntityTranslationNormalizeTest.php
1 <?php
2
3 namespace Drupal\Tests\hal\Kernel;
4
5 use Drupal\node\Entity\Node;
6 use Drupal\node\NodeInterface;
7 use Drupal\user\Entity\User;
8 use Drupal\node\Entity\NodeType;
9
10 /**
11  * Tests that translated nodes are correctly (de-)normalized.
12  *
13  * @group hal
14  */
15 class EntityTranslationNormalizeTest extends NormalizerTestBase {
16
17   /**
18    * Modules to enable.
19    *
20    * @var array
21    */
22   public static $modules = ['node', 'content_translation'];
23
24   /**
25    * {@inheritdoc}
26    */
27   protected function setUp() {
28     parent::setUp();
29     $this->installSchema('system', ['sequences']);
30     $this->installConfig(['node', 'content_translation']);
31   }
32
33   /**
34    * Tests the normalization of node translations.
35    */
36   public function testNodeTranslation() {
37     $node_type = NodeType::create(['type' => 'example_type']);
38     $node_type->save();
39     $this->container->get('content_translation.manager')->setEnabled('node', 'example_type', TRUE);
40
41     $user = User::create(['name' => $this->randomMachineName()]);
42     $user->save();
43
44     $node = Node::create([
45       'title' => $this->randomMachineName(),
46       'uid' => (int) $user->id(),
47       'type' => $node_type->id(),
48       'status' => NodeInterface::PUBLISHED,
49       'langcode' => 'en',
50       'promote' => 1,
51       'sticky' => 0,
52       'body' => [
53         'value' => $this->randomMachineName(),
54         'format' => $this->randomMachineName()
55       ],
56       'revision_log' => $this->randomString(),
57     ]);
58     $node->addTranslation('de', [
59       'title' => 'German title',
60       'body' => [
61         'value' => $this->randomMachineName(),
62         'format' => $this->randomMachineName()
63       ],
64     ]);
65     $node->save();
66
67     $original_values = $node->toArray();
68     $translation = $node->getTranslation('de');
69     $original_translation_values = $node->getTranslation('en')->toArray();
70
71     $normalized = $this->serializer->normalize($node, $this->format);
72
73     $this->assertContains(['lang' => 'en', 'value' => $node->getTitle()], $normalized['title'], 'Original language title has been normalized.');
74     $this->assertContains(['lang' => 'de', 'value' => $translation->getTitle()], $normalized['title'], 'Translation language title has been normalized.');
75
76     /** @var \Drupal\node\NodeInterface $denormalized_node */
77     $denormalized_node = $this->serializer->denormalize($normalized, 'Drupal\node\Entity\Node', $this->format);
78
79     $this->assertSame($denormalized_node->language()->getId(), $denormalized_node->getUntranslated()->language()->getId(), 'Untranslated object is returned from serializer.');
80     $this->assertSame('en', $denormalized_node->language()->getId());
81     $this->assertTrue($denormalized_node->hasTranslation('de'));
82
83     $this->assertSame($node->getTitle(), $denormalized_node->getTitle());
84     $this->assertSame($translation->getTitle(), $denormalized_node->getTranslation('de')->getTitle());
85
86     $original_values['revision_default'] = [];
87     $original_translation_values['revision_default'] = [];
88     $this->assertEquals($original_values, $denormalized_node->toArray(), 'Node values are restored after normalizing and denormalizing.');
89     $this->assertEquals($original_translation_values, $denormalized_node->getTranslation('en')->toArray(), 'Node values are restored after normalizing and denormalizing.');
90   }
91
92 }