FieldLayoutTest.php

Same filename in this branch
  1. 10 core/modules/field_layout/tests/src/FunctionalJavascript/FieldLayoutTest.php
Same filename and directory in other branches
  1. 9 core/modules/field_layout/tests/src/FunctionalJavascript/FieldLayoutTest.php
  2. 9 core/modules/field_layout/tests/src/Functional/FieldLayoutTest.php
  3. 8.9.x core/modules/field_layout/tests/src/FunctionalJavascript/FieldLayoutTest.php
  4. 8.9.x core/modules/field_layout/tests/src/Functional/FieldLayoutTest.php
  5. 11.x core/modules/field_layout/tests/src/FunctionalJavascript/FieldLayoutTest.php
  6. 11.x core/modules/field_layout/tests/src/Functional/FieldLayoutTest.php

Namespace

Drupal\Tests\field_layout\Functional

File

core/modules/field_layout/tests/src/Functional/FieldLayoutTest.php

View source
<?php

declare (strict_types=1);
namespace Drupal\Tests\field_layout\Functional;

use Drupal\Tests\BrowserTestBase;

/**
 * Tests using field layout for entity displays.
 *
 * @group field_layout
 */
class FieldLayoutTest extends BrowserTestBase {
  
  /**
   * {@inheritdoc}
   */
  protected static $modules = [
    'field_layout',
    'field_ui',
    'node',
    'field_layout_test',
  ];
  
  /**
   * {@inheritdoc}
   */
  protected $defaultTheme = 'stark';
  
  /**
   * {@inheritdoc}
   */
  protected function setUp() : void {
    parent::setUp();
    $this->createContentType([
      'type' => 'article',
    ]);
    $this->createNode([
      'type' => 'article',
      'title' => 'The node title',
      'body' => [
        [
          'value' => 'The node body',
        ],
      ],
    ]);
    $this->drupalLogin($this->drupalCreateUser([
      'access administration pages',
      'administer content types',
      'administer nodes',
      'administer node fields',
      'administer node display',
      'administer node form display',
      'view the administration theme',
    ]));
  }
  
  /**
   * Tests an entity type that has fields shown by default.
   */
  public function testNodeView() : void {
    // By default, the one-column layout is used.
    $this->drupalGet('node/1');
    $this->assertSession()
      ->elementExists('css', '.layout--onecol');
    $this->assertSession()
      ->elementTextContains('css', '.layout__region--content', 'The node body');
    $this->drupalGet('admin/structure/types/manage/article/display');
    $this->assertEquals([
      'Content',
      'Disabled',
    ], $this->getRegionTitles());
    $this->assertSession()
      ->optionExists('fields[body][region]', 'content');
  }
  
  /**
   * Tests that changes to the regions still leave the fields visible.
   */
  public function testRegionChanges() : void {
    $this->drupalGet('admin/structure/types/manage/article/display');
    $this->assertEquals([
      'Content',
      'Disabled',
    ], $this->getRegionTitles());
    $this->assertSession()
      ->optionExists('fields[body][region]', 'content');
    \Drupal::state()->set('field_layout_test.alter_regions', TRUE);
    \Drupal::service('plugin.cache_clearer')->clearCachedDefinitions();
    $this->drupalGet('admin/structure/types/manage/article/display');
    $this->assertEquals([
      'Foo',
      'Disabled',
    ], $this->getRegionTitles());
    $this->assertSession()
      ->optionExists('fields[body][region]', 'hidden');
  }
  
  /**
   * Gets the region titles on the page.
   *
   * @return string[]
   *   An array of region titles.
   */
  protected function getRegionTitles() {
    $region_titles = [];
    $region_title_elements = $this->getSession()
      ->getPage()
      ->findAll('css', '.region-title td');
    /** @var \Behat\Mink\Element\NodeElement[] $region_title_elements */
    foreach ($region_title_elements as $region_title_element) {
      $region_titles[] = $region_title_element->getText();
    }
    return $region_titles;
  }

}

Classes

Title Deprecated Summary
FieldLayoutTest Tests using field layout for entity displays.

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