Mercurial > hg > isophonics-drupal-site
diff 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 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/node/src/Tests/Views/NodeContextualLinksTest.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,118 @@ +<?php + +namespace Drupal\node\Tests\Views; + +use Drupal\Component\Serialization\Json; +use Drupal\user\Entity\User; + +/** + * Tests views contextual links on nodes. + * + * @group node + */ +class NodeContextualLinksTest extends NodeTestBase { + + /** + * Modules to enable. + * + * @var array + */ + public static $modules = ['contextual']; + + /** + * Views used by this test. + * + * @var array + */ + public static $testViews = ['test_contextual_links']; + + /** + * Tests contextual links. + */ + public function testNodeContextualLinks() { + $this->drupalCreateContentType(['type' => 'page']); + $this->drupalCreateNode(['promote' => 1]); + $this->drupalGet('node'); + + $user = $this->drupalCreateUser(['administer nodes', 'access contextual links']); + $this->drupalLogin($user); + + $response = $this->renderContextualLinks(['node:node=1:'], 'node'); + $this->assertResponse(200); + $json = Json::decode($response); + $this->setRawContent($json['node:node=1:']); + + // @todo Add these back when the functionality for making Views displays + // appear in contextual links is working again. + // $this->assertLinkByHref('node/1/contextual-links', 0, 'The contextual link to the view was found.'); + // $this->assertLink('Test contextual link', 0, 'The contextual link to the view was found.'); + } + + /** + * Get server-rendered contextual links for the given contextual link ids. + * + * Copied from \Drupal\contextual\Tests\ContextualDynamicContextTest::renderContextualLinks(). + * + * @param array $ids + * An array of contextual link ids. + * @param string $current_path + * The Drupal path for the page for which the contextual links are rendered. + * + * @return string + * The response body. + */ + protected function renderContextualLinks($ids, $current_path) { + // Build POST values. + $post = []; + for ($i = 0; $i < count($ids); $i++) { + $post['ids[' . $i . ']'] = $ids[$i]; + } + + // Serialize POST values. + foreach ($post as $key => $value) { + // Encode according to application/x-www-form-urlencoded + // Both names and values needs to be urlencoded, according to + // http://www.w3.org/TR/html4/interact/forms.html#h-17.13.4.1 + $post[$key] = urlencode($key) . '=' . urlencode($value); + } + $post = implode('&', $post); + + // Perform HTTP request. + return $this->curlExec([ + CURLOPT_URL => \Drupal::url('contextual.render', [], ['absolute' => TRUE, 'query' => ['destination' => $current_path]]), + CURLOPT_POST => TRUE, + CURLOPT_POSTFIELDS => $post, + CURLOPT_HTTPHEADER => [ + 'Accept: application/json', + 'Content-Type: application/x-www-form-urlencoded', + ], + ]); + } + + /** + * Tests if the node page works if Contextual Links is disabled. + * + * All views have Contextual links enabled by default, even with the + * Contextual links module disabled. This tests if no calls are done to the + * Contextual links module by views when it is disabled. + * + * @see https://www.drupal.org/node/2379811 + */ + public function testPageWithDisabledContextualModule() { + \Drupal::service('module_installer')->uninstall(['contextual']); + \Drupal::service('module_installer')->install(['views_ui']); + + // Ensure that contextual links don't get called for admin users. + $admin_user = User::load(1); + $admin_user->setPassword('new_password'); + $admin_user->pass_raw = 'new_password'; + $admin_user->save(); + + $this->drupalCreateContentType(['type' => 'page']); + $this->drupalCreateNode(['promote' => 1]); + + $this->drupalLogin($admin_user); + $this->drupalGet('node'); + } + +}