Tests contextual links with different permissions.
Ensures that contextual link placeholders always exist, even if the user is not allowed to use contextual links.
function testDifferentPermissions() {
$this
->drupalLogin($this->editor_user);
// 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 = array(
'node:node:' . $node1->nid . ':',
'node:node:' . $node2->nid . ':',
'node:node:' . $node3->nid . ':',
'views_ui:admin/structure/views/view:frontpage:location=page&name=frontpage&display_id=page_1',
);
// 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 = drupal_json_decode($response);
$this
->assertIdentical($json[$ids[0]], '<ul class="contextual-links"><li class="node-edit odd first last"><a href="' . base_path() . 'node/1/edit?destination=node">Edit</a></li></ul>');
$this
->assertIdentical($json[$ids[1]], '');
$this
->assertIdentical($json[$ids[2]], '<ul class="contextual-links"><li class="node-edit odd first last"><a href="' . base_path() . 'node/3/edit?destination=node">Edit</a></li></ul>');
$this
->assertIdentical($json[$ids[3]], '');
// Authenticated user: can access contextual links, cannot edit articles.
$this
->drupalLogin($this->authenticated_user);
$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 = drupal_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->anonymous_user);
$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);
}