Chris@17
|
1 <?php
|
Chris@17
|
2
|
Chris@17
|
3 namespace Drupal\Tests\node\FunctionalJavascript;
|
Chris@17
|
4
|
Chris@17
|
5 use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
|
Chris@17
|
6 use Drupal\node\Entity\Node;
|
Chris@17
|
7 use Drupal\Tests\contextual\FunctionalJavascript\ContextualLinkClickTrait;
|
Chris@17
|
8
|
Chris@17
|
9 /**
|
Chris@17
|
10 * Create a node with revisions and test contextual links.
|
Chris@17
|
11 *
|
Chris@17
|
12 * @group node
|
Chris@17
|
13 */
|
Chris@17
|
14 class ContextualLinksTest extends WebDriverTestBase {
|
Chris@17
|
15
|
Chris@17
|
16 use ContextualLinkClickTrait;
|
Chris@17
|
17
|
Chris@17
|
18 /**
|
Chris@17
|
19 * An array of node revisions.
|
Chris@17
|
20 *
|
Chris@17
|
21 * @var \Drupal\node\NodeInterface[]
|
Chris@17
|
22 */
|
Chris@17
|
23 protected $nodes;
|
Chris@17
|
24
|
Chris@17
|
25
|
Chris@17
|
26 /**
|
Chris@17
|
27 * {@inheritdoc}
|
Chris@17
|
28 */
|
Chris@17
|
29 protected static $modules = ['node', 'contextual'];
|
Chris@17
|
30
|
Chris@17
|
31 /**
|
Chris@17
|
32 * {@inheritdoc}
|
Chris@17
|
33 */
|
Chris@17
|
34 protected function setUp() {
|
Chris@17
|
35 parent::setUp();
|
Chris@17
|
36
|
Chris@17
|
37 $this->drupalCreateContentType([
|
Chris@17
|
38 'type' => 'page',
|
Chris@17
|
39 'name' => 'Basic page',
|
Chris@17
|
40 'display_submitted' => FALSE,
|
Chris@17
|
41 ]);
|
Chris@17
|
42
|
Chris@17
|
43 // Create initial node.
|
Chris@17
|
44 $node = $this->drupalCreateNode();
|
Chris@17
|
45
|
Chris@17
|
46 $nodes = [];
|
Chris@17
|
47
|
Chris@17
|
48 // Get original node.
|
Chris@17
|
49 $nodes[] = clone $node;
|
Chris@17
|
50
|
Chris@17
|
51 // Create two revisions.
|
Chris@17
|
52 $revision_count = 2;
|
Chris@17
|
53 for ($i = 0; $i < $revision_count; $i++) {
|
Chris@17
|
54
|
Chris@17
|
55 // Create revision with a random title and body and update variables.
|
Chris@17
|
56 $node->title = $this->randomMachineName();
|
Chris@17
|
57 $node->body = [
|
Chris@17
|
58 'value' => $this->randomMachineName(32),
|
Chris@17
|
59 'format' => filter_default_format(),
|
Chris@17
|
60 ];
|
Chris@17
|
61 $node->setNewRevision();
|
Chris@17
|
62
|
Chris@17
|
63 $node->save();
|
Chris@17
|
64
|
Chris@17
|
65 // Make sure we get revision information.
|
Chris@17
|
66 $node = Node::load($node->id());
|
Chris@17
|
67 $nodes[] = clone $node;
|
Chris@17
|
68 }
|
Chris@17
|
69
|
Chris@17
|
70 $this->nodes = $nodes;
|
Chris@17
|
71
|
Chris@17
|
72 $this->drupalLogin($this->createUser(
|
Chris@17
|
73 [
|
Chris@17
|
74 'view page revisions',
|
Chris@17
|
75 'revert page revisions',
|
Chris@17
|
76 'delete page revisions',
|
Chris@17
|
77 'edit any page content',
|
Chris@17
|
78 'delete any page content',
|
Chris@17
|
79 'access contextual links',
|
Chris@17
|
80 'administer content types',
|
Chris@17
|
81 ]
|
Chris@17
|
82 ));
|
Chris@17
|
83 }
|
Chris@17
|
84
|
Chris@17
|
85 /**
|
Chris@17
|
86 * Tests the contextual links on revisions.
|
Chris@17
|
87 */
|
Chris@17
|
88 public function testRevisionContextualLinks() {
|
Chris@17
|
89 // Confirm that the "Edit" and "Delete" contextual links appear for the
|
Chris@17
|
90 // default revision.
|
Chris@17
|
91 $this->drupalGet('node/' . $this->nodes[0]->id());
|
Chris@17
|
92 $page = $this->getSession()->getPage();
|
Chris@17
|
93 $page->waitFor(10, function () use ($page) {
|
Chris@17
|
94 return $page->find('css', "main .contextual");
|
Chris@17
|
95 });
|
Chris@17
|
96
|
Chris@17
|
97 $this->toggleContextualTriggerVisibility('main');
|
Chris@17
|
98 $page->find('css', 'main .contextual button')->press();
|
Chris@17
|
99 $links = $page->findAll('css', "main .contextual-links li a");
|
Chris@17
|
100
|
Chris@17
|
101 $this->assertEquals('Edit', $links[0]->getText());
|
Chris@17
|
102 $this->assertEquals('Delete', $links[1]->getText());
|
Chris@17
|
103
|
Chris@17
|
104 // Confirm that "Edit" and "Delete" contextual links don't appear for
|
Chris@17
|
105 // non-default revision.
|
Chris@17
|
106 $this->drupalGet("node/" . $this->nodes[0]->id() . "/revisions/" . $this->nodes[1]->getRevisionId() . "/view");
|
Chris@17
|
107 $this->assertSession()->pageTextContains($this->nodes[1]->getTitle());
|
Chris@17
|
108 $page->waitFor(10, function () use ($page) {
|
Chris@17
|
109 return $page->find('css', "main .contextual");
|
Chris@17
|
110 });
|
Chris@17
|
111
|
Chris@17
|
112 $this->toggleContextualTriggerVisibility('main');
|
Chris@17
|
113 $contextual_button = $page->find('css', 'main .contextual button');
|
Chris@17
|
114 $this->assertEmpty(0, $contextual_button);
|
Chris@17
|
115 }
|
Chris@17
|
116
|
Chris@17
|
117 }
|