3 namespace Drupal\Tests\media_entity\Functional;
5 use Drupal\media_entity\Entity\Media;
8 * Ensures that media UI works correctly.
12 class MediaUiFunctionalTest extends MediaEntityFunctionalTestBase {
19 public static $modules = [
21 'media_entity_test_type',
25 * The test media bundle.
27 * @var \Drupal\media_entity\MediaBundleInterface
29 protected $testBundle;
34 protected function setUp() {
36 $this->drupalPlaceBlock('local_actions_block');
37 $this->drupalPlaceBlock('local_tasks_block');
41 * Tests the media actions (add/edit/delete).
43 public function testMediaWithOnlyOneBundle() {
44 $session = $this->getSession();
45 $page = $session->getPage();
46 $assert_session = $this->assertSession();
48 /** @var \Drupal\media_entity\MediaBundleInterface $bundle */
49 $bundle = $this->drupalCreateMediaBundle();
51 // Assert that media item list is empty.
52 $this->drupalGet('admin/content/media');
53 $assert_session->statusCodeEquals(200);
54 $assert_session->pageTextContains('No content available.');
56 $this->drupalGet('media/add');
57 $assert_session->statusCodeEquals(200);
58 $assert_session->addressEquals('media/add/' . $bundle->id());
59 $assert_session->checkboxChecked('edit-revision');
61 // Tests media item add form.
62 $media_name = $this->randomMachineName();
63 $page->fillField('name[0][value]', $media_name);
64 $revision_log_message = $this->randomString();
65 $page->fillField('revision_log', $revision_log_message);
66 $page->pressButton('Save and publish');
67 $media_id = $this->container->get('entity.query')->get('media')->execute();
68 $media_id = reset($media_id);
69 /** @var \Drupal\media_entity\MediaInterface $media */
70 $media = $this->container->get('entity_type.manager')
72 ->loadUnchanged($media_id);
73 $this->assertEquals($media->getRevisionLogMessage(), $revision_log_message);
74 $assert_session->titleEquals($media->label() . ' | Drupal');
76 // Test if the media list contains exactly 1 media bundle.
77 $this->drupalGet('admin/content/media');
78 $assert_session->statusCodeEquals(200);
79 $assert_session->pageTextContains($media->label());
81 // Tests media edit form.
82 $media_name2 = $this->randomMachineName();
83 $this->drupalGet('media/' . $media_id . '/edit');
84 $assert_session->checkboxNotChecked('edit-revision');
85 $media_name = $this->randomMachineName();
86 $page->fillField('name[0][value]', $media_name2);
87 $page->pressButton('Save and keep published');
88 $assert_session->titleEquals($media_name2 . ' | Drupal');
90 // Assert that the media list updates after an edit.
91 $this->drupalGet('admin/content/media');
92 $assert_session->statusCodeEquals(200);
93 $assert_session->pageTextContains($media_name2);
95 // Test that there is no empty vertical tabs element, if the container is
96 // empty (see #2750697).
97 // Make the "Publisher ID" and "Created" fields hidden.
98 $this->drupalGet('/admin/structure/media/manage/' . $bundle->id . '/form-display');
99 $page->selectFieldOption('fields[created][parent]', 'hidden');
100 $page->selectFieldOption('fields[uid][parent]', 'hidden');
101 $page->pressButton('Save');
102 // Assure we are testing with a user without permission to manage revisions.
103 $this->drupalLogin($this->nonAdminUser);
104 // Check the container is not present.
105 $this->drupalGet('media/' . $media_id . '/edit');
106 // An empty tab container would look like this.
107 $raw_html = '<div data-drupal-selector="edit-advanced" data-vertical-tabs-panes><input class="vertical-tabs__active-tab" data-drupal-selector="edit-advanced-active-tab" type="hidden" name="advanced__active_tab" value="" />' . "\n" . '</div>';
108 $assert_session->responseNotContains($raw_html);
109 // Continue testing as admin.
110 $this->drupalLogin($this->adminUser);
112 // Enable revisions by default.
113 $bundle->setNewRevision(TRUE);
115 $this->drupalGet('media/' . $media_id . '/edit');
116 $assert_session->checkboxChecked('edit-revision');
117 $page->fillField('name[0][value]', $media_name);
118 $page->fillField('revision_log', $revision_log_message);
119 $page->pressButton('Save and keep published');
120 $assert_session->titleEquals($media_name . ' | Drupal');
121 /** @var \Drupal\media_entity\MediaInterface $media */
122 $media = $this->container->get('entity_type.manager')
123 ->getStorage('media')
124 ->loadUnchanged($media_id);
125 $this->assertEquals($media->getRevisionLogMessage(), $revision_log_message);
127 // Tests media delete form.
128 $this->drupalGet('media/' . $media_id . '/edit');
129 $page->clickLink('Delete');
130 $assert_session->pageTextContains('This action cannot be undone');
131 $page->pressButton('Delete');
132 $media_id = \Drupal::entityQuery('media')->execute();
133 $this->assertFalse($media_id);
135 // Assert that the media list is empty after deleting the media item.
136 $this->drupalGet('admin/content/media');
137 $assert_session->statusCodeEquals(200);
138 $assert_session->pageTextNotContains($media_name);
139 $assert_session->pageTextContains('No content available.');
144 * Tests the "media/add" and "admin/content/media" pages.
146 * Tests if the "media/add" page gives you a selecting option if there are
147 * multiple media bundles available.
149 public function testMediaWithMultipleBundles() {
150 $session = $this->getSession();
151 $page = $session->getPage();
152 $assert_session = $this->assertSession();
154 // Test access to media overview page.
155 $this->drupalLogout();
156 $this->drupalGet('admin/content/media');
157 $assert_session->statusCodeEquals(403);
159 $this->drupalLogin($this->adminUser);
160 $this->drupalGet('admin/content');
162 // Test there is a media tab in the menu.
163 $page->clickLink('Media');
164 $assert_session->statusCodeEquals(200);
165 $assert_session->pageTextContains('No content available.');
167 // Tests and creates the first media bundle.
168 $first_media_bundle = $this->drupalCreateMediaBundle(['description' => $this->randomMachineName(32)]);
170 // Test and create a second media bundle.
171 $second_media_bundle = $this->drupalCreateMediaBundle(['description' => $this->randomMachineName(32)]);
173 // Test if media/add displays two media bundle options.
174 $this->drupalGet('media/add');
176 // Checks for the first media bundle.
177 $assert_session->pageTextContains($first_media_bundle->label());
178 $assert_session->pageTextContains($first_media_bundle->description);
179 // Checks for the second media bundle.
180 $assert_session->pageTextContains($second_media_bundle->label());
181 $assert_session->pageTextContains($second_media_bundle->description);
183 // Continue testing media bundle filter.
184 $first_media_item = Media::create(['bundle' => $first_media_bundle->id()]);
185 $first_media_item->save();
186 $second_media_item = Media::create(['bundle' => $second_media_bundle->id()]);
187 $second_media_item->save();
189 // Go to media item list.
190 $this->drupalGet('admin/content/media');
191 $assert_session->statusCodeEquals(200);
192 $assert_session->linkExists('Add media');
194 // Assert that all available media items are in the list.
195 $assert_session->pageTextContains($first_media_item->label());
196 $assert_session->pageTextContains($first_media_bundle->label());
197 $assert_session->pageTextContains($second_media_item->label());
198 $assert_session->pageTextContains($second_media_bundle->label());
200 // Filter for each bundle and assert that the list has been updated.
201 $this->drupalGet('admin/content/media', ['query' => ['provider' => $first_media_bundle->id()]]);
202 $assert_session->statusCodeEquals(200);
203 $assert_session->pageTextContains($first_media_item->label());
204 $assert_session->pageTextNotContains($second_media_item->label());
206 // Filter all and check for all items again.
207 $this->drupalGet('admin/content/media', ['query' => ['provider' => 'All']]);
208 $assert_session->statusCodeEquals(200);
209 $assert_session->pageTextContains($first_media_item->label());
210 $assert_session->pageTextContains($first_media_bundle->label());
211 $assert_session->pageTextContains($second_media_item->label());
212 $assert_session->pageTextContains($second_media_bundle->label());