3 namespace Drupal\Tests\hal\Kernel;
5 use Drupal\node\Entity\Node;
6 use Drupal\node\NodeInterface;
7 use Drupal\user\Entity\User;
8 use Drupal\node\Entity\NodeType;
11 * Tests that translated nodes are correctly (de-)normalized.
15 class EntityTranslationNormalizeTest extends NormalizerTestBase {
22 public static $modules = ['node', 'content_translation'];
27 protected function setUp() {
29 $this->installSchema('system', ['sequences']);
30 $this->installConfig(['node', 'content_translation']);
34 * Tests the normalization of node translations.
36 public function testNodeTranslation() {
37 $node_type = NodeType::create(['type' => 'example_type']);
39 $this->container->get('content_translation.manager')->setEnabled('node', 'example_type', TRUE);
41 $user = User::create(['name' => $this->randomMachineName()]);
44 $node = Node::create([
45 'title' => $this->randomMachineName(),
46 'uid' => (int) $user->id(),
47 'type' => $node_type->id(),
48 'status' => NodeInterface::PUBLISHED,
53 'value' => $this->randomMachineName(),
54 'format' => $this->randomMachineName()
56 'revision_log' => $this->randomString(),
58 $node->addTranslation('de', [
59 'title' => 'German title',
61 'value' => $this->randomMachineName(),
62 'format' => $this->randomMachineName()
67 $original_values = $node->toArray();
68 $translation = $node->getTranslation('de');
69 $original_translation_values = $node->getTranslation('en')->toArray();
71 $normalized = $this->serializer->normalize($node, $this->format);
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.');
76 /** @var \Drupal\node\NodeInterface $denormalized_node */
77 $denormalized_node = $this->serializer->denormalize($normalized, 'Drupal\node\Entity\Node', $this->format);
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'));
83 $this->assertSame($node->getTitle(), $denormalized_node->getTitle());
84 $this->assertSame($translation->getTitle(), $denormalized_node->getTranslation('de')->getTitle());
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.');