Chris@0
|
1 <?php
|
Chris@0
|
2
|
Chris@0
|
3 namespace Drupal\Tests\views\Kernel;
|
Chris@0
|
4
|
Chris@0
|
5 use Drupal\Core\Render\BubbleableMetadata;
|
Chris@0
|
6 use Drupal\views\Views;
|
Chris@0
|
7
|
Chris@0
|
8 /**
|
Chris@0
|
9 * Tests core view token replacement.
|
Chris@0
|
10 *
|
Chris@0
|
11 * @group views
|
Chris@0
|
12 */
|
Chris@0
|
13 class TokenReplaceTest extends ViewsKernelTestBase {
|
Chris@0
|
14
|
Chris@0
|
15 public static $modules = ['system'];
|
Chris@0
|
16
|
Chris@0
|
17 /**
|
Chris@0
|
18 * Views used by this test.
|
Chris@0
|
19 *
|
Chris@0
|
20 * @var array
|
Chris@0
|
21 */
|
Chris@0
|
22 public static $testViews = ['test_tokens', 'test_invalid_tokens'];
|
Chris@0
|
23
|
Chris@0
|
24 protected function setUp($import_test_views = TRUE) {
|
Chris@0
|
25 parent::setUp();
|
Chris@0
|
26 $this->container->get('router.builder')->rebuild();
|
Chris@0
|
27 }
|
Chris@0
|
28
|
Chris@0
|
29 /**
|
Chris@0
|
30 * Tests core token replacements generated from a view.
|
Chris@0
|
31 */
|
Chris@0
|
32 public function testTokenReplacement() {
|
Chris@0
|
33 $token_handler = \Drupal::token();
|
Chris@0
|
34 $view = Views::getView('test_tokens');
|
Chris@0
|
35 $view->setDisplay('page_1');
|
Chris@0
|
36 // Force the view to span more than one page to better test page_count.
|
Chris@0
|
37 $view->display_handler->getPlugin('pager')->setItemsPerPage(4);
|
Chris@0
|
38 $this->executeView($view);
|
Chris@0
|
39
|
Chris@0
|
40 $expected = [
|
Chris@0
|
41 '[view:label]' => 'Test tokens',
|
Chris@0
|
42 '[view:description]' => 'Test view to token replacement tests.',
|
Chris@0
|
43 '[view:id]' => 'test_tokens',
|
Chris@0
|
44 '[view:title]' => 'Test token page',
|
Chris@0
|
45 '[view:url]' => $view->getUrl(NULL, 'page_1')->setAbsolute(TRUE)->toString(),
|
Chris@0
|
46 '[view:total-rows]' => '5',
|
Chris@0
|
47 '[view:base-table]' => 'views_test_data',
|
Chris@0
|
48 '[view:base-field]' => 'id',
|
Chris@0
|
49 '[view:items-per-page]' => '4',
|
Chris@0
|
50 '[view:current-page]' => '1',
|
Chris@0
|
51 '[view:page-count]' => '2',
|
Chris@0
|
52 ];
|
Chris@0
|
53
|
Chris@0
|
54 $base_bubbleable_metadata = BubbleableMetadata::createFromObject($view->storage);
|
Chris@0
|
55 $metadata_tests = [];
|
Chris@0
|
56 $metadata_tests['[view:label]'] = $base_bubbleable_metadata;
|
Chris@0
|
57 $metadata_tests['[view:description]'] = $base_bubbleable_metadata;
|
Chris@0
|
58 $metadata_tests['[view:id]'] = $base_bubbleable_metadata;
|
Chris@0
|
59 $metadata_tests['[view:title]'] = $base_bubbleable_metadata;
|
Chris@0
|
60 $metadata_tests['[view:url]'] = $base_bubbleable_metadata;
|
Chris@0
|
61 $metadata_tests['[view:total-rows]'] = $base_bubbleable_metadata;
|
Chris@0
|
62 $metadata_tests['[view:base-table]'] = $base_bubbleable_metadata;
|
Chris@0
|
63 $metadata_tests['[view:base-field]'] = $base_bubbleable_metadata;
|
Chris@0
|
64 $metadata_tests['[view:items-per-page]'] = $base_bubbleable_metadata;
|
Chris@0
|
65 $metadata_tests['[view:current-page]'] = $base_bubbleable_metadata;
|
Chris@0
|
66 $metadata_tests['[view:page-count]'] = $base_bubbleable_metadata;
|
Chris@0
|
67
|
Chris@0
|
68 foreach ($expected as $token => $expected_output) {
|
Chris@0
|
69 $bubbleable_metadata = new BubbleableMetadata();
|
Chris@0
|
70 $output = $token_handler->replace($token, ['view' => $view], [], $bubbleable_metadata);
|
Chris@0
|
71 $this->assertIdentical($output, $expected_output, format_string('Token %token replaced correctly.', ['%token' => $token]));
|
Chris@0
|
72 $this->assertEqual($bubbleable_metadata, $metadata_tests[$token]);
|
Chris@0
|
73 }
|
Chris@0
|
74 }
|
Chris@0
|
75
|
Chris@0
|
76 /**
|
Chris@0
|
77 * Tests core token replacements generated from a view.
|
Chris@0
|
78 */
|
Chris@0
|
79 public function testTokenReplacementWithMiniPager() {
|
Chris@0
|
80 $token_handler = \Drupal::token();
|
Chris@0
|
81 $view = Views::getView('test_tokens');
|
Chris@0
|
82 $view->setDisplay('page_3');
|
Chris@0
|
83 $this->executeView($view);
|
Chris@0
|
84
|
Chris@0
|
85 $this->assertSame(TRUE, $view->get_total_rows, 'The query was set to calculate the total number of rows.');
|
Chris@0
|
86
|
Chris@0
|
87 $expected = [
|
Chris@0
|
88 '[view:label]' => 'Test tokens',
|
Chris@0
|
89 '[view:description]' => 'Test view to token replacement tests.',
|
Chris@0
|
90 '[view:id]' => 'test_tokens',
|
Chris@0
|
91 '[view:title]' => 'Test token page with minipager',
|
Chris@0
|
92 '[view:url]' => $view->getUrl(NULL, 'page_3')
|
Chris@0
|
93 ->setAbsolute(TRUE)
|
Chris@0
|
94 ->toString(),
|
Chris@0
|
95 '[view:total-rows]' => '5',
|
Chris@0
|
96 '[view:base-table]' => 'views_test_data',
|
Chris@0
|
97 '[view:base-field]' => 'id',
|
Chris@0
|
98 '[view:items-per-page]' => '2',
|
Chris@0
|
99 '[view:current-page]' => '1',
|
Chris@0
|
100 '[view:page-count]' => '3',
|
Chris@0
|
101 ];
|
Chris@0
|
102
|
Chris@0
|
103 $base_bubbleable_metadata = BubbleableMetadata::createFromObject($view->storage);
|
Chris@0
|
104
|
Chris@0
|
105 foreach ($expected as $token => $expected_output) {
|
Chris@0
|
106 $bubbleable_metadata = new BubbleableMetadata();
|
Chris@0
|
107 $output = $token_handler->replace($token, ['view' => $view], [], $bubbleable_metadata);
|
Chris@0
|
108 $this->assertSame($expected_output, $output, sprintf('Token %s replaced correctly.', $token));
|
Chris@0
|
109 $this->assertEquals($base_bubbleable_metadata, $bubbleable_metadata);
|
Chris@0
|
110 }
|
Chris@0
|
111 }
|
Chris@0
|
112
|
Chris@0
|
113 /**
|
Chris@0
|
114 * Tests core token replacements generated from a view without results.
|
Chris@0
|
115 */
|
Chris@0
|
116 public function testTokenReplacementNoResults() {
|
Chris@0
|
117 $token_handler = \Drupal::token();
|
Chris@0
|
118 $view = Views::getView('test_tokens');
|
Chris@0
|
119 $view->setDisplay('page_2');
|
Chris@0
|
120 $this->executeView($view);
|
Chris@0
|
121
|
Chris@0
|
122 $expected = [
|
Chris@0
|
123 '[view:page-count]' => '1',
|
Chris@0
|
124 ];
|
Chris@0
|
125
|
Chris@0
|
126 foreach ($expected as $token => $expected_output) {
|
Chris@0
|
127 $output = $token_handler->replace($token, ['view' => $view]);
|
Chris@0
|
128 $this->assertIdentical($output, $expected_output, format_string('Token %token replaced correctly.', ['%token' => $token]));
|
Chris@0
|
129 }
|
Chris@0
|
130 }
|
Chris@0
|
131
|
Chris@0
|
132 /**
|
Chris@0
|
133 * Tests path token replacements generated from a view without a path.
|
Chris@0
|
134 */
|
Chris@0
|
135 public function testTokenReplacementNoPath() {
|
Chris@0
|
136 $token_handler = \Drupal::token();
|
Chris@0
|
137 $view = Views::getView('test_invalid_tokens');
|
Chris@0
|
138 $view->setDisplay('block_1');
|
Chris@0
|
139 $this->executeView($view);
|
Chris@0
|
140
|
Chris@0
|
141 $expected = [
|
Chris@0
|
142 '[view:url]' => '',
|
Chris@0
|
143 ];
|
Chris@0
|
144
|
Chris@0
|
145 foreach ($expected as $token => $expected_output) {
|
Chris@0
|
146 $output = $token_handler->replace($token, ['view' => $view]);
|
Chris@0
|
147 $this->assertIdentical($output, $expected_output, format_string('Token %token replaced correctly.', ['%token' => $token]));
|
Chris@0
|
148 }
|
Chris@0
|
149 }
|
Chris@0
|
150
|
Chris@0
|
151 }
|