class BlockRepositoryTest
Same name in other branches
- 9 core/modules/block/tests/src/Unit/BlockRepositoryTest.php \Drupal\Tests\block\Unit\BlockRepositoryTest
- 8.9.x core/modules/block/tests/src/Unit/BlockRepositoryTest.php \Drupal\Tests\block\Unit\BlockRepositoryTest
- 10 core/modules/block/tests/src/Unit/BlockRepositoryTest.php \Drupal\Tests\block\Unit\BlockRepositoryTest
@coversDefaultClass \Drupal\block\BlockRepository @group block
Hierarchy
- class \Drupal\Tests\UnitTestCase extends \PHPUnit\Framework\TestCase uses \Drupal\Tests\PhpUnitCompatibilityTrait, \Prophecy\PhpUnit\ProphecyTrait, \Drupal\TestTools\Extension\DeprecationBridge\ExpectDeprecationTrait, \Drupal\Tests\RandomGeneratorTrait
- class \Drupal\Tests\block\Unit\BlockRepositoryTest extends \Drupal\Tests\UnitTestCase
Expanded class hierarchy of BlockRepositoryTest
File
-
core/
modules/ block/ tests/ src/ Unit/ BlockRepositoryTest.php, line 16
Namespace
Drupal\Tests\block\UnitView source
class BlockRepositoryTest extends UnitTestCase {
/**
* @var \Drupal\block\BlockRepository
*/
protected $blockRepository;
/**
* @var \Drupal\Core\Entity\EntityStorageInterface|\PHPUnit\Framework\MockObject\MockObject
*/
protected $blockStorage;
/**
* @var string
*/
protected $theme;
/**
* @var \Drupal\Core\Plugin\Context\ContextHandlerInterface|\PHPUnit\Framework\MockObject\MockObject
*/
protected $contextHandler;
/**
* {@inheritdoc}
*/
protected function setUp() : void {
parent::setUp();
$active_theme = $this->getMockBuilder('Drupal\\Core\\Theme\\ActiveTheme')
->disableOriginalConstructor()
->getMock();
$this->theme = $this->randomMachineName();
$active_theme->expects($this->atLeastOnce())
->method('getName')
->willReturn($this->theme);
$active_theme->expects($this->atLeastOnce())
->method('getRegions')
->willReturn([
'top',
'center',
'bottom',
]);
$theme_manager = $this->createMock('Drupal\\Core\\Theme\\ThemeManagerInterface');
$theme_manager->expects($this->atLeastOnce())
->method('getActiveTheme')
->willReturn($active_theme);
$this->contextHandler = $this->createMock('Drupal\\Core\\Plugin\\Context\\ContextHandlerInterface');
$this->blockStorage = $this->createMock('Drupal\\Core\\Entity\\EntityStorageInterface');
/** @var \Drupal\Core\Entity\EntityTypeManagerInterface|\PHPUnit\Framework\MockObject\MockObject $entity_type_manager */
$entity_type_manager = $this->createMock(EntityTypeManagerInterface::class);
$entity_type_manager->expects($this->any())
->method('getStorage')
->willReturn($this->blockStorage);
$this->blockRepository = new BlockRepository($entity_type_manager, $theme_manager, $this->contextHandler);
}
/**
* Tests the retrieval of block entities.
*
* @covers ::getVisibleBlocksPerRegion
*
* @dataProvider providerBlocksConfig
*/
public function testGetVisibleBlocksPerRegion(array $blocks_config, array $expected_blocks) : void {
$blocks = [];
foreach ($blocks_config as $block_id => $block_config) {
$block = $this->createMock('Drupal\\block\\BlockInterface');
$block->expects($this->once())
->method('access')
->willReturn($block_config[0]);
$block->expects($block_config[0] ? $this->atLeastOnce() : $this->never())
->method('getRegion')
->willReturn($block_config[1]);
$block->expects($this->any())
->method('label')
->willReturn($block_id);
$block->expects($this->any())
->method('getWeight')
->willReturn($block_config[2]);
$blocks[$block_id] = $block;
}
$this->blockStorage
->expects($this->once())
->method('loadByProperties')
->with([
'theme' => $this->theme,
])
->willReturn($blocks);
$result = [];
$cacheable_metadata = [];
foreach ($this->blockRepository
->getVisibleBlocksPerRegion($cacheable_metadata) as $region => $resulting_blocks) {
$result[$region] = [];
foreach ($resulting_blocks as $plugin_id => $block) {
$result[$region][] = $plugin_id;
}
}
$this->assertEquals($expected_blocks, $result);
}
public static function providerBlocksConfig() {
$blocks_config = [
'block1' => [
AccessResult::allowed(),
'top',
0,
],
// Test a block without access.
'block2' => [
AccessResult::forbidden(),
'bottom',
0,
],
// Test some blocks in the same region with specific weight.
'block4' => [
AccessResult::allowed(),
'bottom',
5,
],
'block3' => [
AccessResult::allowed(),
'bottom',
5,
],
'block5' => [
AccessResult::allowed(),
'bottom',
-5,
],
];
$test_cases = [];
$test_cases[] = [
$blocks_config,
[
'top' => [
'block1',
],
'center' => [],
'bottom' => [
'block5',
'block3',
'block4',
],
],
];
return $test_cases;
}
/**
* Tests the retrieval of block entities that are context-aware.
*
* @covers ::getVisibleBlocksPerRegion
*/
public function testGetVisibleBlocksPerRegionWithContext() : void {
$block = $this->createMock('Drupal\\block\\BlockInterface');
$block->expects($this->once())
->method('access')
->willReturn(AccessResult::allowed()->addCacheTags([
'config:block.block.block_id',
]));
$block->expects($this->once())
->method('getRegion')
->willReturn('top');
$blocks['block_id'] = $block;
$this->blockStorage
->expects($this->once())
->method('loadByProperties')
->with([
'theme' => $this->theme,
])
->willReturn($blocks);
$result = [];
$cacheable_metadata = [];
foreach ($this->blockRepository
->getVisibleBlocksPerRegion($cacheable_metadata) as $region => $resulting_blocks) {
$result[$region] = [];
foreach ($resulting_blocks as $plugin_id => $block) {
$result[$region][] = $plugin_id;
}
}
$expected = [
'top' => [
'block_id',
],
'center' => [],
'bottom' => [],
];
$this->assertSame($expected, $result);
// Assert that the cacheable metadata from the block access results was
// collected.
$this->assertEquals([
'config:block.block.block_id',
], $cacheable_metadata['top']->getCacheTags());
}
}
Members
Title Sort descending | Modifiers | Object type | Summary | Overriden Title |
---|---|---|---|---|
BlockRepositoryTest::$blockRepository | protected | property | ||
BlockRepositoryTest::$blockStorage | protected | property | ||
BlockRepositoryTest::$contextHandler | protected | property | ||
BlockRepositoryTest::$theme | protected | property | ||
BlockRepositoryTest::providerBlocksConfig | public static | function | ||
BlockRepositoryTest::setUp | protected | function | Overrides UnitTestCase::setUp | |
BlockRepositoryTest::testGetVisibleBlocksPerRegion | public | function | Tests the retrieval of block entities. | |
BlockRepositoryTest::testGetVisibleBlocksPerRegionWithContext | public | function | Tests the retrieval of block entities that are context-aware. | |
ExpectDeprecationTrait::expectDeprecation | public | function | Adds an expected deprecation. | |
ExpectDeprecationTrait::getCallableName | private static | function | Returns a callable as a string suitable for inclusion in a message. | |
ExpectDeprecationTrait::setUpErrorHandler | public | function | Sets up the test error handler. | |
ExpectDeprecationTrait::tearDownErrorHandler | public | function | Tears down the test error handler. | |
RandomGeneratorTrait::getRandomGenerator | protected | function | Gets the random generator for the utility methods. | |
RandomGeneratorTrait::randomMachineName | protected | function | Generates a unique random string containing letters and numbers. | |
RandomGeneratorTrait::randomObject | public | function | Generates a random PHP object. | |
RandomGeneratorTrait::randomString | public | function | Generates a pseudo-random string of ASCII characters of codes 32 to 126. | |
UnitTestCase::$root | protected | property | The app root. | |
UnitTestCase::getClassResolverStub | protected | function | Returns a stub class resolver. | |
UnitTestCase::getConfigFactoryStub | public | function | Returns a stub config factory that behaves according to the passed array. | |
UnitTestCase::getConfigStorageStub | public | function | Returns a stub config storage that returns the supplied configuration. | |
UnitTestCase::getContainerWithCacheTagsInvalidator | protected | function | Sets up a container with a cache tags invalidator. | |
UnitTestCase::getStringTranslationStub | public | function | Returns a stub translation manager that just returns the passed string. | |
UnitTestCase::setUpBeforeClass | public static | function |
Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.