diff --git a/core/modules/media_library/tests/src/FunctionalJavascript/WidgetOverflowTest.php b/core/modules/media_library/tests/src/FunctionalJavascript/WidgetOverflowTest.php index 75c8aa54e7..23b931b6e0 100644 --- a/core/modules/media_library/tests/src/FunctionalJavascript/WidgetOverflowTest.php +++ b/core/modules/media_library/tests/src/FunctionalJavascript/WidgetOverflowTest.php @@ -53,7 +53,7 @@ protected function setUp() { } /** - * Tests overflow validation with standard UI. + * Tests overflow validation. * * @dataProvider overflowProvider */ @@ -106,6 +106,62 @@ public function testWidgetOverflow($advanced_ui, $button_text) { $this->pressInsertSelected('Added 2 media items.'); } + /** + * Tests overflow validation skips fields with unlimited cardinality. + * + * @dataProvider overflowProvider + */ + public function testUnlimitedCardinality($advanced_ui, $button_text) { + $this->config('media_library.settings')->set('advanced_ui', $advanced_ui)->save(); + $assert_session = $this->assertSession(); + $page = $this->getSession()->getPage(); + $driver = $this->getSession()->getDriver(); + /** @var \Drupal\Core\File\FileSystemInterface $file_system */ + $file_system = $this->container->get('file_system'); + // Visit a node create page and open the media library. + $this->drupalGet('node/add/basic_page'); + $this->openMediaLibraryForField('field_unlimited_media'); + $this->switchToMediaType('Three'); + $assert_session->pageTextContains('Add or select media'); + $assert_session->fieldExists('Add files'); + // Create a list of new files to upload. + $filenames = []; + $remote_paths = []; + foreach (range(1, 5) as $i) { + $path = $file_system->copy($this->image->uri, 'public://'); + $filenames[] = $file_system->basename($path); + $remote_paths[] = $driver->uploadFileAndGetRemoteFilePath($file_system->realpath($path)); + } + $page->findField('Add files')->setValue(implode("\n", $remote_paths)); + // Assert the media item fields are shown and the vertical tabs are no + // longer shown. + $this->assertMediaAdded(); + // Assert all files have been added. + foreach (range(0, 4) as $i) { + $assert_session->fieldValueEquals("media[$i][fields][name][0][value]", $filenames[$i]); + $page->fillField("media[$i][fields][field_media_test_image][0][alt]", $filenames[$i]); + } + // When the user is returned to the media library there should not + // be a warning message. + $buttons = $assert_session->elementExists('css', '.ui-dialog-buttonpane'); + $buttons->pressButton($button_text); + + if ($button_text === 'Save and insert') { + $this->waitForText('Added 5 media items.'); + } + else { + $result = $buttons->waitFor(10, function ($buttons) { + /** @var \Behat\Mink\Element\NodeElement $buttons */ + return $buttons->findButton('Insert selected'); + }); + $this->assertNotEmpty($result); + $assert_session->elementNotExists('css', '.messages--warning'); + // When the user tries insert more items than allowed, the user is returned + // to the media library with an error message. + $this->pressInsertSelected('Added 5 media items.'); + } + } + /** * Data provider for ::testWidgetOverflow(). *