From f384111416b1f4b44e408f47e11e87665cd97edc Mon Sep 17 00:00:00 2001
From: Lauri Eskola <lauri.eskola@acquia.com>
Date: Mon, 15 Aug 2022 15:23:39 +0300
Subject: [PATCH] Issue #3278418 by danflanagan8, quietone, nod_: Media Library
 Tests should not rely on Classy

---
 .../ContentModerationTest.php                 |  2 +-
 .../EntityReferenceWidgetTest.php             | 13 +++++++++++++
 .../FieldUiIntegrationTest.php                |  5 +++++
 .../MediaLibraryTestBase.php                  |  3 +--
 .../MediaOverviewTest.php                     | 15 ++++++++++++---
 .../FunctionalJavascript/TranslationsTest.php | 10 +++++-----
 .../ViewsUiIntegrationTest.php                | 13 +++++++++----
 .../FunctionalJavascript/WidgetAccessTest.php | 13 +++++++++----
 .../WidgetAnonymousTest.php                   |  5 +++++
 .../FunctionalJavascript/WidgetOEmbedTest.php | 19 ++++++++++++++++++-
 .../FunctionalJavascript/WidgetUploadTest.php |  5 +++++
 .../FunctionalJavascript/WidgetViewsTest.php  | 16 +++++++++++++---
 .../WidgetWithoutTypesTest.php                |  5 +++++
 13 files changed, 101 insertions(+), 23 deletions(-)

diff --git a/core/modules/media_library/tests/src/FunctionalJavascript/ContentModerationTest.php b/core/modules/media_library/tests/src/FunctionalJavascript/ContentModerationTest.php
index dd21529b76eb..e2e65b294d7a 100644
--- a/core/modules/media_library/tests/src/FunctionalJavascript/ContentModerationTest.php
+++ b/core/modules/media_library/tests/src/FunctionalJavascript/ContentModerationTest.php
@@ -38,7 +38,7 @@ class ContentModerationTest extends WebDriverTestBase {
   /**
    * {@inheritdoc}
    */
-  protected $defaultTheme = 'classy';
+  protected $defaultTheme = 'stark';
 
   /**
    * User with the 'administer media' permission.
diff --git a/core/modules/media_library/tests/src/FunctionalJavascript/EntityReferenceWidgetTest.php b/core/modules/media_library/tests/src/FunctionalJavascript/EntityReferenceWidgetTest.php
index e7d5423fd3f0..10375a9c0b58 100644
--- a/core/modules/media_library/tests/src/FunctionalJavascript/EntityReferenceWidgetTest.php
+++ b/core/modules/media_library/tests/src/FunctionalJavascript/EntityReferenceWidgetTest.php
@@ -19,6 +19,19 @@ class EntityReferenceWidgetTest extends MediaLibraryTestBase {
    */
   protected static $modules = ['field_ui'];
 
+  /**
+   * The theme to install as the default for testing.
+   *
+   * @var string
+   *
+   * @todo This test's reliance on classes in order to assert the order of
+   *   field items makes Stark a bad fit as a base theme. Change the default
+   *   theme to Starterkit once it is stable.
+   *
+   *  @see https://www.drupal.org/project/drupal/issues/3281695
+   */
+  protected $defaultTheme = 'classy';
+
   /**
    * Test media items.
    *
diff --git a/core/modules/media_library/tests/src/FunctionalJavascript/FieldUiIntegrationTest.php b/core/modules/media_library/tests/src/FunctionalJavascript/FieldUiIntegrationTest.php
index 68220b48b8bd..72bd066fdda4 100644
--- a/core/modules/media_library/tests/src/FunctionalJavascript/FieldUiIntegrationTest.php
+++ b/core/modules/media_library/tests/src/FunctionalJavascript/FieldUiIntegrationTest.php
@@ -14,6 +14,11 @@ class FieldUiIntegrationTest extends MediaLibraryTestBase {
    */
   protected static $modules = ['field_ui'];
 
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/media_library/tests/src/FunctionalJavascript/MediaLibraryTestBase.php b/core/modules/media_library/tests/src/FunctionalJavascript/MediaLibraryTestBase.php
index 8ec4b3b5a9cb..1b63a63c74cb 100644
--- a/core/modules/media_library/tests/src/FunctionalJavascript/MediaLibraryTestBase.php
+++ b/core/modules/media_library/tests/src/FunctionalJavascript/MediaLibraryTestBase.php
@@ -18,7 +18,7 @@ abstract class MediaLibraryTestBase extends WebDriverTestBase {
   /**
    * {@inheritdoc}
    */
-  protected $defaultTheme = 'classy';
+  protected $defaultTheme = 'stark';
 
   /**
    * Create media items.
@@ -333,7 +333,6 @@ protected function assertMediaAdded($index = 0) {
     $assert_session->elementNotExists('css', '[data-drupal-selector$="preview"]', $fields);
     $assert_session->buttonNotExists('Remove', $fields);
     $assert_session->elementNotExists('css', '[data-drupal-selector$="filename"]', $fields);
-    $assert_session->elementNotExists('css', '.file-size', $fields);
   }
 
   /**
diff --git a/core/modules/media_library/tests/src/FunctionalJavascript/MediaOverviewTest.php b/core/modules/media_library/tests/src/FunctionalJavascript/MediaOverviewTest.php
index e3eaab22e18e..88e6cecb18c5 100644
--- a/core/modules/media_library/tests/src/FunctionalJavascript/MediaOverviewTest.php
+++ b/core/modules/media_library/tests/src/FunctionalJavascript/MediaOverviewTest.php
@@ -14,6 +14,11 @@ class MediaOverviewTest extends MediaLibraryTestBase {
    */
   protected static $modules = ['block'];
 
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
   /**
    * {@inheritdoc}
    */
@@ -64,7 +69,7 @@ public function testAdministrationPage() {
     $assert_session->linkExists('Table');
 
     // We should see the table view and a link to add media.
-    $assert_session->elementExists('css', '.view-media .views-table');
+    $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.
@@ -78,8 +83,12 @@ public function testAdministrationPage() {
     $assert_session->pageTextContains('Dog');
     $assert_session->pageTextContains('Turtle');
 
-    // Verify that the media name does not contain a link.
-    $assert_session->elementNotExists('css', '.media-library-item__name a');
+    // 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');
diff --git a/core/modules/media_library/tests/src/FunctionalJavascript/TranslationsTest.php b/core/modules/media_library/tests/src/FunctionalJavascript/TranslationsTest.php
index 0aa581b42feb..4b14a2345f50 100644
--- a/core/modules/media_library/tests/src/FunctionalJavascript/TranslationsTest.php
+++ b/core/modules/media_library/tests/src/FunctionalJavascript/TranslationsTest.php
@@ -37,7 +37,7 @@ class TranslationsTest extends WebDriverTestBase {
   /**
    * {@inheritdoc}
    */
-  protected $defaultTheme = 'classy';
+  protected $defaultTheme = 'stark';
 
   /**
    * {@inheritdoc}
@@ -127,7 +127,7 @@ public function testMediaLibraryTranslations() {
     // regardless of the interface language.
     $this->drupalGet('nl/admin/content/media-grid');
     $assert_session->elementsCount('css', '.js-media-library-item', 6);
-    $media_items = $page->findAll('css', '.media-library-item__name');
+    $media_items = $page->findAll('css', '.js-media-library-item-preview + div');
     $media_names = [];
     foreach ($media_items as $media_item) {
       $media_names[] = $media_item->getText();
@@ -138,7 +138,7 @@ public function testMediaLibraryTranslations() {
 
     $this->drupalGet('es/admin/content/media-grid');
     $assert_session->elementsCount('css', '.js-media-library-item', 6);
-    $media_items = $page->findAll('css', '.media-library-item__name');
+    $media_items = $page->findAll('css', '.js-media-library-item-preview + div');
     $media_names = [];
     foreach ($media_items as $media_item) {
       $media_names[] = $media_item->getText();
@@ -153,7 +153,7 @@ public function testMediaLibraryTranslations() {
     $assert_session->elementExists('css', '.js-media-library-open-button[name^="field_media"]')->click();
     $assert_session->waitForText('Add or select media');
     $assert_session->elementsCount('css', '.js-media-library-item', 4);
-    $media_items = $page->findAll('css', '.media-library-item__name');
+    $media_items = $page->findAll('css', '.js-media-library-item-preview + div');
     $media_names = [];
     foreach ($media_items as $media_item) {
       $media_names[] = $media_item->getText();
@@ -166,7 +166,7 @@ public function testMediaLibraryTranslations() {
     $assert_session->elementExists('css', '.js-media-library-open-button[name^="field_media"]')->click();
     $assert_session->waitForText('Add or select media');
     $assert_session->elementsCount('css', '.js-media-library-item', 4);
-    $media_items = $page->findAll('css', '.media-library-item__name');
+    $media_items = $page->findAll('css', '.js-media-library-item-preview + div');
     $media_names = [];
     foreach ($media_items as $media_item) {
       $media_names[] = $media_item->getText();
diff --git a/core/modules/media_library/tests/src/FunctionalJavascript/ViewsUiIntegrationTest.php b/core/modules/media_library/tests/src/FunctionalJavascript/ViewsUiIntegrationTest.php
index 0e2eab677c04..f66795fb9fb3 100644
--- a/core/modules/media_library/tests/src/FunctionalJavascript/ViewsUiIntegrationTest.php
+++ b/core/modules/media_library/tests/src/FunctionalJavascript/ViewsUiIntegrationTest.php
@@ -14,6 +14,11 @@ class ViewsUiIntegrationTest extends MediaLibraryTestBase {
    */
   protected static $modules = ['views_ui'];
 
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
   /**
    * {@inheritdoc}
    */
@@ -51,8 +56,8 @@ public function testViewsAdmin() {
     $this->waitForElementsCount('css', '.js-media-library-item', 8);
 
     // Assert that filtering works in live preview.
-    $page->find('css', '.js-media-library-view .view-filters')->fillField('name', 'snake');
-    $page->find('css', '.js-media-library-view .view-filters')->pressButton('Apply filters');
+    $page->find('css', '.js-media-library-view')->fillField('name', 'snake');
+    $page->find('css', '.js-media-library-view')->pressButton('Apply filters');
     $this->waitForElementsCount('css', '.js-media-library-item', 1);
 
     // Test the same routine but in the view for the table widget.
@@ -60,8 +65,8 @@ public function testViewsAdmin() {
     $this->waitForElementsCount('css', '.js-media-library-item', 8);
 
     // Assert that filtering works in live preview.
-    $page->find('css', '.js-media-library-view .view-filters')->fillField('name', 'snake');
-    $page->find('css', '.js-media-library-view .view-filters')->pressButton('Apply filters');
+    $page->find('css', '.js-media-library-view')->fillField('name', 'snake');
+    $page->find('css', '.js-media-library-view')->pressButton('Apply filters');
     $this->waitForElementsCount('css', '.js-media-library-item', 1);
 
     // We cannot test clicking the 'Insert selected' button in either view
diff --git a/core/modules/media_library/tests/src/FunctionalJavascript/WidgetAccessTest.php b/core/modules/media_library/tests/src/FunctionalJavascript/WidgetAccessTest.php
index 0abb57271d6d..c7a96e635baa 100644
--- a/core/modules/media_library/tests/src/FunctionalJavascript/WidgetAccessTest.php
+++ b/core/modules/media_library/tests/src/FunctionalJavascript/WidgetAccessTest.php
@@ -14,6 +14,11 @@
  */
 class WidgetAccessTest extends MediaLibraryTestBase {
 
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
   /**
    * Tests that the widget access works as expected.
    */
@@ -80,11 +85,11 @@ public function testWidgetAccess() {
       'view media',
     ]);
     $this->drupalGet('admin/content/media-widget', $url_options);
-    $assert_session->elementExists('css', '.view-media-library');
+    $assert_session->elementExists('css', '.js-media-library-view');
     $this->drupalGet('admin/content/media-widget-table', $url_options);
-    $assert_session->elementExists('css', '.view-media-library');
+    $assert_session->elementExists('css', '.js-media-library-view');
     $this->drupalGet('media-library', $url_options);
-    $assert_session->elementExists('css', '.view-media-library');
+    $assert_session->elementExists('css', '.js-media-library-view');
     // Assert the user does not have access to the media add form if the user
     // does not have the 'create media' permission.
     $assert_session->fieldNotExists('files[upload][]');
@@ -104,7 +109,7 @@ public function testWidgetAccess() {
       'create media',
     ]);
     $this->drupalGet('media-library', $url_options);
-    $assert_session->elementExists('css', '.view-media-library');
+    $assert_session->elementExists('css', '.js-media-library-view');
     $assert_session->fieldExists('Add files');
 
     // Assert the media library can not be accessed if the required state
diff --git a/core/modules/media_library/tests/src/FunctionalJavascript/WidgetAnonymousTest.php b/core/modules/media_library/tests/src/FunctionalJavascript/WidgetAnonymousTest.php
index 1a6ab1925b67..73442e0e21d7 100644
--- a/core/modules/media_library/tests/src/FunctionalJavascript/WidgetAnonymousTest.php
+++ b/core/modules/media_library/tests/src/FunctionalJavascript/WidgetAnonymousTest.php
@@ -12,6 +12,11 @@
  */
 class WidgetAnonymousTest extends MediaLibraryTestBase {
 
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
   /**
    * {@inheritdoc}
    */
diff --git a/core/modules/media_library/tests/src/FunctionalJavascript/WidgetOEmbedTest.php b/core/modules/media_library/tests/src/FunctionalJavascript/WidgetOEmbedTest.php
index 945b63f9ec8d..5a7936319887 100644
--- a/core/modules/media_library/tests/src/FunctionalJavascript/WidgetOEmbedTest.php
+++ b/core/modules/media_library/tests/src/FunctionalJavascript/WidgetOEmbedTest.php
@@ -20,6 +20,11 @@ class WidgetOEmbedTest extends MediaLibraryTestBase {
    */
   protected static $modules = ['media_test_oembed'];
 
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
   /**
    * {@inheritdoc}
    */
@@ -77,6 +82,10 @@ public function testWidgetOEmbed() {
     // consistently match their label's "for" attribute.
     $assert_session->assertWaitOnAjaxRequest();
     $this->waitForText('The media item has been created but has not yet been saved.');
+    // There is no other selected media and this is not the advanced ui.
+    // Assert that the Additional selected media element does not appear.
+    $assert_session->pageTextNotContains('Additional selected media');
+    $assert_session->elementNotExists('css', '[data-drupal-selector="edit-selection"]');
     // Assert the name field contains the remote video title.
     $assert_session->fieldValueEquals('Name', $youtube_title);
     $this->pressSaveButton();
@@ -137,7 +146,9 @@ public function testWidgetOEmbed() {
     $assert_session->assertWaitOnAjaxRequest();
     $this->waitForText('The media item has been created but has not yet been saved.');
     $page->fillField('Name', 'Custom video title');
-    $assert_session->elementNotExists('css', '.media-library-add-form__selected-media');
+    // The non-advanced ui should not show the Additional selected media.
+    $assert_session->pageTextNotContains('Additional selected media');
+    $assert_session->elementNotExists('css', '[data-drupal-selector="edit-selection"]');
     $this->pressSaveButton();
 
     // Load the created media item.
@@ -258,6 +269,9 @@ public function testWidgetOEmbedAdvancedUi() {
     // consistently match their label's "for" attribute.
     $assert_session->assertWaitOnAjaxRequest();
     $this->waitForText('The media item has been created but has not yet been saved.');
+    // Assert that Additional selected media does not appear.
+    $assert_session->pageTextNotContains('Additional selected media');
+    $assert_session->elementNotExists('css', '[data-drupal-selector="edit-selection"]');
     // Assert the name field contains the remote video title.
     $assert_session->fieldValueEquals('Name', $youtube_title);
     $this->saveAnd('select');
@@ -317,6 +331,9 @@ public function testWidgetOEmbedAdvancedUi() {
     // consistently match their label's "for" attribute.
     $assert_session->assertWaitOnAjaxRequest();
     $this->waitForText('The media item has been created but has not yet been saved.');
+    // The advanced ui should show the Additional selected media.
+    $assert_session->pageTextContains('Additional selected media');
+    $assert_session->elementExists('css', '[data-drupal-selector="edit-selection"]');
     $page->fillField('Name', 'Custom video title');
     $assert_session->checkboxChecked("Select $youtube_title", $this->getSelectionArea());
     $this->saveAnd('select');
diff --git a/core/modules/media_library/tests/src/FunctionalJavascript/WidgetUploadTest.php b/core/modules/media_library/tests/src/FunctionalJavascript/WidgetUploadTest.php
index bb12a63ef21b..bcb20e93c2a1 100644
--- a/core/modules/media_library/tests/src/FunctionalJavascript/WidgetUploadTest.php
+++ b/core/modules/media_library/tests/src/FunctionalJavascript/WidgetUploadTest.php
@@ -17,6 +17,11 @@ class WidgetUploadTest extends MediaLibraryTestBase {
 
   use TestFileCreationTrait;
 
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
   /**
    * Tests that uploads in the Media library's widget works as expected.
    */
diff --git a/core/modules/media_library/tests/src/FunctionalJavascript/WidgetViewsTest.php b/core/modules/media_library/tests/src/FunctionalJavascript/WidgetViewsTest.php
index 838e0d33272c..82bde406b2a8 100644
--- a/core/modules/media_library/tests/src/FunctionalJavascript/WidgetViewsTest.php
+++ b/core/modules/media_library/tests/src/FunctionalJavascript/WidgetViewsTest.php
@@ -9,6 +9,11 @@
  */
 class WidgetViewsTest extends MediaLibraryTestBase {
 
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
   /**
    * {@inheritdoc}
    */
@@ -79,13 +84,18 @@ public function testWidgetViews() {
     $assert_session->buttonNotExists('Apply filters', $button_pane);
 
     // Assert the pager works as expected.
-    $assert_session->elementTextContains('css', '.js-media-library-view .pager__item.is-active', 'Page 1');
+    // An active pager item is not linked and contains "Page #" as text.
+    $assert_session->elementTextContains('css', '.js-media-library-view .js-pager__items > li:nth-of-type(1)', 'Page 1');
+    $assert_session->elementNotExists('css', '.js-media-library-view .js-pager__items > li:nth-of-type(1) a');
+    $assert_session->elementExists('css', '.js-media-library-view .js-pager__items > li:nth-of-type(2) a');
     $this->assertCount(24, $this->getCheckboxes());
     $page->clickLink('Next page');
-    $this->waitForElementTextContains('.js-media-library-view .pager__item.is-active', 'Page 2');
+    $this->waitForElementTextContains('.js-media-library-view .js-pager__items > li:nth-of-type(2)', 'Page 2');
+    $assert_session->elementExists('css', '.js-media-library-view .js-pager__items > li:nth-of-type(1) a');
+    $assert_session->elementNotExists('css', '.js-media-library-view .js-pager__items > li:nth-of-type(2) a');
     $this->assertCount(1, $this->getCheckboxes());
     $page->clickLink('Previous page');
-    $this->waitForElementTextContains('.js-media-library-view .pager__item.is-active', 'Page 1');
+    $this->waitForElementTextContains('.js-media-library-view .js-pager__items > li:nth-of-type(1)', 'Page 1');
     $this->assertCount(24, $this->getCheckboxes());
 
     $this->switchToMediaLibraryTable();
diff --git a/core/modules/media_library/tests/src/FunctionalJavascript/WidgetWithoutTypesTest.php b/core/modules/media_library/tests/src/FunctionalJavascript/WidgetWithoutTypesTest.php
index c43f22c7cdb1..616455db03ed 100644
--- a/core/modules/media_library/tests/src/FunctionalJavascript/WidgetWithoutTypesTest.php
+++ b/core/modules/media_library/tests/src/FunctionalJavascript/WidgetWithoutTypesTest.php
@@ -17,6 +17,11 @@ class WidgetWithoutTypesTest extends MediaLibraryTestBase {
    */
   protected static $modules = ['field_ui'];
 
+  /**
+   * {@inheritdoc}
+   */
+  protected $defaultTheme = 'stark';
+
   /**
    * Tests that the widget works as expected when media types are deleted.
    */
-- 
GitLab