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