function InlineBlockTest::testAddWorkFlow

Same name and namespace in other branches
  1. 9 core/modules/layout_builder/tests/src/FunctionalJavascript/InlineBlockTest.php \Drupal\Tests\layout_builder\FunctionalJavascript\InlineBlockTest::testAddWorkFlow()
  2. 8.9.x core/modules/layout_builder/tests/src/FunctionalJavascript/InlineBlockTest.php \Drupal\Tests\layout_builder\FunctionalJavascript\InlineBlockTest::testAddWorkFlow()
  3. 10 core/modules/layout_builder/tests/src/FunctionalJavascript/InlineBlockTest.php \Drupal\Tests\layout_builder\FunctionalJavascript\InlineBlockTest::testAddWorkFlow()

Tests the workflow for adding an inline block depending on number of types.

Throws

\Behat\Mink\Exception\ElementNotFoundException

\Behat\Mink\Exception\ExpectationException

File

core/modules/layout_builder/tests/src/FunctionalJavascript/InlineBlockTest.php, line 536

Class

InlineBlockTest
Tests that the inline block feature works correctly.

Namespace

Drupal\Tests\layout_builder\FunctionalJavascript

Code

public function testAddWorkFlow() : void {
  $assert_session = $this->assertSession();
  $page = $this->getSession()
    ->getPage();
  $type_storage = $this->container
    ->get('entity_type.manager')
    ->getStorage('block_content_type');
  foreach ($type_storage->loadByProperties() as $type) {
    $type->delete();
  }
  $this->drupalLogin($this->drupalCreateUser([
    'access contextual links',
    'configure any layout',
    'administer node display',
    'administer node fields',
    'create and edit custom blocks',
    'configure navigation layout',
  ]));
  // Enable layout builder and overrides.
  $this->drupalGet(static::FIELD_UI_PREFIX . '/display/default');
  $this->submitForm([
    'layout[enabled]' => TRUE,
    'layout[allow_custom]' => TRUE,
  ], 'Save');
  $layout_default_path = 'admin/structure/types/manage/bundle_with_section_field/display/default/layout';
  $this->drupalGet($layout_default_path);
  // Add a basic block with the body field set.
  $page->clickLink('Add block');
  $assert_session->assertWaitOnAjaxRequest();
  // Confirm that with no block content types the link does not appear.
  $assert_session->linkNotExists('Create content block');
  $this->createBlockContentType('basic', 'Basic block');
  $this->drupalGet($layout_default_path);
  // Add a basic block with the body field set.
  $page->clickLink('Add block');
  $assert_session->assertWaitOnAjaxRequest();
  // Confirm with only 1 type the "Create content block" link goes directly t
  // block add form.
  $assert_session->linkNotExists('Basic block');
  $this->clickLink('Create content block');
  $assert_session->assertWaitOnAjaxRequest();
  $assert_session->fieldExists('Title');
  $this->createBlockContentType('advanced', 'Advanced block');
  $this->drupalGet($layout_default_path);
  // Add a basic block with the body field set.
  $page->clickLink('Add block');
  // Confirm that, when more than 1 type exists, "Create content block" shows
  // a list of block types.
  $assert_session->assertWaitOnAjaxRequest();
  $assert_session->linkNotExists('Basic block');
  $assert_session->linkNotExists('Advanced block');
  $this->clickLink('Create content block');
  $assert_session->assertWaitOnAjaxRequest();
  $assert_session->fieldNotExists('Title');
  $assert_session->linkExists('Basic block');
  $assert_session->linkExists('Advanced block');
  $this->clickLink('Advanced block');
  $assert_session->assertWaitOnAjaxRequest();
  $assert_session->fieldExists('Title');
  // Confirm that Create Content block opt out logic works for Navigation.
  $this->drupalGet('/admin/config/user-interface/navigation-block');
  $this->getSession()
    ->getPage()
    ->pressButton('Enable edit mode');
  $this->assertSession()
    ->assertWaitOnAjaxRequest();
  $page->clickLink('Add block');
  $assert_session->assertWaitOnAjaxRequest();
  $assert_session->pageTextContains('Choose a block');
  $assert_session->linkNotExists('Create content block');
  // Confirm that internal routes for adding blocks are not accessible when
  // inline block creation is disabled.
  $this->drupalGet('/admin/config/user-interface/navigation-block');
  $this->drupalGet('/layout_builder/choose/inline-block/navigation/navigation.block_layout/0/content');
  $assert_session->pageTextContains('You are not authorized to access this page');
  $this->drupalGet('/layout_builder/add/block/navigation/navigation.block_layout/0/content/inline_block%3Abanner_block');
  $assert_session->pageTextContains('You are not authorized to access this page');
}

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