You are here

public function SingleItemTest::testForm in Media Library Form API Element 2.x

Same name and namespace in other branches
  1. 8 tests/src/FunctionalJavascript/SingleItemTest.php \Drupal\Tests\media_library_form_element\FunctionalJavascript\SingleItemTest::testForm()

Tests the setting form.

File

tests/src/FunctionalJavascript/SingleItemTest.php, line 232

Class

SingleItemTest
Test using the media library element.

Namespace

Drupal\Tests\media_library_form_element\FunctionalJavascript

Code

public function testForm() {
  $assert = $this
    ->assertSession();
  $page = $this
    ->getSession()
    ->getPage();
  $this
    ->drupalGet('media-library-form-element-test-form');

  /*************************************************/

  /* Test for the single cardinality form element. */

  /*************************************************/

  // Check the initial element state.
  $assert
    ->elementContains('css', '#media_single-media-library-wrapper--description', 'Upload or select your profile image');
  $assert
    ->elementContains('css', '#media_single-media-library-wrapper--description', 'One media item remaining');

  // Check that only configured bundles are allowed.
  $this
    ->assertAllowedBundles('css', '#edit-media-single-media-library-open-button', [
    'type_one',
    'type_two',
  ]);

  // Insert an item and assert that the state updates appropriately.
  $this
    ->insertMediaItem('css', '#edit-media-single-media-library-open-button', 'type_one', 0);
  $this
    ->assertPreviewContains([
    'Dog',
  ]);
  $assert
    ->elementContains('css', '#media_single-media-library-wrapper--description', 'The maximum number of media items have been selected.');

  // Save the form and assert that the selection is persisted.
  $page
    ->pressButton('Save configuration');
  $this
    ->assertPreviewContains([
    'Dog',
  ]);
  $assert
    ->elementContains('css', '#media_single-media-library-wrapper--description', 'The maximum number of media items have been selected.');

  // Remove all selected items.
  $page
    ->pressButton('Remove');
  $this
    ->waitForNoText('Dog');
  $page
    ->pressButton('Save configuration');

  // Check that the form element is reset to its initial state.
  $assert
    ->pageTextNotContains('Dog');
  $assert
    ->elementContains('css', '#media_single-media-library-wrapper--description', 'One media item remaining');

  /*************************************************/

  /* Test for the single cardinality form element. */

  /*************************************************/

  // Check the initial element state.
  $assert
    ->elementContains('css', '#media_multiple-media-library-wrapper--description', 'Upload or select multiple images');
  $assert
    ->elementContains('css', '#media_multiple-media-library-wrapper--description', '2 media items remaining');

  // Check that only configured bundles are allowed.
  $this
    ->assertAllowedBundles('css', '#edit-media-multiple-media-library-open-button', [
    'type_one',
  ]);

  // Insert an item and assert that the state updates appropriately.
  $this
    ->insertMediaItem('css', '#edit-media-multiple-media-library-open-button', 'type_one', 0);
  $this
    ->assertPreviewContains([
    'Dog',
  ]);
  $assert
    ->elementContains('css', '#media_multiple-media-library-wrapper--description', 'One media item remaining');

  // Insert a second item and assert that hte state updates appropriately.
  $this
    ->insertMediaItem('css', '[id^="edit-media-multiple-media-library-open-button"]', 'type_one', 1);
  $this
    ->assertPreviewContains([
    'Dog',
    'Cat',
  ]);
  $assert
    ->elementContains('css', '#media_multiple-media-library-wrapper--description', 'The maximum number of media items have been selected.');

  // Remove all of the items.
  foreach ([
    'Dog',
    'Cat',
  ] as $item) {
    $page
      ->pressButton('Remove');
    $this
      ->waitForNoText($item);
    $page
      ->pressButton('Save configuration');

    // Check that the item was removed.
    $assert
      ->pageTextNotContains($item);
  }

  // Check that the form element is reset to its initial state.
  $assert
    ->elementContains('css', '#media_multiple-media-library-wrapper--description', 'Upload or select multiple images');

  /****************************************************/

  /* Test for the unlimited cardinality form element. */

  /****************************************************/

  // Check the initial element state.
  $assert
    ->elementTextContains('css', '#media_unlimited-media-library-wrapper--description', 'Upload or select unlimited images.');

  // Check that only configured bundles are allowed.
  $this
    ->assertAllowedBundles('css', '#edit-media-unlimited-media-library-open-button', [
    'type_two',
  ]);

  // Insert an item and assert that the state updates appropriately.
  $this
    ->insertMediaItem('css', '#edit-media-unlimited-media-library-open-button', 'type_two', 0);
  $this
    ->assertPreviewContains([
    'Turtle',
  ]);
  $assert
    ->elementTextContains('css', '#media_unlimited-media-library-wrapper--description', 'Upload or select unlimited images.');

  // Insert a second item and assert that the state updates appropriately.
  $this
    ->insertMediaItem('css', '[id^="edit-media-unlimited-media-library-open-button"]', 'type_two', 1);
  $this
    ->assertPreviewContains([
    'Turtle',
    'Snake',
  ]);
  $assert
    ->elementTextContains('css', '#media_unlimited-media-library-wrapper--description', 'Upload or select unlimited images.');

  // Insert a third item and assert that the state updates appropriately.
  $this
    ->insertMediaItem('css', '[id^="edit-media-unlimited-media-library-open-button"]', 'type_two', 2);
  $this
    ->assertPreviewContains([
    'Turtle',
    'Snake',
    'Lizard',
  ]);
  $assert
    ->elementTextContains('css', '#media_unlimited-media-library-wrapper--description', 'Upload or select unlimited images.');

  // Insert a fourth item and assert that the state updates appropriately.
  $this
    ->insertMediaItem('css', '[id^="edit-media-unlimited-media-library-open-button"]', 'type_two', 3);
  $this
    ->assertPreviewContains([
    'Turtle',
    'Snake',
    'Lizard',
    'Crocodile',
  ]);
  $assert
    ->elementTextContains('css', '#media_unlimited-media-library-wrapper--description', 'Upload or select unlimited images.');

  // Remove all of the items.
  foreach ([
    'Turtle',
    'Snake',
    'Lizard',
    'Crocodile',
  ] as $item) {
    $page
      ->pressButton('Remove');
    $this
      ->waitForNoText($item);
    $page
      ->pressButton('Save configuration');

    // Check that the item was removed.
    $assert
      ->pageTextNotContains($item);
  }

  // Check that the form element is reset to its initial state.
  $assert
    ->elementContains('css', '#media_unlimited-media-library-wrapper--description', 'Upload or select unlimited images');
}