Mercurial > hg > isophonics-drupal-site
comparison core/modules/node/src/Tests/Views/NodeContextualLinksTest.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children |
comparison
equal
deleted
inserted
replaced
-1:000000000000 | 0:4c8ae668cc8c |
---|---|
1 <?php | |
2 | |
3 namespace Drupal\node\Tests\Views; | |
4 | |
5 use Drupal\Component\Serialization\Json; | |
6 use Drupal\user\Entity\User; | |
7 | |
8 /** | |
9 * Tests views contextual links on nodes. | |
10 * | |
11 * @group node | |
12 */ | |
13 class NodeContextualLinksTest extends NodeTestBase { | |
14 | |
15 /** | |
16 * Modules to enable. | |
17 * | |
18 * @var array | |
19 */ | |
20 public static $modules = ['contextual']; | |
21 | |
22 /** | |
23 * Views used by this test. | |
24 * | |
25 * @var array | |
26 */ | |
27 public static $testViews = ['test_contextual_links']; | |
28 | |
29 /** | |
30 * Tests contextual links. | |
31 */ | |
32 public function testNodeContextualLinks() { | |
33 $this->drupalCreateContentType(['type' => 'page']); | |
34 $this->drupalCreateNode(['promote' => 1]); | |
35 $this->drupalGet('node'); | |
36 | |
37 $user = $this->drupalCreateUser(['administer nodes', 'access contextual links']); | |
38 $this->drupalLogin($user); | |
39 | |
40 $response = $this->renderContextualLinks(['node:node=1:'], 'node'); | |
41 $this->assertResponse(200); | |
42 $json = Json::decode($response); | |
43 $this->setRawContent($json['node:node=1:']); | |
44 | |
45 // @todo Add these back when the functionality for making Views displays | |
46 // appear in contextual links is working again. | |
47 // $this->assertLinkByHref('node/1/contextual-links', 0, 'The contextual link to the view was found.'); | |
48 // $this->assertLink('Test contextual link', 0, 'The contextual link to the view was found.'); | |
49 } | |
50 | |
51 /** | |
52 * Get server-rendered contextual links for the given contextual link ids. | |
53 * | |
54 * Copied from \Drupal\contextual\Tests\ContextualDynamicContextTest::renderContextualLinks(). | |
55 * | |
56 * @param array $ids | |
57 * An array of contextual link ids. | |
58 * @param string $current_path | |
59 * The Drupal path for the page for which the contextual links are rendered. | |
60 * | |
61 * @return string | |
62 * The response body. | |
63 */ | |
64 protected function renderContextualLinks($ids, $current_path) { | |
65 // Build POST values. | |
66 $post = []; | |
67 for ($i = 0; $i < count($ids); $i++) { | |
68 $post['ids[' . $i . ']'] = $ids[$i]; | |
69 } | |
70 | |
71 // Serialize POST values. | |
72 foreach ($post as $key => $value) { | |
73 // Encode according to application/x-www-form-urlencoded | |
74 // Both names and values needs to be urlencoded, according to | |
75 // http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1 | |
76 $post[$key] = urlencode($key) . '=' . urlencode($value); | |
77 } | |
78 $post = implode('&', $post); | |
79 | |
80 // Perform HTTP request. | |
81 return $this->curlExec([ | |
82 CURLOPT_URL => \Drupal::url('contextual.render', [], ['absolute' => TRUE, 'query' => ['destination' => $current_path]]), | |
83 CURLOPT_POST => TRUE, | |
84 CURLOPT_POSTFIELDS => $post, | |
85 CURLOPT_HTTPHEADER => [ | |
86 'Accept: application/json', | |
87 'Content-Type: application/x-www-form-urlencoded', | |
88 ], | |
89 ]); | |
90 } | |
91 | |
92 /** | |
93 * Tests if the node page works if Contextual Links is disabled. | |
94 * | |
95 * All views have Contextual links enabled by default, even with the | |
96 * Contextual links module disabled. This tests if no calls are done to the | |
97 * Contextual links module by views when it is disabled. | |
98 * | |
99 * @see https://www.drupal.org/node/2379811 | |
100 */ | |
101 public function testPageWithDisabledContextualModule() { | |
102 \Drupal::service('module_installer')->uninstall(['contextual']); | |
103 \Drupal::service('module_installer')->install(['views_ui']); | |
104 | |
105 // Ensure that contextual links don't get called for admin users. | |
106 $admin_user = User::load(1); | |
107 $admin_user->setPassword('new_password'); | |
108 $admin_user->pass_raw = 'new_password'; | |
109 $admin_user->save(); | |
110 | |
111 $this->drupalCreateContentType(['type' => 'page']); | |
112 $this->drupalCreateNode(['promote' => 1]); | |
113 | |
114 $this->drupalLogin($admin_user); | |
115 $this->drupalGet('node'); | |
116 } | |
117 | |
118 } |