comparison core/tests/Drupal/FunctionalJavascriptTests/Core/JsMessageTest.php @ 5:12f9dff5fda9 tip

Update to Drupal core 8.7.1
author Chris Cannam
date Thu, 09 May 2019 15:34:47 +0100
parents
children
comparison
equal deleted inserted replaced
4:a9cd425dd02b 5:12f9dff5fda9
1 <?php
2
3 namespace Drupal\FunctionalJavascriptTests\Core;
4
5 use Drupal\FunctionalJavascriptTests\WebDriverTestBase;
6 use Drupal\system\Tests\JsMessageTestCases;
7
8 /**
9 * Tests core/drupal.messages library.
10 *
11 * @group Javascript
12 */
13 class JsMessageTest extends WebDriverTestBase {
14
15 /**
16 * {@inheritdoc}
17 */
18 public static $modules = ['js_message_test'];
19
20 /**
21 * {@inheritdoc}
22 */
23 protected function setUp() {
24 parent::setUp();
25
26 // Enable the theme.
27 \Drupal::service('theme_installer')->install(['test_messages']);
28 $theme_config = \Drupal::configFactory()->getEditable('system.theme');
29 $theme_config->set('default', 'test_messages');
30 $theme_config->save();
31 }
32
33 /**
34 * Test click on links to show messages and remove messages.
35 */
36 public function testAddRemoveMessages() {
37 $web_assert = $this->assertSession();
38 $this->drupalGet('js_message_test_link');
39
40 $current_messages = [];
41 foreach (JsMessageTestCases::getMessagesSelectors() as $messagesSelector) {
42 $web_assert->elementExists('css', $messagesSelector);
43 foreach (JsMessageTestCases::getTypes() as $type) {
44 $this->click('[id="add-' . $messagesSelector . '-' . $type . '"]');
45 $selector = "$messagesSelector .messages.messages--$type";
46 $msg_element = $web_assert->waitForElementVisible('css', $selector);
47 $this->assertNotEmpty($msg_element, "Message element visible: $selector");
48 $web_assert->elementContains('css', $selector, "This is a message of the type, $type. You be the the judge of its importance.");
49 $current_messages[$selector] = "This is a message of the type, $type. You be the the judge of its importance.";
50 $this->assertCurrentMessages($current_messages, $messagesSelector);
51 }
52 // Remove messages 1 by 1 and confirm the messages are expected.
53 foreach (JsMessageTestCases::getTypes() as $type) {
54 $this->click('[id="remove-' . $messagesSelector . '-' . $type . '"]');
55 $selector = "$messagesSelector .messages.messages--$type";
56 // The message for this selector should not be on the page.
57 unset($current_messages[$selector]);
58 $this->assertCurrentMessages($current_messages, $messagesSelector);
59 }
60 }
61
62 $messagesSelector = JsMessageTestCases::getMessagesSelectors()[0];
63 $current_messages = [];
64 $types = JsMessageTestCases::getTypes();
65 $nb_messages = count($types) * 2;
66 for ($i = 0; $i < $nb_messages; $i++) {
67 $current_messages[] = "This is message number $i of the type, {$types[$i % count($types)]}. You be the the judge of its importance.";
68 }
69 // Test adding multiple messages at once.
70 // @see processMessages()
71 $this->click('[id="add-multiple"]');
72 $this->assertCurrentMessages($current_messages, $messagesSelector);
73 $this->click('[id="remove-multiple"]');
74 $this->assertCurrentMessages([], $messagesSelector);
75
76 $current_messages = [];
77 for ($i = 0; $i < $nb_messages; $i++) {
78 $current_messages[] = "Msg-$i";
79 }
80 // The last message is of a different type and shouldn't get cleared.
81 $last_message = 'Msg-' . count($current_messages);
82 $current_messages[] = $last_message;
83 $this->click('[id="add-multiple-error"]');
84 $this->assertCurrentMessages($current_messages, $messagesSelector);
85 $this->click('[id="remove-type"]');
86 $this->assertCurrentMessages([$last_message], $messagesSelector);
87 $this->click('[id="clear-all"]');
88 $this->assertCurrentMessages([], $messagesSelector);
89
90 // Confirm that when adding a message with an "id" specified but no status
91 // that it receives the default status.
92 $this->click('[id="id-no-status"]');
93 $no_status_msg = 'Msg-id-no-status';
94 $this->assertCurrentMessages([$no_status_msg], $messagesSelector);
95 $web_assert->elementTextContains('css', "$messagesSelector .messages--status[data-drupal-message-id=\"my-special-id\"]", $no_status_msg);
96
97 }
98
99 /**
100 * Asserts that currently shown messages match expected messages.
101 *
102 * @param array $expected_messages
103 * Expected messages.
104 * @param string $messagesSelector
105 * The css selector for the containing messages element.
106 */
107 protected function assertCurrentMessages(array $expected_messages, $messagesSelector) {
108 $expected_messages = array_values($expected_messages);
109 $current_messages = [];
110 if ($message_divs = $this->getSession()->getPage()->findAll('css', "$messagesSelector .messages")) {
111 foreach ($message_divs as $message_div) {
112 /** @var \Behat\Mink\Element\NodeElement $message_div */
113 $current_messages[] = $message_div->getText();
114 }
115 }
116 $this->assertEquals($expected_messages, $current_messages);
117 }
118
119 }