diff -u b/core/modules/media/tests/src/FunctionalJavascript/MediaReferenceFieldHelpTest.php b/core/modules/media/tests/src/FunctionalJavascript/MediaReferenceFieldHelpTest.php --- b/core/modules/media/tests/src/FunctionalJavascript/MediaReferenceFieldHelpTest.php +++ b/core/modules/media/tests/src/FunctionalJavascript/MediaReferenceFieldHelpTest.php @@ -2,11 +2,13 @@ namespace Drupal\Tests\media\FunctionalJavascript; +use Behat\Mink\Element\ElementInterface; use Drupal\Component\Utility\Html; use Drupal\Core\Field\FieldStorageDefinitionInterface; use Drupal\Core\Url; use Drupal\field\Entity\FieldConfig; use Drupal\field\Entity\FieldStorageConfig; +use Drupal\FunctionalJavascriptTests\DrupalSelenium2Driver; /** * Tests related to media reference fields. @@ -15,6 +17,15 @@ */ class MediaReferenceFieldHelpTest extends MediaJavascriptTestBase { + protected $minkDefaultDriverClass = DrupalSelenium2Driver::class; + + /** + * IDs of media types created during the tests. + * + * @var string[] + */ + protected $mediaTypes = []; + /** * Test our custom help texts when creating a field. * @@ -66,8 +77,11 @@ public function testMediaAutocompleteWidgetTest() { $assert_session = $this->assertSession(); - $media_type1 = $this->createMediaType(); - $media_type2 = $this->createMediaType(); + $this->mediaTypes = [ + $this->createMediaType()->id(), + $this->createMediaType()->id(), + ]; + $content_type = $this->createContentType(); // The first field will have cardinality 1. $storage1 = FieldStorageConfig::create([ @@ -88,10 +102,7 @@ 'settings' => [ 'handler' => 'default', 'handler_settings' => [ - 'target_bundles' => [ - $media_type1->id() => $media_type1->id(), - $media_type2->id() => $media_type2->id(), - ], + 'target_bundles' => array_combine($this->mediaTypes, $this->mediaTypes), ], ], ]); @@ -121,10 +132,7 @@ 'settings' => [ 'handler' => 'default', 'handler_settings' => [ - 'target_bundles' => [ - $media_type1->id() => $media_type1->id(), - $media_type2->id() => $media_type2->id(), - ], + 'target_bundles' => array_combine($this->mediaTypes, $this->mediaTypes), ], ], ]); @@ -137,40 +145,27 @@ // Check that both widgets display the expected help text on the form. $this->drupalGet("/node/add/{$content_type->id()}"); - // Chedk the wrapper fieldsets are present. - $fieldset1 = $assert_session->elementExists('css', '#edit-field-card-1-wrapper fieldset'); - $fieldset2 = $assert_session->elementExists('css', '#edit-field-card-unlimited-wrapper fieldset'); - // Check some help texts are the ones we expect. - $this->assertEquals($field1->getLabel(), $fieldset1->find('css', 'legend')->getText()); - $this->assertEquals($field2->getLabel(), $fieldset2->find('css', 'legend')->getText()); - $h4s = $fieldset1->findAll('css', 'h4'); - $this->assertEquals("Create new {$field1->getLabel()}", $h4s[0]->getText()); - $this->assertEquals("Use existing {$field1->getLabel()}", $h4s[1]->getText()); - $h4s = $fieldset2->findAll('css', 'h4'); - $this->assertEquals("Create new {$field2->getLabel()}", $h4s[0]->getText()); + + // Check that the single-cardinality field is present and contains the stuff + // we expect. + $single_cardinality = $assert_session->elementExists('css', '#edit-field-card-1-wrapper fieldset'); + $this->assertSame($field1->getLabel(), $assert_session->elementExists('css', 'legend', $single_cardinality)->getText()); + $h4 = $assert_session->elementExists('css', 'h4', $single_cardinality); + $this->assertSame("Create new {$field1->getLabel()}", $h4->getText()); + $this->assertHelpText($single_cardinality); + + // Check that the unlimited-cardinality field is present and contains the + // stuff we expect. + /** @var \Behat\Mink\Element\ElementInterface $unlimited_cardinality */ + $unlimited_cardinality = $assert_session->elementExists('css', '#edit-field-card-unlimited-wrapper fieldset'); + $this->assertSame($field2->getLabel(), $assert_session->elementExists('css', 'legend', $unlimited_cardinality)->getText()); + $h4s = $unlimited_cardinality->findAll('css', 'h4'); + $this->assertCount(2, $h4s); + $this->assertSame("Create new {$field2->getLabel()}", $h4s[0]->getText()); // The multiple-widget has an empty h4 in our way, that's why we use the // next one instead. - $this->assertEquals("Use existing {$field2->getLabel()}", $h4s[2]->getText()); - $span1 = $assert_session->elementExists('css', 'span.reuse-media-help', $fieldset1); - $this->assertEquals("Create your media on the media add page (opens a new window), then add it by name to the field below.", $span1->getText()); - $link1 = $assert_session->elementExists('css', 'a', $span1); - $this->assertEquals("media add page", $link1->getText()); - $this->assertEquals(Url::fromRoute('entity.media.add_page')->toString(), $link1->getAttribute('href')); - $span2 = $assert_session->elementExists('css', 'span.reuse-media-help', $fieldset2); - $this->assertEquals("Create your media on the media add page (opens a new window), then add it by name to the field below.", $span2->getText()); - $link2 = $assert_session->elementExists('css', 'a', $span2); - $this->assertEquals("media add page", $link2->getText()); - $this->assertEquals(Url::fromRoute('entity.media.add_page')->toString(), $link2->getAttribute('href')); - $description1 = $assert_session->elementExists('css', '#edit-field-card-1-0-target-id--description', $fieldset1); - $this->assertEquals("Type part of the media name. See the media list (opens a new window) to help locate media. Allowed media types: {$media_type1->id()}, {$media_type2->id()}.", $description1->getText()); - $link3 = $assert_session->elementExists('css', 'a', $description1); - $this->assertEquals("media list", $link3->getText()); - $this->assertEquals(Url::fromRoute('entity.media.collection')->toString(), $link3->getAttribute('href')); - $description2 = $assert_session->elementExists('css', '#edit-field-card-unlimited-0-target-id--description', $fieldset2); - $this->assertEquals("Type part of the media name. See the media list (opens a new window) to help locate media. Allowed media types: {$media_type1->id()}, {$media_type2->id()}.", $description2->getText()); - $link4 = $assert_session->elementExists('css', 'a', $description2); - $this->assertEquals("media list", $link4->getText()); - $this->assertEquals(Url::fromRoute('entity.media.collection')->toString(), $link4->getAttribute('href')); + $this->assertEquals("Use existing {$field2->getLabel()}", $h4s[1]->getText()); + $this->assertHelpText($unlimited_cardinality); // Create a non-media entity reference and make sure our help text is not // showing up. @@ -213,2 +208,26 @@ + /** + * Asserts that the expected help text is found in an element. + * + * @param \Behat\Mink\Element\ElementInterface $element + * The element. + */ + protected function assertHelpText(ElementInterface $element) { + $element_text = $element->getText(); + $assert = $this->assertSession(); + + $help_text = "Create your media on the media add page (opens a new window), then add it by name to the field below."; + $this->assertContains($help_text, $element_text); + + $link = $assert->elementExists('named', ['link', 'media add page'], $element); + $href = Url::fromRoute('entity.media.add_page')->toString(); + $this->assertSame($href, $link->getAttribute('href')); + + $description = "Type part of the media name. See the media list (opens a new window) to help locate media. Allowed media types: " . implode(', ', $this->mediaTypes); + $this->assertContains($description, $element_text); + $link = $assert->elementExists('named', ['link', 'media list']); + $href = Url::fromRoute('entity.media.collection')->toString(); + $this->assertSame($href, $link->getAttribute('href')); + } + }