3 namespace Drupal\Tests\views\Kernel;
5 use Drupal\Core\Render\BubbleableMetadata;
6 use Drupal\views\Views;
9 * Tests core view token replacement.
13 class TokenReplaceTest extends ViewsKernelTestBase {
15 public static $modules = ['system'];
18 * Views used by this test.
22 public static $testViews = ['test_tokens', 'test_invalid_tokens'];
24 protected function setUp($import_test_views = TRUE) {
26 $this->container->get('router.builder')->rebuild();
30 * Tests core token replacements generated from a view.
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);
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',
54 $base_bubbleable_metadata = BubbleableMetadata::createFromObject($view->storage);
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;
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]);
77 * Tests core token replacements generated from a view.
79 public function testTokenReplacementWithMiniPager() {
80 $token_handler = \Drupal::token();
81 $view = Views::getView('test_tokens');
82 $view->setDisplay('page_3');
83 $this->executeView($view);
85 $this->assertSame(TRUE, $view->get_total_rows, 'The query was set to calculate the total number of rows.');
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')
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',
103 $base_bubbleable_metadata = BubbleableMetadata::createFromObject($view->storage);
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);
114 * Tests core token replacements generated from a view without results.
116 public function testTokenReplacementNoResults() {
117 $token_handler = \Drupal::token();
118 $view = Views::getView('test_tokens');
119 $view->setDisplay('page_2');
120 $this->executeView($view);
123 '[view:page-count]' => '1',
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]));
133 * Tests path token replacements generated from a view without a path.
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);
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]));