class BlockRepositoryTest in Drupal 8
Same name and namespace in other branches
- 9 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 PhpunitCompatibilityTrait
- class \Drupal\Tests\block\Unit\BlockRepositoryTest
Expanded class hierarchy of BlockRepositoryTest
File
- core/
modules/ block/ tests/ src/ Unit/ BlockRepositoryTest.php, line 21 - Contains \Drupal\Tests\block\Unit\BlockRepositoryTest.
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() {
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')
->will($this
->returnValue($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) {
$blocks = [];
foreach ($blocks_config as $block_id => $block_config) {
$block = $this
->createMock('Drupal\\block\\BlockInterface');
$block
->expects($this
->once())
->method('access')
->will($this
->returnValue($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 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() {
$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
Name | Modifiers | Type | Description | Overrides |
---|---|---|---|---|
BlockRepositoryTest:: |
protected | property | ||
BlockRepositoryTest:: |
protected | property | ||
BlockRepositoryTest:: |
protected | property | ||
BlockRepositoryTest:: |
protected | property | ||
BlockRepositoryTest:: |
public | function | ||
BlockRepositoryTest:: |
protected | function |
Overrides UnitTestCase:: |
|
BlockRepositoryTest:: |
public | function | Tests the retrieval of block entities. | |
BlockRepositoryTest:: |
public | function | Tests the retrieval of block entities that are context-aware. | |
PhpunitCompatibilityTrait:: |
public | function | Returns a mock object for the specified class using the available method. | |
PhpunitCompatibilityTrait:: |
public | function | Compatibility layer for PHPUnit 6 to support PHPUnit 4 code. | |
UnitTestCase:: |
protected | property | The random generator. | |
UnitTestCase:: |
protected | property | The app root. | 1 |
UnitTestCase:: |
protected | function | Asserts if two arrays are equal by sorting them first. | |
UnitTestCase:: |
protected | function | Mocks a block with a block plugin. | 1 |
UnitTestCase:: |
protected | function | Returns a stub class resolver. | |
UnitTestCase:: |
public | function | Returns a stub config factory that behaves according to the passed array. | |
UnitTestCase:: |
public | function | Returns a stub config storage that returns the supplied configuration. | |
UnitTestCase:: |
protected | function | Sets up a container with a cache tags invalidator. | |
UnitTestCase:: |
protected | function | Gets the random generator for the utility methods. | |
UnitTestCase:: |
public | function | Returns a stub translation manager that just returns the passed string. | |
UnitTestCase:: |
public | function | Generates a unique random string containing letters and numbers. |