function BlockPageVariantTest::testBuild

Same name and namespace in other branches
  1. 9 core/modules/block/tests/src/Unit/Plugin/DisplayVariant/BlockPageVariantTest.php \Drupal\Tests\block\Unit\Plugin\DisplayVariant\BlockPageVariantTest::testBuild()
  2. 8.9.x core/modules/block/tests/src/Unit/Plugin/DisplayVariant/BlockPageVariantTest.php \Drupal\Tests\block\Unit\Plugin\DisplayVariant\BlockPageVariantTest::testBuild()
  3. 10 core/modules/block/tests/src/Unit/Plugin/DisplayVariant/BlockPageVariantTest.php \Drupal\Tests\block\Unit\Plugin\DisplayVariant\BlockPageVariantTest::testBuild()

Tests the building of a full page variant.

@covers ::build

@dataProvider providerBuild

File

core/modules/block/tests/src/Unit/Plugin/DisplayVariant/BlockPageVariantTest.php, line 204

Class

BlockPageVariantTest
@coversDefaultClass <a href="/api/drupal/core%21modules%21block%21src%21Plugin%21DisplayVariant%21BlockPageVariant.php/class/BlockPageVariant/11.x" title="Provides a page display variant that decorates the main content with blocks." class="local">\Drupal\block\Plugin\DisplayVariant\BlockPageVariant</a> @group block

Namespace

Drupal\Tests\block\Unit\Plugin\DisplayVariant

Code

public function testBuild(array $blocks_config, $visible_block_count, array $expected_render_array) : void {
    $display_variant = $this->setUpDisplayVariant();
    $display_variant->setMainContent([
        '#markup' => 'Hello kittens!',
    ]);
    $blocks = [
        'top' => [],
        'center' => [],
        'bottom' => [],
    ];
    $block_plugin = $this->createMock('Drupal\\Core\\Block\\BlockPluginInterface');
    $main_content_block_plugin = $this->createMock('Drupal\\Core\\Block\\MainContentBlockPluginInterface');
    $messages_block_plugin = $this->createMock('Drupal\\Core\\Block\\MessagesBlockPluginInterface');
    $title_block_plugin = $this->createMock('Drupal\\Core\\Block\\TitleBlockPluginInterface');
    foreach ($blocks_config as $block_id => $block_config) {
        $block = $this->createMock('Drupal\\block\\BlockInterface');
        $block->expects($this->atLeastOnce())
            ->method('getPlugin')
            ->willReturn($block_config[1] ? $main_content_block_plugin : ($block_config[2] ? $messages_block_plugin : ($block_config[3] ? $title_block_plugin : $block_plugin)));
        $blocks[$block_config[0]][$block_id] = $block;
    }
    $this->blockViewBuilder
        ->expects($this->exactly($visible_block_count))
        ->method('view')
        ->willReturn([]);
    $this->blockRepository
        ->expects($this->once())
        ->method('getVisibleBlocksPerRegion')
        ->willReturnCallback(function (&$cacheable_metadata) use ($blocks) {
        $cacheable_metadata['top'] = (new CacheableMetadata())->addCacheTags([
            'route',
        ]);
        return $blocks;
    });
    $value = $display_variant->build();
    $this->assertSame($expected_render_array, $value);
}

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