You are here

public function DrupalMessengerServiceTest::testStatusMessageAssertions in Drupal 10

Tests assertion methods in WebAssert related to status messages.

File

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

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');
}