function ContextualDynamicContextTest::testDifferentPermissions in Zircon Profile 8
Same name and namespace in other branches
- 8.0 core/modules/contextual/src/Tests/ContextualDynamicContextTest.php \Drupal\contextual\Tests\ContextualDynamicContextTest::testDifferentPermissions()
Tests contextual links with different permissions.
Ensures that contextual link placeholders always exist, even if the user is not allowed to use contextual links.
File
- core/
modules/ contextual/ src/ Tests/ ContextualDynamicContextTest.php, line 72 - Contains \Drupal\contextual\Tests\ContextualDynamicContextTest.
Class
- ContextualDynamicContextTest
- Tests if contextual links are showing on the front page depending on permissions.
Namespace
Drupal\contextual\TestsCode
function testDifferentPermissions() {
$this
->drupalLogin($this->editorUser);
// Create three nodes in the following order:
// - An article, which should be user-editable.
// - A page, which should not be user-editable.
// - A second article, which should also be user-editable.
$node1 = $this
->drupalCreateNode(array(
'type' => 'article',
'promote' => 1,
));
$node2 = $this
->drupalCreateNode(array(
'type' => 'page',
'promote' => 1,
));
$node3 = $this
->drupalCreateNode(array(
'type' => 'article',
'promote' => 1,
));
// Now, on the front page, all article nodes should have contextual links
// placeholders, as should the view that contains them.
$ids = [
'node:node=' . $node1
->id() . ':changed=' . $node1
->getChangedTime() . '&langcode=en',
'node:node=' . $node2
->id() . ':changed=' . $node2
->getChangedTime() . '&langcode=en',
'node:node=' . $node3
->id() . ':changed=' . $node3
->getChangedTime() . '&langcode=en',
'entity.view.edit_form:view=frontpage:location=page&name=frontpage&display_id=page_1&langcode=en',
];
// Editor user: can access contextual links and can edit articles.
$this
->drupalGet('node');
for ($i = 0; $i < count($ids); $i++) {
$this
->assertContextualLinkPlaceHolder($ids[$i]);
}
$this
->renderContextualLinks(array(), 'node');
$this
->assertResponse(400);
$this
->assertRaw('No contextual ids specified.');
$response = $this
->renderContextualLinks($ids, 'node');
$this
->assertResponse(200);
$json = Json::decode($response);
$this
->assertIdentical($json[$ids[0]], '<ul class="contextual-links"><li class="entitynodeedit-form"><a href="' . base_path() . 'node/1/edit">Edit</a></li></ul>');
$this
->assertIdentical($json[$ids[1]], '');
$this
->assertIdentical($json[$ids[2]], '<ul class="contextual-links"><li class="entitynodeedit-form"><a href="' . base_path() . 'node/3/edit">Edit</a></li></ul>');
$this
->assertIdentical($json[$ids[3]], '');
// Authenticated user: can access contextual links, cannot edit articles.
$this
->drupalLogin($this->authenticatedUser);
$this
->drupalGet('node');
for ($i = 0; $i < count($ids); $i++) {
$this
->assertContextualLinkPlaceHolder($ids[$i]);
}
$this
->renderContextualLinks(array(), 'node');
$this
->assertResponse(400);
$this
->assertRaw('No contextual ids specified.');
$response = $this
->renderContextualLinks($ids, 'node');
$this
->assertResponse(200);
$json = Json::decode($response);
$this
->assertIdentical($json[$ids[0]], '');
$this
->assertIdentical($json[$ids[1]], '');
$this
->assertIdentical($json[$ids[2]], '');
$this
->assertIdentical($json[$ids[3]], '');
// Anonymous user: cannot access contextual links.
$this
->drupalLogin($this->anonymousUser);
$this
->drupalGet('node');
for ($i = 0; $i < count($ids); $i++) {
$this
->assertContextualLinkPlaceHolder($ids[$i]);
}
$this
->renderContextualLinks(array(), 'node');
$this
->assertResponse(403);
$this
->renderContextualLinks($ids, 'node');
$this
->assertResponse(403);
// Verify that link language is properly handled.
$node3
->addTranslation('it')
->set('title', $this
->randomString())
->save();
$id = 'node:node=' . $node3
->id() . ':changed=' . $node3
->getChangedTime() . '&langcode=it';
$this
->drupalGet('node', [
'language' => ConfigurableLanguage::createFromLangcode('it'),
]);
$this
->assertContextualLinkPlaceHolder($id);
// Get a page where contextual links are directly rendered.
$this
->drupalGet(Url::fromRoute('menu_test.contextual_test'));
$this
->assertEscaped("<script>alert('Welcome to the jungle!')</script>");
$this
->assertLink('Edit menu - contextual');
}