123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118 |
- <?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');
- }
- }
|