Mercurial > hg > cmmr2012-drupal-site
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 } |