Mercurial > hg > isophonics-drupal-site
comparison core/modules/node/tests/src/Kernel/NodeTokenReplaceTest.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | af1871eacc83 |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\Tests\node\Kernel; | |
4 | |
5 use Drupal\Component\Render\FormattableMarkup; | |
6 use Drupal\Component\Utility\Html; | |
7 use Drupal\Core\Render\BubbleableMetadata; | |
8 use Drupal\node\Entity\Node; | |
9 use Drupal\node\Entity\NodeType; | |
10 use Drupal\Tests\system\Kernel\Token\TokenReplaceKernelTestBase; | |
11 | |
12 /** | |
13 * Generates text using placeholders for dummy content to check node token | |
14 * replacement. | |
15 * | |
16 * @group node | |
17 */ | |
18 class NodeTokenReplaceTest extends TokenReplaceKernelTestBase { | |
19 | |
20 /** | |
21 * Modules to enable. | |
22 * | |
23 * @var array | |
24 */ | |
25 public static $modules = ['node', 'filter']; | |
26 | |
27 /** | |
28 * {@inheritdoc} | |
29 */ | |
30 protected function setUp() { | |
31 parent::setUp(); | |
32 $this->installConfig(['filter', 'node']); | |
33 | |
34 $node_type = NodeType::create(['type' => 'article', 'name' => 'Article']); | |
35 $node_type->save(); | |
36 node_add_body_field($node_type); | |
37 } | |
38 | |
39 /** | |
40 * Creates a node, then tests the tokens generated from it. | |
41 */ | |
42 public function testNodeTokenReplacement() { | |
43 $url_options = [ | |
44 'absolute' => TRUE, | |
45 'language' => $this->interfaceLanguage, | |
46 ]; | |
47 | |
48 // Create a user and a node. | |
49 $account = $this->createUser(); | |
50 /* @var $node \Drupal\node\NodeInterface */ | |
51 $node = Node::create([ | |
52 'type' => 'article', | |
53 'tnid' => 0, | |
54 'uid' => $account->id(), | |
55 'title' => '<blink>Blinking Text</blink>', | |
56 'body' => [['value' => 'Regular NODE body for the test.', 'summary' => 'Fancy NODE summary.', 'format' => 'plain_text']], | |
57 ]); | |
58 $node->save(); | |
59 | |
60 // Generate and test tokens. | |
61 $tests = []; | |
62 $tests['[node:nid]'] = $node->id(); | |
63 $tests['[node:vid]'] = $node->getRevisionId(); | |
64 $tests['[node:type]'] = 'article'; | |
65 $tests['[node:type-name]'] = 'Article'; | |
66 $tests['[node:title]'] = Html::escape($node->getTitle()); | |
67 $tests['[node:body]'] = $node->body->processed; | |
68 $tests['[node:summary]'] = $node->body->summary_processed; | |
69 $tests['[node:langcode]'] = $node->language()->getId(); | |
70 $tests['[node:url]'] = $node->url('canonical', $url_options); | |
71 $tests['[node:edit-url]'] = $node->url('edit-form', $url_options); | |
72 $tests['[node:author]'] = $account->getUsername(); | |
73 $tests['[node:author:uid]'] = $node->getOwnerId(); | |
74 $tests['[node:author:name]'] = $account->getUsername(); | |
75 $tests['[node:created:since]'] = \Drupal::service('date.formatter')->formatTimeDiffSince($node->getCreatedTime(), ['langcode' => $this->interfaceLanguage->getId()]); | |
76 $tests['[node:changed:since]'] = \Drupal::service('date.formatter')->formatTimeDiffSince($node->getChangedTime(), ['langcode' => $this->interfaceLanguage->getId()]); | |
77 | |
78 $base_bubbleable_metadata = BubbleableMetadata::createFromObject($node); | |
79 | |
80 $metadata_tests = []; | |
81 $metadata_tests['[node:nid]'] = $base_bubbleable_metadata; | |
82 $metadata_tests['[node:vid]'] = $base_bubbleable_metadata; | |
83 $metadata_tests['[node:type]'] = $base_bubbleable_metadata; | |
84 $metadata_tests['[node:type-name]'] = $base_bubbleable_metadata; | |
85 $metadata_tests['[node:title]'] = $base_bubbleable_metadata; | |
86 $metadata_tests['[node:body]'] = $base_bubbleable_metadata; | |
87 $metadata_tests['[node:summary]'] = $base_bubbleable_metadata; | |
88 $metadata_tests['[node:langcode]'] = $base_bubbleable_metadata; | |
89 $metadata_tests['[node:url]'] = $base_bubbleable_metadata; | |
90 $metadata_tests['[node:edit-url]'] = $base_bubbleable_metadata; | |
91 $bubbleable_metadata = clone $base_bubbleable_metadata; | |
92 $metadata_tests['[node:author]'] = $bubbleable_metadata->addCacheTags(['user:1']); | |
93 $metadata_tests['[node:author:uid]'] = $bubbleable_metadata; | |
94 $metadata_tests['[node:author:name]'] = $bubbleable_metadata; | |
95 $bubbleable_metadata = clone $base_bubbleable_metadata; | |
96 $metadata_tests['[node:created:since]'] = $bubbleable_metadata->setCacheMaxAge(0); | |
97 $metadata_tests['[node:changed:since]'] = $bubbleable_metadata; | |
98 | |
99 // Test to make sure that we generated something for each token. | |
100 $this->assertFalse(in_array(0, array_map('strlen', $tests)), 'No empty tokens generated.'); | |
101 | |
102 foreach ($tests as $input => $expected) { | |
103 $bubbleable_metadata = new BubbleableMetadata(); | |
104 $output = $this->tokenService->replace($input, ['node' => $node], ['langcode' => $this->interfaceLanguage->getId()], $bubbleable_metadata); | |
105 $this->assertEqual($output, $expected, format_string('Node token %token replaced.', ['%token' => $input])); | |
106 $this->assertEqual($bubbleable_metadata, $metadata_tests[$input]); | |
107 } | |
108 | |
109 // Repeat for a node without a summary. | |
110 $node = Node::create([ | |
111 'type' => 'article', | |
112 'uid' => $account->id(), | |
113 'title' => '<blink>Blinking Text</blink>', | |
114 'body' => [['value' => 'A string that looks random like TR5c2I', 'format' => 'plain_text']], | |
115 ]); | |
116 $node->save(); | |
117 | |
118 // Generate and test token - use full body as expected value. | |
119 $tests = []; | |
120 $tests['[node:summary]'] = $node->body->processed; | |
121 | |
122 // Test to make sure that we generated something for each token. | |
123 $this->assertFalse(in_array(0, array_map('strlen', $tests)), 'No empty tokens generated for node without a summary.'); | |
124 | |
125 foreach ($tests as $input => $expected) { | |
126 $output = $this->tokenService->replace($input, ['node' => $node], ['language' => $this->interfaceLanguage]); | |
127 $this->assertEqual($output, $expected, new FormattableMarkup('Node token %token replaced for node without a summary.', ['%token' => $input])); | |
128 } | |
129 } | |
130 | |
131 } |