Updated to Drupal 8.5. Core Media not yet in use.
[yaffs-website] / web / modules / contrib / media_entity / tests / src / FunctionalJavascript / MediaUiJavascriptTest.php
1 <?php
2
3 namespace Drupal\Tests\media_entity\FunctionalJavascript;
4
5 use Drupal\media_entity\Entity\Media;
6
7 /**
8  * Ensures that media UI works correctly.
9  *
10  * @group media_entity
11  */
12 class MediaUiJavascriptTest extends MediaEntityJavascriptTestBase {
13
14   /**
15    * Modules to enable.
16    *
17    * @var array
18    */
19   public static $modules = [
20     'block',
21     'media_entity_test_type',
22   ];
23
24   /**
25    * The test media bundle.
26    *
27    * @var \Drupal\media_entity\MediaBundleInterface
28    */
29   protected $testBundle;
30
31   /**
32    * {@inheritdoc}
33    */
34   protected function setUp() {
35     parent::setUp();
36     $this->drupalPlaceBlock('local_actions_block');
37     $this->drupalPlaceBlock('local_tasks_block');
38   }
39
40   /**
41    * Tests a media bundle administration.
42    */
43   public function testMediaBundles() {
44     $session = $this->getSession();
45     $page = $session->getPage();
46     $assert_session = $this->assertSession();
47
48     // Test the creation of a media bundle using the UI.
49     $name = $this->randomMachineName();
50     $description = $this->randomMachineName();
51     $this->drupalGet('admin/structure/media/add');
52     $page->fillField('label', $name);
53     $session->wait(2000);
54     $page->selectFieldOption('type', 'generic');
55     $page->fillField('description', $description);
56     $page->pressButton('Save media bundle');
57     $assert_session->statusCodeEquals(200);
58     $assert_session->pageTextContains('The media bundle ' . $name . ' has been added.');
59     $this->drupalGet('admin/structure/media');
60     $assert_session->statusCodeEquals(200);
61     $assert_session->pageTextContains($name);
62     $assert_session->pageTextContains($description);
63
64     /** @var \Drupal\media_entity\MediaBundleInterface $bundle_storage */
65     $bundle_storage = $this->container->get('entity_type.manager')->getStorage('media_bundle');
66     $this->testBundle = $bundle_storage->load(strtolower($name));
67
68     // Check if all action links exist.
69     $assert_session->linkByHrefExists('admin/structure/media/add');
70     $assert_session->linkByHrefExists('admin/structure/media/manage/' . $this->testBundle->id());
71     $assert_session->linkByHrefExists('admin/structure/media/manage/' . $this->testBundle->id() . '/fields');
72     $assert_session->linkByHrefExists('admin/structure/media/manage/' . $this->testBundle->id() . '/form-display');
73     $assert_session->linkByHrefExists('admin/structure/media/manage/' . $this->testBundle->id() . '/display');
74
75     // Assert that fields have expected values before editing.
76     $page->clickLink('Edit');
77     $assert_session->fieldValueEquals('label', $name);
78     $assert_session->fieldValueEquals('description', $description);
79     $assert_session->fieldValueEquals('type', 'generic');
80     $assert_session->fieldValueEquals('label', $name);
81     $assert_session->checkboxNotChecked('edit-options-new-revision');
82     $assert_session->checkboxChecked('edit-options-status');
83     $assert_session->checkboxNotChecked('edit-options-queue-thumbnail-downloads');
84     $assert_session->pageTextContains('Create new revision');
85     $assert_session->pageTextContains('Automatically create a new revision of media entities. Users with the Administer media permission will be able to override this option.');
86     $assert_session->pageTextContains('Download thumbnails via a queue.');
87     $assert_session->pageTextContains('Entities will be automatically published when they are created.');
88     $assert_session->pageTextContains("This type provider doesn't need configuration.");
89     $assert_session->pageTextContains('No metadata fields available.');
90     $assert_session->pageTextContains('Media type plugins can provide metadata fields such as title, caption, size information, credits, ... Media entity can automatically save this metadata information to entity fields, which can be configured below. Information will only be mapped if the entity field is empty.');
91
92     // Try to change media type and check if new configuration sub-form appears.
93     $page->selectFieldOption('type', 'test_type');
94     $assert_session->assertWaitOnAjaxRequest();
95     $assert_session->fieldExists('Test config value');
96     $assert_session->fieldValueEquals('Test config value', 'This is default value.');
97     $assert_session->fieldExists('Field 1');
98     $assert_session->fieldExists('Field 2');
99
100     // Test if the edit machine name is not editable.
101     $assert_session->fieldDisabled('Machine-readable name');
102
103     // Edit and save media bundle form fields with new values.
104     $new_name = $this->randomMachineName();
105     $new_description = $this->randomMachineName();
106     $page->fillField('label', $new_name);
107     $page->fillField('description', $new_description);
108     $page->selectFieldOption('type', 'test_type');
109     $page->fillField('Test config value', 'This is new config value.');
110     $page->selectFieldOption('field_mapping[field_1]', 'name');
111     $page->checkField('options[new_revision]');
112     $page->uncheckField('options[status]');
113     $page->checkField('options[queue_thumbnail_downloads]');
114     $page->pressButton('Save media bundle');
115     $assert_session->statusCodeEquals(200);
116
117     // Test if edit worked and if new field values have been saved as expected.
118     $this->drupalGet('admin/structure/media/manage/' . $this->testBundle->id());
119     $assert_session->fieldValueEquals('label', $new_name);
120     $assert_session->fieldValueEquals('description', $new_description);
121     $assert_session->fieldValueEquals('type', 'test_type');
122     $assert_session->checkboxChecked('options[new_revision]');
123     $assert_session->checkboxNotChecked('options[status]');
124     $assert_session->checkboxChecked('options[queue_thumbnail_downloads]');
125     $assert_session->fieldValueEquals('Test config value', 'This is new config value.');
126     $assert_session->fieldValueEquals('Field 1', 'name');
127     $assert_session->fieldValueEquals('Field 2', '_none');
128
129     /** @var \Drupal\media_entity\MediaBundleInterface $loaded_bundle */
130     $loaded_bundle = $this->container->get('entity_type.manager')
131       ->getStorage('media_bundle')
132       ->load($this->testBundle->id());
133     $this->assertEquals($loaded_bundle->id(), $this->testBundle->id());
134     $this->assertEquals($loaded_bundle->label(), $new_name);
135     $this->assertEquals($loaded_bundle->getDescription(), $new_description);
136     $this->assertEquals($loaded_bundle->getType()->getPluginId(), 'test_type');
137     $this->assertEquals($loaded_bundle->getType()->getConfiguration()['test_config_value'], 'This is new config value.');
138     $this->assertTrue($loaded_bundle->shouldCreateNewRevision());
139     $this->assertTrue($loaded_bundle->getQueueThumbnailDownloads());
140     $this->assertFalse($loaded_bundle->getStatus());
141     $this->assertEquals($loaded_bundle->field_map, ['field_1' => 'name']);
142
143     // Test that a media being created with default status to "FALSE" will be
144     // created unpublished.
145     /** @var \Drupal\media_entity\MediaInterface $unpublished_media */
146     $unpublished_media = Media::create(['name' => 'unpublished test media', 'bundle' => $loaded_bundle->id()]);
147     $this->assertFalse($unpublished_media->isPublished());
148     $unpublished_media->delete();
149
150     // Tests media bundle delete form.
151     $page->clickLink('Delete');
152     $assert_session->addressEquals('admin/structure/media/manage/' . $this->testBundle->id() . '/delete');
153     $page->pressButton('Delete');
154     $assert_session->addressEquals('admin/structure/media');
155     $assert_session->pageTextContains('The media bundle ' . $new_name . ' has been deleted.');
156
157     // Test bundle delete prevention when there is existing media.
158     $bundle2 = $this->drupalCreateMediaBundle();
159     $label2 = $bundle2->label();
160     $media = Media::create(['name' => 'lorem ipsum', 'bundle' => $bundle2->id()]);
161     $media->save();
162     $this->drupalGet('admin/structure/media/manage/' . $bundle2->id());
163     $page->clickLink('Delete');
164     $assert_session->addressEquals('admin/structure/media/manage/' . $bundle2->id() . '/delete');
165     $assert_session->fieldNotExists('edit-submit');
166     $assert_session->pageTextContains("$label2 is used by 1 piece of content on your site. You can not remove this content type until you have removed all of the $label2 content.");
167
168   }
169
170 }