You are here

public function MediaOverviewTest::testAdministrationPage in Drupal 10

Same name and namespace in other branches
  1. 8 core/modules/media_library/tests/src/FunctionalJavascript/MediaOverviewTest.php \Drupal\Tests\media_library\FunctionalJavascript\MediaOverviewTest::testAdministrationPage()
  2. 9 core/modules/media_library/tests/src/FunctionalJavascript/MediaOverviewTest.php \Drupal\Tests\media_library\FunctionalJavascript\MediaOverviewTest::testAdministrationPage()

Tests that the Media Library's administration page works as expected.

File

core/modules/media_library/tests/src/FunctionalJavascript/MediaOverviewTest.php, line 59

Class

MediaOverviewTest
Tests the grid-style media overview page.

Namespace

Drupal\Tests\media_library\FunctionalJavascript

Code

public function testAdministrationPage() {
  $session = $this
    ->getSession();
  $page = $session
    ->getPage();
  $assert_session = $this
    ->assertSession();

  // Visit the administration page.
  $this
    ->drupalGet('admin/content/media');

  // There should be links to both the grid and table displays.
  $assert_session
    ->linkExists('Grid');
  $assert_session
    ->linkExists('Table');

  // We should see the table view and a link to add media.
  $assert_session
    ->elementExists('css', '[data-drupal-selector="views-form-media-media-page-list"] table');
  $assert_session
    ->linkExists('Add media');

  // Go to the grid display for the rest of the test.
  $page
    ->clickLink('Grid');
  $assert_session
    ->addressEquals('admin/content/media-grid');

  // Verify that the "Add media" link is present.
  $assert_session
    ->linkExists('Add media');

  // Verify that media from two separate types is present.
  $assert_session
    ->pageTextContains('Dog');
  $assert_session
    ->pageTextContains('Turtle');

  // Verify that the media name does not contain a link. The selector is
  // tricky, so start by asserting ".js-media-library-item-preview + div"
  // can select a div containing a media name.
  $assert_session
    ->elementExists('css', '.js-media-library-item-preview + div:contains("Dog")');
  $assert_session
    ->elementExists('css', '.js-media-library-item-preview + div:contains("Turtle")');
  $assert_session
    ->elementNotExists('css', '.js-media-library-item-preview + div a');

  // Verify that there are links to edit and delete media items.
  $assert_session
    ->linkExists('Edit Dog');
  $assert_session
    ->linkExists('Delete Turtle');

  // Test that users can filter by type.
  $page
    ->selectFieldOption('Media type', 'Type One');
  $page
    ->pressButton('Apply filters');
  $this
    ->waitForNoText('Turtle');
  $assert_session
    ->pageTextContains('Dog');
  $page
    ->selectFieldOption('Media type', 'Type Two');
  $page
    ->pressButton('Apply filters');
  $this
    ->waitForText('Turtle');
  $assert_session
    ->pageTextNotContains('Dog');

  // Test that selecting elements as a part of bulk operations works.
  $page
    ->selectFieldOption('Media type', '- Any -');
  $assert_session
    ->elementExists('css', '#views-exposed-form-media-library-page')
    ->submit();
  $this
    ->waitForText('Dog');

  // This tests that anchor tags clicked inside the preview are suppressed.
  $this
    ->getSession()
    ->executeScript('jQuery(".js-click-to-select-trigger a")[4].click()');
  $this
    ->submitForm([], 'Apply to selected items');
  $assert_session
    ->pageTextContains('Dog');
  $assert_session
    ->pageTextNotContains('Cat');

  // For reasons that are not clear, deleting media items by pressing the
  // "Delete" button can fail (the button is found, but never actually pressed
  // by the Mink driver). This workaround allows the delete form to be
  // submitted.
  $assert_session
    ->elementExists('css', 'form')
    ->submit();
  $assert_session
    ->pageTextNotContains('Dog');
  $assert_session
    ->pageTextContains('Cat');

  // Test the 'Select all media' checkbox and assert that it makes the
  // expected announcements.
  $select_all = $this
    ->waitForFieldExists('Select all media');
  $select_all
    ->check();
  $this
    ->waitForText('All 7 items selected');
  $select_all
    ->uncheck();
  $this
    ->waitForText('Zero items selected');
  $select_all
    ->check();
  $page
    ->selectFieldOption('Action', 'media_delete_action');
  $this
    ->submitForm([], 'Apply to selected items');

  // For reasons that are not clear, deleting media items by pressing the
  // "Delete" button can fail (the button is found, but never actually pressed
  // by the Mink driver). This workaround allows the delete form to be
  // submitted.
  $assert_session
    ->elementExists('css', 'form')
    ->submit();
  $assert_session
    ->pageTextNotContains('Cat');
  $assert_session
    ->pageTextNotContains('Turtle');
  $assert_session
    ->pageTextNotContains('Snake');

  // Test empty text.
  $assert_session
    ->pageTextContains('No media available.');
}