function DevelLayoutInfoTest::testLayoutList

Same name and namespace in other branches
  1. 4.x tests/src/Functional/DevelLayoutInfoTest.php \Drupal\Tests\devel\Functional\DevelLayoutInfoTest::testLayoutList()

Tests layout info page.

File

tests/src/Functional/DevelLayoutInfoTest.php, line 43

Class

DevelLayoutInfoTest
Tests layout info pages and links.

Namespace

Drupal\Tests\devel\Functional

Code

public function testLayoutList() : void {
  $this->drupalGet('/devel/layouts');
  $this->assertSession()
    ->statusCodeEquals(200);
  $this->assertSession()
    ->pageTextContains('Layouts');
  $page = $this->getSession()
    ->getPage();
  // Ensures that the layout table is found.
  $table = $page->find('css', 'table.devel-layout-list');
  $this->assertNotNull($table);
  // Ensures that the expected table headers are found.
  $headers = $table->findAll('css', 'thead th');
  $this->assertEquals(6, count($headers));
  $expected_headers = [
    'Icon',
    'Label',
    'Description',
    'Category',
    'Regions',
    'Provider',
  ];
  $actual_headers = array_map(static fn($element) => $element->getText(), $headers);
  $this->assertSame($expected_headers, $actual_headers);
  // Ensures that all the layouts are listed in the table.
  /** @var \Drupal\Core\Layout\LayoutPluginManagerInterface $layout_manager */
  $layout_manager = $this->container
    ->get('plugin.manager.core.layout');
  $layouts = $layout_manager->getDefinitions();
  $table_rows = $table->findAll('css', 'tbody tr');
  $this->assertEquals(count($layouts), count($table_rows));
  $index = 0;
  foreach ($layouts as $layout) {
    $cells = $table_rows[$index]->findAll('css', 'td');
    $this->assertEquals(6, count($cells));
    $cell_layout_icon = $cells[0];
    $icon_path = $layout->getIconPath();
    if ($icon_path === NULL || $icon_path === '') {
      // @todo test that the icon path image is set correctly
    }
    else {
      $cell_layout_icon_text = $cell_layout_icon->getText();
      $this->assertTrue($cell_layout_icon_text === '');
    }
    $cell_layout_label = $cells[1];
    $this->assertEquals($cell_layout_label->getText(), $layout->getLabel());
    $cell_layout_description = $cells[2];
    $this->assertEquals($cell_layout_description->getText(), $layout->getDescription());
    $cell_layout_category = $cells[3];
    $this->assertEquals($cell_layout_category->getText(), $layout->getCategory());
    $cell_layout_regions = $cells[4];
    $this->assertEquals($cell_layout_regions->getText(), implode(', ', $layout->getRegionLabels()));
    $cell_layout_provider = $cells[5];
    $this->assertEquals($cell_layout_provider->getText(), $layout->getProvider());
    ++$index;
  }
  // Ensures that the page is accessible only to the users with the adequate
  // permissions.
  $this->drupalLogout();
  $this->drupalGet('devel/layouts');
  $this->assertSession()
    ->statusCodeEquals(403);
}