View source
<?php
namespace Drupal\Tests\media_library_form_element\FunctionalJavascript;
use Drupal\file\Entity\File;
use Drupal\media\Entity\MediaType;
use Drupal\Tests\TestFileCreationTrait;
use Drupal\Tests\media_library\FunctionalJavascript\MediaLibraryTestBase;
class SingleItemTest extends MediaLibraryTestBase {
use TestFileCreationTrait;
protected const FIXTURES = [
'type_one' => [
'Horse',
'Bear',
'Cat',
'Dog',
],
'type_two' => [
'Crocodile',
'Lizard',
'Snake',
'Turtle',
],
'type_three' => [
'1',
'2',
'3',
],
];
protected static $modules = [
'media_library',
'media_library_test',
'media_library_form_element',
'media_library_form_element_test',
];
protected $defaultTheme = 'classy';
protected function setUp() {
$this->strictConfigSchema = NULL;
parent::setUp();
File::create([
'filename' => 'duck.png',
'uri' => 'public://duck.png',
'filemime' => 'image/png',
'status' => 1,
])
->save();
File::create([
'filename' => 'platypus.png',
'uri' => 'public://platypus.png',
'filemime' => 'image/png',
'status' => 1,
])
->save();
File::create([
'filename' => 'goose.png',
'uri' => 'public://goose.png',
'filemime' => 'image/png',
'status' => 1,
])
->save();
$this
->createMediaItems(static::FIXTURES);
$user = $this
->drupalCreateUser([
'access administration pages',
'access content',
'create type_one media',
'view media',
]);
$this
->drupalLogin($user);
}
protected function assertAllowedBundles($selector_type, $selector, array $allowed_bundles) {
$assert = $this
->assertSession();
$page = $this
->getSession()
->getPage();
$assert
->elementExists($selector_type, $selector)
->press();
$assert
->assertWaitOnAjaxRequest();
if (count($allowed_bundles) === 1) {
$assert
->elementNotExists('css', '.media-library-menu');
}
else {
foreach (static::FIXTURES as $bundle => $entities) {
$media_type = MediaType::load($bundle);
$media_type_label = $media_type
->label();
if (in_array($bundle, $allowed_bundles, TRUE)) {
$assert
->elementTextContains('css', '.media-library-menu', $media_type_label);
$page
->clickLink($media_type_label);
$assert
->assertWaitOnAjaxRequest();
foreach ($entities as $entity) {
$assert
->linkExists($entity);
}
}
else {
$assert
->elementNotContains('css', '.media-library-menu', $media_type_label);
foreach ($entities as $entity) {
$assert
->linkNotExists($entity);
}
}
}
}
$assert
->elementExists('css', '.ui-dialog-titlebar-close')
->press();
}
protected function assertPreviewContains(array $items) {
$assert = $this
->assertSession();
foreach ($items as $index => $item) {
$nth = $index + 1;
$selector = ".media-library-item:nth-of-type({$nth}) .media-library-item__name";
$assert
->elementContains('css', $selector, $item);
}
}
protected function insertMediaItem($selector_type, $selector, $bundle, $index) {
$assert = $this
->assertSession();
$page = $this
->getSession()
->getPage();
$media_type = MediaType::load($bundle);
$media_type_label = $media_type
->label();
$assert
->elementExists($selector_type, $selector)
->press();
$assert
->assertWaitOnAjaxRequest();
if ($page
->hasLink($media_type_label)) {
$page
->clickLink($media_type_label);
$assert
->assertWaitOnAjaxRequest();
}
$page
->find('css', 'input[name="media_library_select_form[' . $index . ']"]')
->setValue('1');
$assert
->assertWaitOnAjaxRequest();
$assert
->checkboxChecked('media_library_select_form[' . $index . ']');
$insert_button = $page
->find('css', '.ui-dialog-buttonset .form-submit');
$insert_button
->press();
$assert
->assertWaitOnAjaxRequest();
}
public function testForm() {
$assert = $this
->assertSession();
$page = $this
->getSession()
->getPage();
$this
->drupalGet('media-library-form-element-test-form');
$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');
$this
->assertAllowedBundles('css', '#edit-media-single-media-library-open-button', [
'type_one',
'type_two',
]);
$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.');
$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.');
$page
->pressButton('Remove');
$this
->waitForNoText('Dog');
$page
->pressButton('Save configuration');
$assert
->pageTextNotContains('Dog');
$assert
->elementContains('css', '#media_single-media-library-wrapper--description', 'One media item remaining');
$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');
$this
->assertAllowedBundles('css', '#edit-media-multiple-media-library-open-button', [
'type_one',
]);
$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');
$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.');
foreach ([
'Dog',
'Cat',
] as $item) {
$page
->pressButton('Remove');
$this
->waitForNoText($item);
$page
->pressButton('Save configuration');
$assert
->pageTextNotContains($item);
}
$assert
->elementContains('css', '#media_multiple-media-library-wrapper--description', 'Upload or select multiple images');
$assert
->elementTextContains('css', '#media_unlimited-media-library-wrapper--description', 'Upload or select unlimited images.');
$this
->assertAllowedBundles('css', '#edit-media-unlimited-media-library-open-button', [
'type_two',
]);
$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.');
$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.');
$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.');
$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.');
foreach ([
'Turtle',
'Snake',
'Lizard',
'Crocodile',
] as $item) {
$page
->pressButton('Remove');
$this
->waitForNoText($item);
$page
->pressButton('Save configuration');
$assert
->pageTextNotContains($item);
}
$assert
->elementContains('css', '#media_unlimited-media-library-wrapper--description', 'Upload or select unlimited images');
}
}