annotate core/modules/media/tests/src/FunctionalJavascript/MediaSourceAudioVideoTest.php @ 19:fa3358dc1485 tip

Add ndrum files
author Chris Cannam
date Wed, 28 Aug 2019 13:14:47 +0100
parents 129ea1e6d783
children
rev   line source
Chris@14 1 <?php
Chris@14 2
Chris@14 3 namespace Drupal\Tests\media\FunctionalJavascript;
Chris@14 4
Chris@14 5 use Drupal\Core\Entity\Entity\EntityViewDisplay;
Chris@14 6 use Drupal\field\Entity\FieldConfig;
Chris@14 7 use Drupal\field\Entity\FieldStorageConfig;
Chris@14 8 use Drupal\file\Entity\File;
Chris@14 9
Chris@14 10 /**
Chris@14 11 * Tests the Audio and Video media sources.
Chris@14 12 *
Chris@14 13 * @group media
Chris@14 14 */
Chris@14 15 class MediaSourceAudioVideoTest extends MediaSourceTestBase {
Chris@14 16
Chris@14 17 /**
Chris@14 18 * Check the Audio source functionality.
Chris@14 19 */
Chris@14 20 public function testAudioTypeCreation() {
Chris@14 21 $assert_session = $this->assertSession();
Chris@14 22 $page = $this->getSession()->getPage();
Chris@14 23
Chris@14 24 $source_id = 'audio_file';
Chris@14 25 $type_name = 'audio_type';
Chris@14 26 $field_name = 'field_media_' . $source_id;
Chris@14 27 $this->doTestCreateMediaType($type_name, $source_id);
Chris@14 28
Chris@14 29 // Check that the source field was created with the correct settings.
Chris@14 30 $storage = FieldStorageConfig::load("media.$field_name");
Chris@14 31 $this->assertInstanceOf(FieldStorageConfig::class, $storage);
Chris@14 32 $field = FieldConfig::load("media.$type_name.$field_name");
Chris@14 33 $this->assertInstanceOf(FieldConfig::class, $field);
Chris@14 34 $this->assertSame('mp3 wav aac', FieldConfig::load("media.$type_name.$field_name")->get('settings')['file_extensions']);
Chris@14 35
Chris@14 36 // Check that the display holds the correct formatter configuration.
Chris@14 37 $display = EntityViewDisplay::load("media.$type_name.default");
Chris@14 38 $this->assertInstanceOf(EntityViewDisplay::class, $display);
Chris@14 39 $formatter = $display->getComponent($field_name)['type'];
Chris@14 40 $this->assertSame('file_audio', $formatter);
Chris@14 41
Chris@17 42 // Create a media asset.
Chris@14 43 file_put_contents('public://file.mp3', str_repeat('t', 10));
Chris@14 44 $file = File::create([
Chris@14 45 'uri' => 'public://file.mp3',
Chris@14 46 'filename' => 'file.mp3',
Chris@14 47 ]);
Chris@14 48 $file->save();
Chris@14 49
Chris@14 50 $this->drupalGet("media/add/$type_name");
Chris@14 51 $page->fillField('Name', 'Audio media asset');
Chris@14 52 $page->attachFileToField("files[{$field_name}_0]", \Drupal::service('file_system')->realpath('public://file.mp3'));
Chris@14 53 $result = $assert_session->waitForButton('Remove');
Chris@14 54 $this->assertNotEmpty($result);
Chris@14 55 $page->pressButton('Save');
Chris@14 56
Chris@17 57 // Verify that there is a creation message and that it contains a link to
Chris@17 58 // the media entity.
Chris@14 59 $assert_session->pageTextContains("$type_name Audio media asset has been created.");
Chris@17 60 $this->drupalGet($this->assertLinkToCreatedMedia());
Chris@17 61
Chris@17 62 // Verify that the <audio> tag is present on the media entity view.
Chris@14 63 $assert_session->elementExists('css', "audio > source[type='audio/mpeg']");
Chris@14 64 }
Chris@14 65
Chris@14 66 /**
Chris@14 67 * Check the Video source functionality.
Chris@14 68 */
Chris@14 69 public function testVideoTypeCreation() {
Chris@14 70 $assert_session = $this->assertSession();
Chris@14 71 $page = $this->getSession()->getPage();
Chris@14 72
Chris@14 73 $source_id = 'video_file';
Chris@14 74 $type_name = 'video_type';
Chris@14 75 $field_name = 'field_media_' . $source_id;
Chris@14 76 $this->doTestCreateMediaType($type_name, $source_id);
Chris@14 77
Chris@14 78 // Check that the source field was created with the correct settings.
Chris@14 79 $storage = FieldStorageConfig::load("media.$field_name");
Chris@14 80 $this->assertInstanceOf(FieldStorageConfig::class, $storage);
Chris@14 81 $field = FieldConfig::load("media.$type_name.$field_name");
Chris@14 82 $this->assertInstanceOf(FieldConfig::class, $field);
Chris@14 83 $this->assertSame('mp4', FieldConfig::load("media.$type_name.$field_name")->getSetting('file_extensions'));
Chris@14 84
Chris@14 85 // Check that the display holds the correct formatter configuration.
Chris@14 86 $display = EntityViewDisplay::load("media.$type_name.default");
Chris@14 87 $this->assertInstanceOf(EntityViewDisplay::class, $display);
Chris@14 88 $formatter = $display->getComponent($field_name)['type'];
Chris@14 89 $this->assertSame('file_video', $formatter);
Chris@14 90
Chris@17 91 // Create a media asset.
Chris@14 92 file_put_contents('public://file.mp4', str_repeat('t', 10));
Chris@14 93 $file = File::create([
Chris@14 94 'uri' => 'public://file.mp4',
Chris@14 95 'filename' => 'file.mp4',
Chris@14 96 ]);
Chris@14 97 $file->save();
Chris@14 98
Chris@14 99 $this->drupalGet("media/add/$type_name");
Chris@14 100 $page->fillField('Name', 'Video media asset');
Chris@14 101 $page->attachFileToField("files[{$field_name}_0]", \Drupal::service('file_system')->realpath('public://file.mp4'));
Chris@14 102 $result = $assert_session->waitForButton('Remove');
Chris@14 103 $this->assertNotEmpty($result);
Chris@14 104 $page->pressButton('Save');
Chris@14 105
Chris@17 106 // Verify that there is a creation message and that it contains a link to
Chris@17 107 // the media entity.
Chris@14 108 $assert_session->pageTextContains("$type_name Video media asset has been created.");
Chris@17 109
Chris@17 110 $this->drupalGet($this->assertLinkToCreatedMedia());
Chris@17 111 // Verify that the <video> tag is present on the media entity view.
Chris@14 112 $assert_session->elementExists('css', "video > source[type='video/mp4']");
Chris@14 113 }
Chris@14 114
Chris@14 115 }