function ToolbarStoredStateTest::testToolbarStoredState

Same name in other branches
  1. 10 core/modules/toolbar/tests/src/FunctionalJavascript/ToolbarStoredStateTest.php \Drupal\Tests\toolbar\FunctionalJavascript\ToolbarStoredStateTest::testToolbarStoredState()

File

core/modules/toolbar/tests/src/FunctionalJavascript/ToolbarStoredStateTest.php, line 27

Class

ToolbarStoredStateTest
Tests the sessionStorage state set by the toolbar.

Namespace

Drupal\Tests\toolbar\FunctionalJavascript

Code

public function testToolbarStoredState() : void {
    $admin_user = $this->drupalCreateUser([
        'access toolbar',
        'administer site configuration',
        'access content overview',
    ]);
    $this->drupalLogin($admin_user);
    $page = $this->getSession()
        ->getPage();
    $assert_session = $this->assertSession();
    $this->drupalGet('<front>');
    $this->assertNotEmpty($this->assertSession()
        ->waitForElement('css', 'body.toolbar-horizontal'));
    $this->assertNotEmpty($this->assertSession()
        ->waitForElementVisible('css', '.toolbar-tray'));
    $this->assertSession()
        ->waitForElementRemoved('css', '.toolbar-loading');
    $page->clickLink('toolbar-item-user');
    $this->assertNotEmpty($assert_session->waitForElementVisible('css', '#toolbar-item-user.is-active'));
    // Expected state values with the user tray open with horizontal
    // orientation.
    $expected = [
        'orientation' => 'horizontal',
        'hasActiveTab' => TRUE,
        'activeTabId' => 'toolbar-item-user',
        'activeTray' => 'toolbar-item-user-tray',
        'isOriented' => TRUE,
        'isFixed' => TRUE,
    ];
    $toolbar_stored_state = JSON::decode($this->getSession()
        ->evaluateScript("sessionStorage.getItem('Drupal.toolbar.toolbarState')"));
    // The userButtonMinWidth property will differ depending on the length of
    // the test-generated username, so it is checked differently and the value
    // is copied to the expected value array.
    $this->assertNotNull($toolbar_stored_state['userButtonMinWidth']);
    $this->assertIsNumeric($toolbar_stored_state['userButtonMinWidth']);
    $this->assertGreaterThan(60, $toolbar_stored_state['userButtonMinWidth']);
    $expected['userButtonMinWidth'] = $toolbar_stored_state['userButtonMinWidth'];
    $this->assertSame($expected, $toolbar_stored_state);
    $page->clickLink('toolbar-item-user');
    $assert_session->assertNoElementAfterWait('css', '#toolbar-item-user.is-active');
    // Update expected state values to reflect no tray being open.
    $expected['hasActiveTab'] = FALSE;
    $expected['activeTabId'] = NULL;
    unset($expected['activeTray']);
    $toolbar_stored_state = JSON::decode($this->getSession()
        ->evaluateScript("sessionStorage.getItem('Drupal.toolbar.toolbarState')"));
    $this->assertSame($expected, $toolbar_stored_state);
    $page->clickLink('toolbar-item-administration');
    $orientation_toggle = $assert_session->waitForElementVisible('css', '[title="Vertical orientation"]');
    $orientation_toggle->click();
    $assert_session->waitForElementVisible('css', 'body.toolbar-vertical');
    // Update expected state values to reflect the administration tray being
    // open with vertical orientation.
    $expected['orientation'] = 'vertical';
    $expected['hasActiveTab'] = TRUE;
    $expected['activeTabId'] = 'toolbar-item-administration';
    $expected['activeTray'] = 'toolbar-item-administration-tray';
    $toolbar_stored_state = JSON::decode($this->getSession()
        ->evaluateScript("sessionStorage.getItem('Drupal.toolbar.toolbarState')"));
    $this->assertSame($expected, $toolbar_stored_state);
    $this->getSession()
        ->resizeWindow(600, 600);
    $this->getSession()
        ->wait(1000, "JSON.parse(sessionStorage.getItem('Drupal.toolbar.toolbarState')).isFixed == false");
    // Update expected state values to reflect the viewport being at a width
    // that is narrow enough that the toolbar isn't fixed.
    $expected['isFixed'] = FALSE;
    $toolbar_stored_state = JSON::decode($this->getSession()
        ->evaluateScript("sessionStorage.getItem('Drupal.toolbar.toolbarState')"));
    $this->assertSame($expected, $toolbar_stored_state);
}

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