function SettingsTrayIntegrationTest::testQuickEditLinks

Tests QuickEdit links behavior.

File

core/modules/quickedit/tests/src/FunctionalJavascript/SettingsTrayIntegrationTest.php, line 61

Class

SettingsTrayIntegrationTest
Test Settings Tray and Quick Edit modules integration.

Namespace

Drupal\Tests\quickedit\FunctionalJavascript

Code

public function testQuickEditLinks() {
    $quick_edit_selector = '#quickedit-entity-toolbar';
    $node_selector = '[data-quickedit-entity-id="node/1"]';
    $body_selector = '[data-quickedit-field-id="node/1/body/en/full"]';
    $web_assert = $this->assertSession();
    // Create a Content type and two test nodes.
    $this->createContentType([
        'type' => 'page',
    ]);
    $auth_role = Role::load(Role::AUTHENTICATED_ID);
    $this->grantPermissions($auth_role, [
        'edit any page content',
        'access content',
    ]);
    $node = $this->createNode([
        'title' => 'Page One',
        'type' => 'page',
        'body' => [
            [
                'value' => 'Regular NODE body for the test.',
                'format' => 'plain_text',
            ],
        ],
    ]);
    $page = $this->getSession()
        ->getPage();
    $block_plugin = 'system_powered_by_block';
    foreach ($this->getTestThemes() as $theme) {
        $this->enableTheme($theme);
        $block = $this->placeBlock($block_plugin);
        $block_selector = $this->getBlockSelector($block);
        // Load the same page twice.
        foreach ([
            1,
            2,
        ] as $page_load_times) {
            $this->drupalGet('node/' . $node->id());
            // The 2nd page load we should already be in edit mode.
            if ($page_load_times == 1) {
                $this->enableEditMode();
            }
            // In Edit mode clicking field should open QuickEdit toolbar.
            $page->find('css', $body_selector)
                ->click();
            $this->assertElementVisibleAfterWait('css', $quick_edit_selector);
            $this->disableEditMode();
            // Exiting Edit mode should close QuickEdit toolbar.
            $web_assert->elementNotExists('css', $quick_edit_selector);
            // When not in Edit mode QuickEdit toolbar should not open.
            $page->find('css', $body_selector)
                ->click();
            $web_assert->elementNotExists('css', $quick_edit_selector);
            $this->enableEditMode();
            $this->openBlockForm($block_selector);
            $page->find('css', $body_selector)
                ->click();
            $this->assertElementVisibleAfterWait('css', $quick_edit_selector);
            // Off-canvas dialog should be closed when opening QuickEdit toolbar.
            $this->waitForOffCanvasToClose();
            $this->openBlockForm($block_selector);
            // QuickEdit toolbar should be closed when opening Off-canvas dialog.
            $web_assert->elementNotExists('css', $quick_edit_selector);
        }
        // Check using contextual links to invoke QuickEdit and open the tray.
        $this->drupalGet('node/' . $node->id());
        $web_assert->assertWaitOnAjaxRequest();
        $this->disableEditMode();
        // Open QuickEdit toolbar before going into Edit mode.
        $this->clickContextualLink($node_selector, "Quick edit");
        $this->assertElementVisibleAfterWait('css', $quick_edit_selector);
        // Open off-canvas and enter Edit mode via contextual link.
        $this->clickContextualLink($block_selector, "Quick edit");
        $this->waitForOffCanvasToOpen();
        // QuickEdit toolbar should be closed when opening off-canvas dialog.
        $web_assert->waitForElementRemoved('css', $quick_edit_selector);
        // Open QuickEdit toolbar via contextual link while in Edit mode.
        $this->clickContextualLink($node_selector, "Quick edit", FALSE);
        $this->waitForOffCanvasToClose();
        $this->assertElementVisibleAfterWait('css', $quick_edit_selector);
        $this->disableEditMode();
    }
}

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