class BlockPageVariantTest

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
  2. 8.9.x core/modules/block/tests/src/Unit/Plugin/DisplayVariant/BlockPageVariantTest.php \Drupal\Tests\block\Unit\Plugin\DisplayVariant\BlockPageVariantTest
  3. 11.x core/modules/block/tests/src/Unit/Plugin/DisplayVariant/BlockPageVariantTest.php \Drupal\Tests\block\Unit\Plugin\DisplayVariant\BlockPageVariantTest

@coversDefaultClass \Drupal\block\Plugin\DisplayVariant\BlockPageVariant
@group block

Hierarchy

Expanded class hierarchy of BlockPageVariantTest

File

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

Namespace

Drupal\Tests\block\Unit\Plugin\DisplayVariant
View source
class BlockPageVariantTest extends UnitTestCase {
  
  /**
   * The block repository.
   *
   * @var \Drupal\block\BlockRepositoryInterface|\PHPUnit\Framework\MockObject\MockObject
   */
  protected $blockRepository;
  
  /**
   * The block view builder.
   *
   * @var \Drupal\Core\Entity\EntityViewBuilderInterface|\PHPUnit\Framework\MockObject\MockObject
   */
  protected $blockViewBuilder;
  
  /**
   * The plugin context handler.
   *
   * @var \Drupal\Core\Plugin\Context\ContextHandlerInterface|\PHPUnit\Framework\MockObject\MockObject
   */
  protected $contextHandler;
  
  /**
   * Sets up a display variant plugin for testing.
   *
   * @param array $configuration
   *   An array of plugin configuration.
   * @param array $definition
   *   The plugin definition array.
   *
   * @return \Drupal\block\Plugin\DisplayVariant\BlockPageVariant
   *   A test display variant plugin.
   */
  public function setUpDisplayVariant($configuration = [], $definition = []) {
    $container = new Container();
    $cache_context_manager = $this->getMockBuilder('Drupal\\Core\\Cache\\Context\\CacheContextsManager')
      ->disableOriginalConstructor()
      ->onlyMethods([
      'assertValidTokens',
    ])
      ->getMock();
    $container->set('cache_contexts_manager', $cache_context_manager);
    $cache_context_manager->expects($this->any())
      ->method('assertValidTokens')
      ->willReturn(TRUE);
    \Drupal::setContainer($container);
    $this->blockRepository = $this->createMock('Drupal\\block\\BlockRepositoryInterface');
    $this->blockViewBuilder = $this->createMock('Drupal\\Core\\Entity\\EntityViewBuilderInterface');
    return new BlockPageVariant($configuration, 'test', $definition, $this->blockRepository, $this->blockViewBuilder, [
      'config:block_list',
    ]);
  }
  public static function providerBuild() {
    $blocks_config = [
      'block1' => [
        // region, is main content block, is messages block, is title block
'top',
        FALSE,
        FALSE,
        FALSE,
      ],
      // Test multiple blocks in the same region.
'block2' => [
        'bottom',
        FALSE,
        FALSE,
        FALSE,
      ],
      'block3' => [
        'bottom',
        FALSE,
        FALSE,
        FALSE,
      ],
      // Test a block implementing MainContentBlockPluginInterface.
'block4' => [
        'center',
        TRUE,
        FALSE,
        FALSE,
      ],
      // Test a block implementing MessagesBlockPluginInterface.
'block5' => [
        'center',
        FALSE,
        TRUE,
        FALSE,
      ],
      // Test a block implementing TitleBlockPluginInterface.
'block6' => [
        'center',
        FALSE,
        FALSE,
        TRUE,
      ],
    ];
    $test_cases = [];
    $test_cases[] = [
      $blocks_config,
      6,
      [
        '#cache' => [
          'tags' => [
            'config:block_list',
            'route',
          ],
          'contexts' => [],
          'max-age' => -1,
        ],
        'top' => [
          'block1' => [],
          '#sorted' => TRUE,
        ],
        // The main content was rendered via a block.
'center' => [
          'block4' => [],
          'block5' => [],
          'block6' => [],
          '#sorted' => TRUE,
        ],
        'bottom' => [
          'block2' => [],
          'block3' => [],
          '#sorted' => TRUE,
        ],
      ],
    ];
    unset($blocks_config['block5']);
    $test_cases[] = [
      $blocks_config,
      5,
      [
        '#cache' => [
          'tags' => [
            'config:block_list',
            'route',
          ],
          'contexts' => [],
          'max-age' => -1,
        ],
        'top' => [
          'block1' => [],
          '#sorted' => TRUE,
        ],
        'center' => [
          'block4' => [],
          'block6' => [],
          '#sorted' => TRUE,
        ],
        'bottom' => [
          'block2' => [],
          'block3' => [],
          '#sorted' => TRUE,
        ],
        // The messages are rendered via the fallback in case there is no block
        // rendering the main content.
'content' => [
          'messages' => [
            '#weight' => -1000,
            '#type' => 'status_messages',
            '#include_fallback' => TRUE,
          ],
        ],
      ],
    ];
    unset($blocks_config['block4']);
    unset($blocks_config['block6']);
    $test_cases[] = [
      $blocks_config,
      3,
      [
        '#cache' => [
          'tags' => [
            'config:block_list',
            'route',
          ],
          'contexts' => [],
          'max-age' => -1,
        ],
        'top' => [
          'block1' => [],
          '#sorted' => TRUE,
        ],
        'bottom' => [
          'block2' => [],
          'block3' => [],
          '#sorted' => TRUE,
        ],
        // The main content & messages are rendered via the fallback in case
        // there are no blocks rendering them.
'content' => [
          'system_main' => [
            '#markup' => 'Hello kittens!',
          ],
          'messages' => [
            '#weight' => -1000,
            '#type' => 'status_messages',
            '#include_fallback' => TRUE,
          ],
        ],
      ],
    ];
    return $test_cases;
  }
  
  /**
   * Tests the building of a full page variant.
   *
   * @covers ::build
   *
   * @dataProvider providerBuild
   */
  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);
  }
  
  /**
   * Tests the building of a full page variant with no main content set.
   *
   * @covers ::build
   */
  public function testBuildWithoutMainContent() : void {
    $display_variant = $this->setUpDisplayVariant();
    $this->blockRepository
      ->expects($this->once())
      ->method('getVisibleBlocksPerRegion')
      ->willReturn([]);
    $expected = [
      '#cache' => [
        'tags' => [
          'config:block_list',
        ],
        'contexts' => [],
        'max-age' => -1,
      ],
      'content' => [
        'system_main' => [],
        'messages' => [
          '#weight' => -1000,
          '#type' => 'status_messages',
          '#include_fallback' => TRUE,
        ],
      ],
    ];
    $this->assertSame($expected, $display_variant->build());
  }

}

Members

Title Sort descending Deprecated Modifiers Object type Summary Overrides
BlockPageVariantTest::$blockRepository protected property The block repository.
BlockPageVariantTest::$blockViewBuilder protected property The block view builder.
BlockPageVariantTest::$contextHandler protected property The plugin context handler.
BlockPageVariantTest::providerBuild public static function
BlockPageVariantTest::setUpDisplayVariant public function Sets up a display variant plugin for testing.
BlockPageVariantTest::testBuild public function Tests the building of a full page variant.
BlockPageVariantTest::testBuildWithoutMainContent public function Tests the building of a full page variant with no main content set.
PhpUnitWarnings::$deprecationWarnings private static property Deprecation warnings from PHPUnit to raise with @trigger_error().
PhpUnitWarnings::addWarning public function Converts PHPUnit deprecation warnings to E_USER_DEPRECATED.
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.
RandomGeneratorTrait::randomStringValidate Deprecated public function Callback for random string validation.
UnitTestCase::$root protected property The app root. 1
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::setUp protected function 358
UnitTestCase::setUpBeforeClass public static function
UnitTestCase::__get public function

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