View source
<?php
namespace Drupal\Tests\media_library\Kernel;
use Drupal\Core\Form\FormState;
use Drupal\KernelTests\KernelTestBase;
use Drupal\media_library\Form\FileUploadForm;
use Drupal\media_library\Form\OEmbedForm;
use Drupal\media_library\MediaLibraryState;
use Drupal\media_library_form_overwrite_test\Form\TestAddForm;
use Drupal\Tests\media\Traits\MediaTypeCreationTrait;
use Drupal\Tests\user\Traits\UserCreationTrait;
class MediaLibraryAddFormTest extends KernelTestBase {
use MediaTypeCreationTrait;
use UserCreationTrait;
protected static $modules = [
'media',
'media_library',
'file',
'field',
'image',
'system',
'views',
'user',
];
protected function setUp() {
parent::setUp();
$this
->installEntitySchema('user');
$this
->installEntitySchema('file');
$this
->installSchema('file', 'file_usage');
$this
->installSchema('system', [
'sequences',
'key_value_expire',
]);
$this
->installEntitySchema('media');
$this
->installConfig([
'field',
'system',
'file',
'image',
'media',
'media_library',
]);
$this
->createUser([]);
$this
->createMediaType('image', [
'id' => 'image',
]);
$this
->createMediaType('oembed:video', [
'id' => 'remote_video',
]);
}
public function testMediaTypeAddForm() {
$entity_type_manager = \Drupal::entityTypeManager();
$image = $entity_type_manager
->getStorage('media_type')
->load('image');
$remote_video = $entity_type_manager
->getStorage('media_type')
->load('remote_video');
$image_source_definition = $image
->getSource()
->getPluginDefinition();
$remote_video_source_definition = $remote_video
->getSource()
->getPluginDefinition();
$this
->assertSame(FileUploadForm::class, $image_source_definition['forms']['media_library_add']);
$this
->assertSame(OEmbedForm::class, $remote_video_source_definition['forms']['media_library_add']);
$this
->assertEmpty($this
->buildLibraryUi('image')['content']['form']);
$this
->assertEmpty($this
->buildLibraryUi('remote_video')['content']['form']);
$this
->setCurrentUser($this
->createUser([
'create image media',
]));
$this
->assertSame('managed_file', $this
->buildLibraryUi('image')['content']['form']['container']['upload']['#type']);
$this
->assertEmpty($this
->buildLibraryUi('remote_video')['content']['form']);
$this
->setCurrentUser($this
->createUser([
'create image media',
'create remote_video media',
]));
$this
->assertSame('managed_file', $this
->buildLibraryUi('image')['content']['form']['container']['upload']['#type']);
$this
->assertSame('url', $this
->buildLibraryUi('remote_video')['content']['form']['container']['url']['#type']);
}
protected function buildLibraryUi($selected_type_id) {
$state = MediaLibraryState::create('test', [
'image',
'remote_video',
], $selected_type_id, -1);
return \Drupal::service('media_library.ui_builder')
->buildUi($state);
}
public function testFormStateValidation() {
$form_state = new FormState();
$this
->expectException(\InvalidArgumentException::class);
$this
->expectExceptionMessage('The media library state is not present in the form state.');
\Drupal::formBuilder()
->buildForm(FileUploadForm::class, $form_state);
}
public function testSelectedTypeValidation() {
$state = MediaLibraryState::create('test', [
'image',
'remote_video',
'header_image',
], 'header_image', -1);
$form_state = new FormState();
$form_state
->set('media_library_state', $state);
$this
->expectException(\InvalidArgumentException::class);
$this
->expectExceptionMessage("The 'header_image' media type does not exist.");
\Drupal::formBuilder()
->buildForm(FileUploadForm::class, $form_state);
}
public function testDifferentAddForm() {
$this
->enableModules([
'media_library_form_overwrite_test',
]);
$entity_type_manager = \Drupal::entityTypeManager();
$image = $entity_type_manager
->getStorage('media_type')
->load('image');
$image_source_definition = $image
->getSource()
->getPluginDefinition();
$this
->assertSame(TestAddForm::class, $image_source_definition['forms']['media_library_add']);
}
}