Mercurial > hg > isophonics-drupal-site
diff core/modules/block/tests/src/Functional/BlockRenderOrderTest.php @ 0:4c8ae668cc8c
Initial import (non-working)
author | Chris Cannam |
---|---|
date | Wed, 29 Nov 2017 16:09:58 +0000 |
parents | |
children | 129ea1e6d783 |
line wrap: on
line diff
--- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/core/modules/block/tests/src/Functional/BlockRenderOrderTest.php Wed Nov 29 16:09:58 2017 +0000 @@ -0,0 +1,80 @@ +<?php + +namespace Drupal\Tests\block\Functional; + +use Drupal\Component\Utility\Html; +use Drupal\Tests\BrowserTestBase; + +/** + * Tests blocks are being rendered in order by weight. + * + * @group block + */ +class BlockRenderOrderTest extends BrowserTestBase { + + /** + * Modules to install. + * + * @var array + */ + public static $modules = ['node', 'block']; + + protected function setUp() { + parent::setUp(); + // Create a test user. + $end_user = $this->drupalCreateUser([ + 'access content', + ]); + $this->drupalLogin($end_user); + } + + /** + * Tests the render order of the blocks. + */ + public function testBlockRenderOrder() { + // Enable test blocks and place them in the same region. + $region = 'header'; + $test_blocks = [ + 'stark_powered' => [ + 'weight' => '-3', + 'id' => 'stark_powered', + 'label' => 'Test block A', + ], + 'stark_by' => [ + 'weight' => '3', + 'id' => 'stark_by', + 'label' => 'Test block C', + ], + 'stark_drupal' => [ + 'weight' => '3', + 'id' => 'stark_drupal', + 'label' => 'Test block B', + ], + ]; + + // Place the test blocks. + foreach ($test_blocks as $test_block) { + $this->drupalPlaceBlock('system_powered_by_block', [ + 'label' => $test_block['label'], + 'region' => $region, + 'weight' => $test_block['weight'], + 'id' => $test_block['id'], + ]); + } + + $this->drupalGet(''); + $test_content = $this->getRawContent(''); + + $controller = $this->container->get('entity_type.manager')->getStorage('block'); + foreach ($controller->loadMultiple() as $return_block) { + $id = $return_block->id(); + if ($return_block_weight = $return_block->getWeight()) { + $this->assertTrue($test_blocks[$id]['weight'] == $return_block_weight, 'Block weight is set as "' . $return_block_weight . '" for ' . $id . ' block.'); + $position[$id] = strpos($test_content, Html::getClass('block-' . $test_blocks[$id]['id'])); + } + } + $this->assertTrue($position['stark_powered'] < $position['stark_by'], 'Blocks with different weight are rendered in the correct order.'); + $this->assertTrue($position['stark_drupal'] < $position['stark_by'], 'Blocks with identical weight are rendered in alphabetical order.'); + } + +}