class LayoutBuilderBlockContentDependencyTest
Test for installing Layout Builder before Block Content in the same request.
@group layout_builder
Hierarchy
- class \Drupal\KernelTests\KernelTestBase extends \PHPUnit\Framework\TestCase implements \Drupal\Core\DependencyInjection\ServiceProviderInterface uses \Drupal\KernelTests\AssertContentTrait, \Drupal\Tests\RandomGeneratorTrait, \Drupal\Tests\ConfigTestTrait, \Drupal\Tests\ExtensionListTestTrait, \Drupal\Tests\TestRequirementsTrait, \Drupal\Tests\PhpUnitCompatibilityTrait, \Prophecy\PhpUnit\ProphecyTrait, \Drupal\TestTools\Extension\DeprecationBridge\ExpectDeprecationTrait
- class \Drupal\Tests\layout_builder\Kernel\LayoutBuilderBlockContentDependencyTest extends \Drupal\KernelTests\KernelTestBase
Expanded class hierarchy of LayoutBuilderBlockContentDependencyTest
File
-
core/
modules/ layout_builder/ tests/ src/ Kernel/ LayoutBuilderBlockContentDependencyTest.php, line 14
Namespace
Drupal\Tests\layout_builder\KernelView source
class LayoutBuilderBlockContentDependencyTest extends KernelTestBase {
/**
* Test that block_content can be successfully installed after layout_builder.
*
* The InlineBlock plugin class in layout_builder uses
* RefinableDependentAccessTrait, which used to live in block_content, though
* block_content is not a layout_builder dependency. Since the BlockContent
* entity type class also uses the same trait, if, in order and in the same
* request:
* 1. layout_builder is installed first without block_content
* 2. block plugins are discovered
* 3. block_content is installed,
* a fatal error can occur, because the trait was missing before block_content
* is installed and gets aliased to an empty trait. When the installation of
* the block_content module installs the BlockContent entity type, the empty
* trait is missing the methods that need to be implemented from the
* interface.
*
* @see \Drupal\Component\Plugin\Discovery\AttributeClassDiscovery
* @see \Drupal\Component\Discovery\MissingClassDetectionClassLoader
*/
public function testInstallLayoutBuilderAndBlockContent() : void {
$this->assertFalse(\Drupal::moduleHandler()->moduleExists('block_content'));
// Prevent classes in the block_content modules from being loaded before the
// module is installed.
$this->classLoader
->setPsr4("Drupal\\block_content\\", '');
// Install test module that will act on layout_builder being installed and
// at that time does block plugin discovery first, then installs
// block_content.
\Drupal::service('module_installer')->install([
'layout_builder_block_content_dependency_test',
]);
\Drupal::service('module_installer')->install([
'layout_builder',
]);
$this->assertTrue(\Drupal::moduleHandler()->moduleExists('block_content'));
}
}
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.