You are here

public function EntityDisplayModeTest::testAlphabeticalDisplaySettings in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/field_ui/tests/src/Functional/EntityDisplayModeTest.php \Drupal\Tests\field_ui\Functional\EntityDisplayModeTest::testAlphabeticalDisplaySettings()

Tests if view modes appear in alphabetical order by visible name.

The machine name should not be used for sorting.

See also

https://www.drupal.org/node/2858569

File

core/modules/field_ui/tests/src/Functional/EntityDisplayModeTest.php, line 161

Class

EntityDisplayModeTest
Tests the entity display modes UI.

Namespace

Drupal\Tests\field_ui\Functional

Code

public function testAlphabeticalDisplaySettings() {
  $this
    ->drupalLogin($this
    ->drupalCreateUser([
    'access administration pages',
    'administer content types',
    'administer display modes',
    'administer nodes',
    'administer node fields',
    'administer node display',
    'administer node form display',
    'view the administration theme',
  ]));
  $this
    ->drupalGet('admin/structure/types/manage/article/display');

  // Verify that the order of view modes is alphabetical by visible label.
  // Since the default view modes all have machine names which coincide with
  // the English labels, they should appear in alphabetical order, by default
  // if viewing the site in English and if no changes have been made. We will
  // verify this first.
  $page_text = $this
    ->getTextContent();
  $start = strpos($page_text, 'view modes');
  $pos = $start;
  $list = [
    'Full content',
    'RSS',
    'Search index',
    'Search result',
    'Teaser',
  ];

  // Verify that the order of the view modes is correct on the page.
  foreach ($list as $name) {
    $new_pos = strpos($page_text, $name, $start);
    $this
      ->assertGreaterThan($pos, $new_pos);
    $pos = $new_pos;
  }

  // Now that we have verified the original display order, we can change the
  // label for one of the view modes. If we rename "Teaser" to "Breezer", it
  // should appear as the first of the listed view modes:
  // Set new values and enable test plugins.
  $edit = [
    'label' => 'Breezer',
  ];
  $this
    ->drupalGet('admin/structure/display-modes/view/manage/node.teaser');
  $this
    ->submitForm($edit, 'Save');
  $this
    ->assertSession()
    ->pageTextContains('Saved the Breezer view mode.');

  // Re-open the display settings for the article content type and verify
  // that changing "Teaser" to "Breezer" makes it appear before "Full
  // content".
  $this
    ->drupalGet('admin/structure/types/manage/article/display');
  $page_text = $this
    ->getTextContent();
  $start = strpos($page_text, 'view modes');
  $pos = $start;
  $list = [
    'Breezer',
    'Full content',
  ];

  // Verify that the order of the view modes is correct on the page.
  foreach ($list as $name) {
    $new_pos = strpos($page_text, $name, $start);
    $this
      ->assertGreaterThan($pos, $new_pos);
    $pos = $new_pos;
  }
}