LayoutBuilderOverridesEditingThemeTest.php

Same filename in other branches
  1. 10 core/modules/layout_builder/tests/src/Functional/LayoutBuilderOverridesEditingThemeTest.php

Namespace

Drupal\Tests\layout_builder\Functional

File

core/modules/layout_builder/tests/src/Functional/LayoutBuilderOverridesEditingThemeTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests\layout_builder\Functional;

use Drupal\block_content\Entity\BlockContent;
use Drupal\block_content\Entity\BlockContentType;
use Drupal\layout_builder\Entity\LayoutBuilderEntityViewDisplay;
use Drupal\Tests\layout_builder\Traits\EnableLayoutBuilderTrait;
use Drupal\user\Entity\Role;
use Drupal\user\UserInterface;

/**
 * Tests overrides editing uses the correct theme.
 *
 * Block content is used for this test as its canonical & editing routes
 * are in the admin section, so we need to test that layout builder editing
 * uses the front end theme.
 *
 * @group layout_builder
 */
class LayoutBuilderOverridesEditingThemeTest extends LayoutBuilderTestBase {
    use EnableLayoutBuilderTrait;
    
    /**
     * {@inheritdoc}
     */
    protected $defaultTheme = 'test_theme';
    
    /**
     * {@inheritdoc}
     */
    protected static $modules = [
        'block_content',
    ];
    
    /**
     * Permissions to grant admin user.
     */
    protected array $permissions = [
        'administer blocks',
        'access block library',
        'administer block types',
        'administer block content',
        'administer block_content display',
        'configure any layout',
        'view the administration theme',
        'edit any basic block content',
    ];
    
    /**
     * Admin user.
     */
    protected UserInterface $adminUser;
    
    /**
     * {@inheritdoc}
     */
    protected function setUp() : void {
        parent::setUp();
        // Create a basic block content type.
        BlockContentType::create([
            'id' => 'basic',
            'label' => 'Basic',
            'revision' => FALSE,
        ])->save();
        $this->adminUser = $this->drupalCreateUser($this->permissions);
    }
    
    /**
     * Tests editing block content with Layout Builder.
     */
    public function testEditing() : void {
        // Create a new role for additional permissions needed.
        $role = Role::create([
            'id' => 'layout_builder_tester',
            'label' => 'Layout Builder Tester',
        ]);
        // Set a different theme for the admin pages. So we can assert the theme
        // in Layout Builder is not the same as the admin theme.
        \Drupal::service('theme_installer')->install([
            'claro',
        ]);
        $this->config('system.theme')
            ->set('admin', 'claro')
            ->save();
        // Enable layout builder for the block content display.
        $display = LayoutBuilderEntityViewDisplay::create([
            'targetEntityType' => 'block_content',
            'bundle' => 'basic',
            'mode' => 'default',
            'status' => TRUE,
        ]);
        $display->save();
        $this->enableLayoutBuilder($display);
        $role->grantPermission('configure all basic block_content layout overrides');
        $role->save();
        $this->adminUser
            ->addRole($role->id())
            ->save();
        $this->drupalLogin($this->adminUser);
        // Create a block content and test the themes used.
        $blockContent = BlockContent::create([
            'info' => $this->randomMachineName(),
            'type' => 'basic',
            'langcode' => 'en',
        ]);
        $blockContent->save();
        // Assert the test_theme is being used for overrides.
        $this->drupalGet('admin/content/block/' . $blockContent->id() . '/layout');
        $this->assertSession()
            ->statusCodeEquals(200);
        // Assert the test_theme is being used.
        $this->assertSession()
            ->responseContains('test_theme/kitten.css');
        // Assert the claro theme is not being used.
        $this->assertSession()
            ->elementNotExists('css', '#block-claro-content');
        // Assert the default still uses the test_theme.
        $this->drupalGet('admin/structure/block-content/manage/basic/display/default/layout');
        $this->assertSession()
            ->statusCodeEquals(200);
        $this->assertSession()
            ->responseContains('test_theme/kitten.css');
        $this->assertSession()
            ->elementNotExists('css', '#block-claro-content');
    }

}

Classes

Title Deprecated Summary
LayoutBuilderOverridesEditingThemeTest Tests overrides editing uses the correct theme.

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