Commit 70e722ea authored by Ben Mullins's avatar Ben Mullins
Browse files

Issue #3364713 by lauriii, bnjmnm, andy-blum, Dave Reid, cosmicdreams: Claro:...

Issue #3364713 by lauriii, bnjmnm, andy-blum, Dave Reid, cosmicdreams: Claro: Messages can be malformed when JS creates messages and PHP messages already exist
parent 34d09bf2
Loading
Loading
Loading
Loading
+8 −0
Original line number Diff line number Diff line
@@ -5,3 +5,11 @@ js_message_test.links:
    _title: 'JsMessageLinks'
  requirements:
    _access: 'TRUE'

js_message_test.links_with_system_messages:
  path: '/js_message_test_link_with_system_messages'
  defaults:
    _controller: '\Drupal\js_message_test\Controller\JSMessageTestController::messageLinksWithSystemMessages'
    _title: 'JsMessageLinks'
  requirements:
    _access: 'TRUE'
+16 −0
Original line number Diff line number Diff line
@@ -29,6 +29,22 @@ public static function getMessagesSelectors() {
    return ['', '[data-drupal-messages-other]'];
  }

  /**
   * Displays links to show messages via JavaScript with messages from backend.
   *
   * @return array
   *   Render array for links.
   */
  public function messageLinksWithSystemMessages() {
    // Add PHP rendered messages to the page.
    $messenger = \Drupal::messenger();
    $messenger->addStatus('PHP Status');
    $messenger->addWarning('PHP Warning');
    $messenger->addError('PHP Error');

    return $this->messageLinks();
  }

  /**
   * Displays links to show messages via JavaScript.
   *
+0 −19
Original line number Diff line number Diff line
@@ -15,25 +15,6 @@ function olivero_test_preprocess_field_multiple_value_form(&$variables) {
  }
}

/**
 * Implements hook_preprocess().
 */
function olivero_test_preprocess_page(&$variables) {
  $route = \Drupal::routeMatch()->getRouteName();

  switch ($route) {
    case 'js_message_test.links':
      $messenger = \Drupal::messenger();
      $messenger->addStatus('PHP Status');
      $messenger->addWarning('PHP Warning');
      $messenger->addError('PHP Error');
      break;

    default:
      break;
  }
}

/**
 * Implements hook_preprocess_html().
 */
+1 −0
Original line number Diff line number Diff line
@@ -5,3 +5,4 @@ version: VERSION
hidden: true
install:
  - js_testing_log_test
  - nightwatch_theme_install_utility
+101 −0
Original line number Diff line number Diff line
const mainContent = '.region-content';
const mainMessagesContainer =
  '[data-drupal-messages] > .messages-list__wrapper';
const secondaryMessagesContainer = '[data-drupal-messages-other]';

const mainButtons = {
  addStatus: '#add--status',
  removeStatus: '#remove--status',
  addError: '#add--error',
  removeError: '#remove--error',
  addWarning: '#add--warning',
  removeWarning: '#remove--warning',
  clearAll: '#clear-all',
};

const secondaryButtons = {
  addStatus: '[id="add-[data-drupal-messages-other]-status"]',
  removeStatus: '[id="remove-[data-drupal-messages-other]-status"]',
  addError: '[id="add-[data-drupal-messages-other]-error"]',
  removeError: '[id="remove-[data-drupal-messages-other]-error"]',
  addWarning: '[id="add-[data-drupal-messages-other]-warning"]',
  removeWarning: '[id="remove-[data-drupal-messages-other]-warning"]',
};

module.exports = {
  '@tags': ['core', 'claro'],
  before(browser) {
    browser
      .drupalInstall()
      .drupalInstallModule('js_message_test')
      .drupalEnableTheme('claro');
  },
  after(browser) {
    browser.drupalUninstall();
  },
  'Verify default placement of javascript-created messages': (browser) => {
    browser
      .drupalRelativeURL('/js_message_test_link_with_system_messages')
      .waitForElementVisible(mainContent)
      .assert.elementPresent(mainMessagesContainer)

      // We should load 3 messages on page load from \Drupal::messenger()
      .assert.elementCount(`${mainMessagesContainer} > .messages-list__item`, 3)

      // We should have one message of each type
      .assert.elementCount(`${mainMessagesContainer} > .messages--status`, 1)
      .assert.elementCount(`${mainMessagesContainer} > .messages--warning`, 1)
      .assert.elementCount(`${mainMessagesContainer} > .messages--error`, 1)

      // Trigger new messages via javascript
      .click(mainButtons.addStatus)
      .click(mainButtons.addWarning)
      .click(mainButtons.addError)

      // We should have 6 total messages
      .assert.elementCount(`${mainMessagesContainer} > .messages-list__item`, 6)

      // We should have 2 messages of each type
      .assert.elementCount(`${mainMessagesContainer} > .messages--status`, 2)
      .assert.elementCount(`${mainMessagesContainer} > .messages--warning`, 2)
      .assert.elementCount(`${mainMessagesContainer} > .messages--error`, 2);
  },

  'Verify customized placement of javascript-created messages': (browser) => {
    browser
      .drupalRelativeURL('/js_message_test_link_with_system_messages')
      .waitForElementVisible(mainContent)
      .assert.elementPresent(secondaryMessagesContainer)

      // We should load 3 messages on page load from \Drupal::messenger()
      .assert.elementCount(
        `${secondaryMessagesContainer} > .messages-list__item`,
        0,
      )

      // Trigger new messages via javascript
      .click(secondaryButtons.addStatus)
      .click(secondaryButtons.addWarning)
      .click(secondaryButtons.addError)

      // We should have 6 total messages
      .assert.elementCount(
        `${secondaryMessagesContainer} > .messages-list__item`,
        3,
      )

      // We should have 2 messages of each type
      .assert.elementCount(
        `${secondaryMessagesContainer} > .messages--status`,
        1,
      )
      .assert.elementCount(
        `${secondaryMessagesContainer} > .messages--warning`,
        1,
      )
      .assert.elementCount(
        `${secondaryMessagesContainer} > .messages--error`,
        1,
      );
  },
};
Loading