annotate core/modules/block/tests/src/Functional/BlockRenderOrderTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Tests\block\Functional;
Chris@0 4
Chris@0 5 use Drupal\Component\Utility\Html;
Chris@0 6 use Drupal\Tests\BrowserTestBase;
Chris@0 7
Chris@0 8 /**
Chris@0 9 * Tests blocks are being rendered in order by weight.
Chris@0 10 *
Chris@0 11 * @group block
Chris@0 12 */
Chris@0 13 class BlockRenderOrderTest extends BrowserTestBase {
Chris@0 14
Chris@0 15 /**
Chris@0 16 * Modules to install.
Chris@0 17 *
Chris@0 18 * @var array
Chris@0 19 */
Chris@0 20 public static $modules = ['node', 'block'];
Chris@0 21
Chris@0 22 protected function setUp() {
Chris@0 23 parent::setUp();
Chris@0 24 // Create a test user.
Chris@0 25 $end_user = $this->drupalCreateUser([
Chris@0 26 'access content',
Chris@0 27 ]);
Chris@0 28 $this->drupalLogin($end_user);
Chris@0 29 }
Chris@0 30
Chris@0 31 /**
Chris@0 32 * Tests the render order of the blocks.
Chris@0 33 */
Chris@0 34 public function testBlockRenderOrder() {
Chris@0 35 // Enable test blocks and place them in the same region.
Chris@0 36 $region = 'header';
Chris@0 37 $test_blocks = [
Chris@0 38 'stark_powered' => [
Chris@0 39 'weight' => '-3',
Chris@0 40 'id' => 'stark_powered',
Chris@0 41 'label' => 'Test block A',
Chris@0 42 ],
Chris@0 43 'stark_by' => [
Chris@0 44 'weight' => '3',
Chris@0 45 'id' => 'stark_by',
Chris@0 46 'label' => 'Test block C',
Chris@0 47 ],
Chris@0 48 'stark_drupal' => [
Chris@0 49 'weight' => '3',
Chris@0 50 'id' => 'stark_drupal',
Chris@0 51 'label' => 'Test block B',
Chris@0 52 ],
Chris@0 53 ];
Chris@0 54
Chris@0 55 // Place the test blocks.
Chris@0 56 foreach ($test_blocks as $test_block) {
Chris@0 57 $this->drupalPlaceBlock('system_powered_by_block', [
Chris@0 58 'label' => $test_block['label'],
Chris@0 59 'region' => $region,
Chris@0 60 'weight' => $test_block['weight'],
Chris@0 61 'id' => $test_block['id'],
Chris@0 62 ]);
Chris@0 63 }
Chris@0 64
Chris@0 65 $this->drupalGet('');
Chris@17 66 $test_content = $this->getSession()->getPage()->getContent();
Chris@0 67
Chris@0 68 $controller = $this->container->get('entity_type.manager')->getStorage('block');
Chris@0 69 foreach ($controller->loadMultiple() as $return_block) {
Chris@0 70 $id = $return_block->id();
Chris@0 71 if ($return_block_weight = $return_block->getWeight()) {
Chris@0 72 $this->assertTrue($test_blocks[$id]['weight'] == $return_block_weight, 'Block weight is set as "' . $return_block_weight . '" for ' . $id . ' block.');
Chris@0 73 $position[$id] = strpos($test_content, Html::getClass('block-' . $test_blocks[$id]['id']));
Chris@0 74 }
Chris@0 75 }
Chris@0 76 $this->assertTrue($position['stark_powered'] < $position['stark_by'], 'Blocks with different weight are rendered in the correct order.');
Chris@0 77 $this->assertTrue($position['stark_drupal'] < $position['stark_by'], 'Blocks with identical weight are rendered in alphabetical order.');
Chris@0 78 }
Chris@0 79
Chris@0 80 }