View source
<?php
namespace Drupal\Tests\layout_builder_styles\Functional;
use Drupal\layout_builder\Entity\LayoutBuilderEntityViewDisplay;
use Drupal\node\Entity\Node;
use Drupal\Tests\BrowserTestBase;
use Drupal\layout_builder_styles\Entity\LayoutBuilderStyle;
class LayoutBuilderStyleTest extends BrowserTestBase {
protected $defaultTheme = 'stark';
public static $modules = [
'layout_builder',
'block',
'block_content',
'node',
'layout_builder_styles',
];
protected function setUp() : void {
parent::setUp();
$this
->drupalPlaceBlock('local_tasks_block');
$this
->createContentType([
'type' => 'bundle_with_section_field',
'name' => 'Bundle with section field',
]);
LayoutBuilderEntityViewDisplay::load('node.bundle_with_section_field.default')
->enableLayoutBuilder()
->setOverridable()
->save();
}
public function testSectionStyles() {
$assert_session = $this
->assertSession();
$page = $this
->getSession()
->getPage();
$section_node = $this
->createNode([
'type' => 'bundle_with_section_field',
'title' => 'The first node title',
'body' => [
[
'value' => 'The first node body',
],
],
]);
$this
->drupalLogin($this
->drupalCreateUser([
'configure any layout',
'manage layout builder styles',
'administer layout builder styles configuration',
]));
LayoutBuilderStyle::create([
'id' => 'Foobar',
'label' => 'Foobar',
'classes' => 'foo-style-class bar-style-class',
'type' => 'section',
])
->save();
LayoutBuilderStyle::create([
'id' => 'Foobar2',
'label' => 'Foobar2',
'classes' => 'foo2-style-class bar2-style-class',
'type' => 'section',
])
->save();
$this
->drupalGet('node/' . $section_node
->id());
$assert_session
->responseNotContains('foo-style-class bar-style-class');
$assert_session
->responseNotContains('foo2-style-class bar2-style-class');
$page
->clickLink('Layout');
$page
->clickLink('Add section');
$page
->clickLink('Two column');
$assert_session
->elementExists('css', 'select#edit-layout-builder-style option');
$page
->selectFieldOption('edit-layout-builder-style', 'Foobar');
$page
->pressButton('Add section');
$page
->pressButton('Save layout');
$assert_session
->responseContains('foo-style-class bar-style-class');
$assert_session
->responseNotContains('foo2-style-class bar2-style-class');
$this
->drupalGet('admin/config/content/layout_builder_style/config');
$page
->selectFieldOption('edit-multiselect-multiple', 'multiple');
$page
->selectFieldOption('edit-form-type-multiple-select', 'multiple-select');
$page
->pressButton('Save configuration');
$this
->drupalGet('layout_builder/configure/section/overrides/node.' . $section_node
->id() . '/0');
$page
->selectFieldOption('edit-layout-builder-style', 'Foobar', TRUE);
$page
->selectFieldOption('edit-layout-builder-style', 'Foobar2', TRUE);
$page
->pressButton('Update');
$assert_session
->responseContains('foo-style-class bar-style-class');
$assert_session
->responseContains('foo2-style-class bar2-style-class');
}
public function testBlockStyles() {
$assert_session = $this
->assertSession();
$page = $this
->getSession()
->getPage();
$block_node = $this
->createNode([
'type' => 'bundle_with_section_field',
'title' => 'The first node title',
'body' => [
[
'value' => 'The first node body',
],
],
]);
$this
->drupalLogin($this
->drupalCreateUser([
'configure any layout',
'manage layout builder styles',
'administer layout builder styles configuration',
]));
LayoutBuilderStyle::create([
'id' => 'Foobar',
'label' => 'Foobar',
'classes' => 'foo-style-class bar-style-class',
'type' => 'component',
])
->save();
LayoutBuilderStyle::create([
'id' => 'Foobar2',
'label' => 'Foobar2',
'classes' => 'foo2-style-class bar2-style-class',
'type' => 'component',
])
->save();
$this
->drupalGet('node/' . $block_node
->id());
$assert_session
->responseNotContains('foo-style-class bar-style-class');
$assert_session
->responseNotContains('foo2-style-class bar2-style-class');
$page
->clickLink('Layout');
$page
->clickLink('Add block');
$page
->clickLink('Powered by Drupal');
$assert_session
->elementExists('css', 'select#edit-layout-builder-style option');
$page
->selectFieldOption('edit-layout-builder-style', 'Foobar');
$page
->pressButton('Add block');
$page
->pressButton('Save layout');
$assert_session
->responseContains('foo-style-class bar-style-class');
$assert_session
->responseNotContains('foo2-style-class bar2-style-class');
$this
->drupalGet('admin/config/content/layout_builder_style/config');
$page
->selectFieldOption('edit-multiselect-multiple', 'multiple');
$page
->selectFieldOption('edit-form-type-multiple-select', 'multiple-select');
$page
->pressButton('Save configuration');
$components = Node::load($block_node
->id())
->get('layout_builder__layout')
->getSection(0)
->getComponents();
end($components);
$uuid = key($components);
$this
->drupalGet('layout_builder/update/block/overrides/node.' . $block_node
->id() . '/0/content/' . $uuid);
$page
->selectFieldOption('edit-layout-builder-style', 'Foobar', TRUE);
$page
->selectFieldOption('edit-layout-builder-style', 'Foobar2', TRUE);
$page
->pressButton('Update');
$page
->pressButton('Save layout');
$assert_session
->responseContains('foo-style-class bar-style-class');
$assert_session
->responseContains('foo2-style-class bar2-style-class');
$this
->drupalGet('layout_builder/update/block/overrides/node.' . $block_node
->id() . '/0/content/' . $uuid);
$page
->selectFieldOption('edit-layout-builder-style', 'Foobar');
$page
->pressButton('Update');
$page
->pressButton('Save layout');
$assert_session
->responseContains('foo-style-class bar-style-class');
$assert_session
->responseNotContains('foo2-style-class bar2-style-class');
$this
->drupalGet('admin/config/content/layout_builder_style/config');
$page
->selectFieldOption('edit-multiselect-multiple', 'multiple');
$page
->selectFieldOption('edit-form-type-checkboxes', 'checkboxes');
$page
->pressButton('Save configuration');
$this
->drupalGet('layout_builder/update/block/overrides/node.' . $block_node
->id() . '/0/content/' . $uuid);
$page
->uncheckField('edit-layout-builder-style-foobar', 'Foobar');
$page
->selectFieldOption('edit-layout-builder-style-foobar2', 'Foobar2');
$page
->pressButton('Update');
$page
->pressButton('Save layout');
$assert_session
->responseNotContains('foo-style-class bar-style-class');
$assert_session
->responseContains('foo2-style-class bar2-style-class');
}
}