function DrupalMessengerServiceTest::testStatusMessageAssertions

Same name and namespace in other branches
  1. 9 core/modules/system/tests/src/Functional/Bootstrap/DrupalMessengerServiceTest.php \Drupal\Tests\system\Functional\Bootstrap\DrupalMessengerServiceTest::testStatusMessageAssertions()
  2. 11.x core/modules/system/tests/src/Functional/Bootstrap/DrupalMessengerServiceTest.php \Drupal\Tests\system\Functional\Bootstrap\DrupalMessengerServiceTest::testStatusMessageAssertions()

Tests assertion methods in WebAssert related to status messages.

File

core/modules/system/tests/src/Functional/Bootstrap/DrupalMessengerServiceTest.php, line 69

Class

DrupalMessengerServiceTest
Tests the Messenger service.

Namespace

Drupal\Tests\system\Functional\Bootstrap

Code

public function testStatusMessageAssertions() : void {
  $this->drupalGet(Url::fromRoute('system_test.status_messages_for_assertions'));
  // Use the simple messages to test basic functionality.
  // Test WebAssert::statusMessagesExists().
  $this->assertSession()
    ->statusMessageExists();
  $this->assertSession()
    ->statusMessageExists('status');
  $this->assertSession()
    ->statusMessageExists('error');
  $this->assertSession()
    ->statusMessageExists('warning');
  // WebAssert::statusMessageContains().
  $this->assertSession()
    ->statusMessageContains('My Status Message');
  $this->assertSession()
    ->statusMessageContains('My Error Message');
  $this->assertSession()
    ->statusMessageContains('My Warning Message');
  // Test partial match.
  $this->assertSession()
    ->statusMessageContains('My Status');
  // Test with second arg.
  $this->assertSession()
    ->statusMessageContains('My Status Message', 'status');
  $this->assertSession()
    ->statusMessageContains('My Error Message', 'error');
  $this->assertSession()
    ->statusMessageContains('My Warning Message', 'warning');
  // Test WebAssert::statusMessageNotContains().
  $this->assertSession()
    ->statusMessageNotContains('My Status Message is fake');
  $this->assertSession()
    ->statusMessageNotContains('My Status Message is fake', 'status');
  $this->assertSession()
    ->statusMessageNotContains('My Error Message', 'status');
  $this->assertSession()
    ->statusMessageNotContains('My Status Message', 'error');
  // Check that special characters get handled correctly.
  $this->assertSession()
    ->statusMessageContains('This has " in the middle');
  $this->assertSession()
    ->statusMessageContains('This has \' in the middle');
  $this->assertSession()
    ->statusMessageContains('<em>This<span>markup will be</span> escaped</em>');
  $this->assertSession()
    ->statusMessageContains('Peaches & cream');
  $this->assertSession()
    ->statusMessageNotContains('Peaches &amp; cream');
  // Go to a new route that only has messages of type 'status'.
  $this->drupalGet(Url::fromRoute('system_test.messenger_service'));
  // Test WebAssert::statusMessageNotExists().
  $this->assertSession()
    ->statusMessageNotExists('error');
  $this->assertSession()
    ->statusMessageNotExists('warning');
  // Perform a few assertions that should fail. We can only call
  // TestCase::expectException() once per test, so we make a few
  // try/catch blocks.
  $expected_failure_occurred = FALSE;
  try {
    $this->assertSession()
      ->statusMessageContains('This message is not real');
  } catch (AssertionFailedError $e) {
    $expected_failure_occurred = TRUE;
  }
  $this->assertTrue($expected_failure_occurred, 'WebAssert::statusMessageContains() did not fail when it should have failed.');
  $expected_failure_occurred = FALSE;
  try {
    $this->assertSession()
      ->statusMessageNotContains('markup');
  } catch (AssertionFailedError $e) {
    $expected_failure_occurred = TRUE;
  }
  $this->assertTrue($expected_failure_occurred, 'WebAssert::statusMessageNotContains() did not fail when it should have failed.');
  $expected_failure_occurred = FALSE;
  try {
    $this->assertSession()
      ->statusMessageExists('error');
  } catch (AssertionFailedError $e) {
    $expected_failure_occurred = TRUE;
  }
  $this->assertTrue($expected_failure_occurred, 'WebAssert::statusMessageExists() did not fail when it should have failed.');
  $expected_failure_occurred = FALSE;
  try {
    $this->assertSession()
      ->statusMessageNotExists();
  } catch (AssertionFailedError $e) {
    $expected_failure_occurred = TRUE;
  }
  $this->assertTrue($expected_failure_occurred, 'WebAssert::statusMessageNotExists() did not fail when it should have failed.');
  // Tests passing a bad status type.
  $this->expectException(\InvalidArgumentException::class);
  $this->assertSession()
    ->statusMessageExists('not a valid type');
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.