3 namespace Drupal\Tests\media\Functional;
5 use Drupal\media\Entity\Media;
6 use Drupal\media\Entity\MediaType;
9 * Ensures that media UI works correctly.
13 class MediaUiFunctionalTest extends MediaFunctionalTestBase {
20 public static $modules = [
28 protected function setUp() {
30 $this->drupalPlaceBlock('local_actions_block');
31 $this->drupalPlaceBlock('local_tasks_block');
33 // We need to test without any default configuration in place.
34 // @TODO: Remove this when https://www.drupal.org/node/2883813 lands.
35 MediaType::load('file')->delete();
36 MediaType::load('image')->delete();
40 * Tests the media actions (add/edit/delete).
42 public function testMediaWithOnlyOneMediaType() {
43 $session = $this->getSession();
44 $page = $session->getPage();
45 $assert_session = $this->assertSession();
47 $media_type = $this->createMediaType([
48 'new_revision' => FALSE,
49 'queue_thumbnail_downloads' => FALSE,
52 $this->drupalGet('media/add');
53 $assert_session->statusCodeEquals(200);
54 $assert_session->addressEquals('media/add/' . $media_type->id());
55 $assert_session->elementNotExists('css', '#edit-revision');
57 // Tests media add form.
58 $media_name = $this->randomMachineName();
59 $page->fillField('name[0][value]', $media_name);
60 $revision_log_message = $this->randomString();
61 $page->fillField('revision_log_message[0][value]', $revision_log_message);
62 $page->pressButton('Save');
63 $media_id = $this->container->get('entity.query')->get('media')->execute();
64 $media_id = reset($media_id);
65 /** @var \Drupal\media\MediaInterface $media */
66 $media = $this->container->get('entity_type.manager')
68 ->loadUnchanged($media_id);
69 $this->assertEquals($media->getRevisionLogMessage(), $revision_log_message);
70 $this->assertEquals($media->getName(), $media_name);
71 $assert_session->titleEquals($media_name . ' | Drupal');
73 // Tests media edit form.
74 $media_type->setNewRevision(FALSE);
76 $media_name2 = $this->randomMachineName();
77 $this->drupalGet('media/' . $media_id . '/edit');
78 $assert_session->checkboxNotChecked('edit-revision');
79 $media_name = $this->randomMachineName();
80 $page->fillField('name[0][value]', $media_name2);
81 $page->pressButton('Save');
82 /** @var \Drupal\media\MediaInterface $media */
83 $media = $this->container->get('entity_type.manager')
85 ->loadUnchanged($media_id);
86 $this->assertEquals($media->getName(), $media_name2);
87 $assert_session->titleEquals($media_name2 . ' | Drupal');
89 // Test that there is no empty vertical tabs element, if the container is
90 // empty (see #2750697).
91 // Make the "Publisher ID" and "Created" fields hidden.
92 $this->drupalGet('/admin/structure/media/manage/' . $media_type->id() . '/form-display');
93 $page->selectFieldOption('fields[created][parent]', 'hidden');
94 $page->selectFieldOption('fields[uid][parent]', 'hidden');
95 $page->pressButton('Save');
96 // Assure we are testing with a user without permission to manage revisions.
97 $this->drupalLogin($this->nonAdminUser);
98 // Check the container is not present.
99 $this->drupalGet('media/' . $media_id . '/edit');
100 $assert_session->elementNotExists('css', 'input.vertical-tabs__active-tab');
101 // Continue testing as admin.
102 $this->drupalLogin($this->adminUser);
104 // Enable revisions by default.
105 $previous_revision_id = $media->getRevisionId();
106 $media_type->setNewRevision(TRUE);
108 $this->drupalGet('media/' . $media_id . '/edit');
109 $assert_session->checkboxChecked('edit-revision');
110 $page->fillField('name[0][value]', $media_name);
111 $page->fillField('revision_log_message[0][value]', $revision_log_message);
112 $page->pressButton('Save');
113 $assert_session->titleEquals($media_name . ' | Drupal');
114 /** @var \Drupal\media\MediaInterface $media */
115 $media = $this->container->get('entity_type.manager')
116 ->getStorage('media')
117 ->loadUnchanged($media_id);
118 $this->assertEquals($media->getRevisionLogMessage(), $revision_log_message);
119 $this->assertNotEquals($previous_revision_id, $media->getRevisionId());
121 // Test the status checkbox.
122 $this->drupalGet('media/' . $media_id . '/edit');
123 $page->uncheckField('status[value]');
124 $page->pressButton('Save');
125 /** @var \Drupal\media\MediaInterface $media */
126 $media = $this->container->get('entity_type.manager')
127 ->getStorage('media')
128 ->loadUnchanged($media_id);
129 $this->assertFalse($media->isPublished());
131 // Tests media delete form.
132 $this->drupalGet('media/' . $media_id . '/edit');
133 $page->clickLink('Delete');
134 $assert_session->pageTextContains('This action cannot be undone');
135 $page->pressButton('Delete');
136 $media_id = \Drupal::entityQuery('media')->execute();
137 $this->assertFalse($media_id);
141 * Tests the "media/add" and "media/mid" pages.
143 * Tests if the "media/add" page gives you a selecting option if there are
144 * multiple media types available.
146 public function testMediaWithMultipleMediaTypes() {
147 $assert_session = $this->assertSession();
149 // Tests and creates the first media type.
150 $first_media_type = $this->createMediaType(['description' => $this->randomMachineName(32)]);
152 // Test and create a second media type.
153 $second_media_type = $this->createMediaType(['description' => $this->randomMachineName(32)]);
155 // Test if media/add displays two media type options.
156 $this->drupalGet('media/add');
158 // Checks for the first media type.
159 $assert_session->pageTextContains($first_media_type->label());
160 $assert_session->pageTextContains($first_media_type->getDescription());
161 // Checks for the second media type.
162 $assert_session->pageTextContains($second_media_type->label());
163 $assert_session->pageTextContains($second_media_type->getDescription());
165 // Continue testing media type filter.
166 $first_media_item = Media::create(['bundle' => $first_media_type->id()]);
167 $first_media_item->save();
168 $second_media_item = Media::create(['bundle' => $second_media_type->id()]);
169 $second_media_item->save();
171 // Go to first media item.
172 $this->drupalGet('media/' . $first_media_item->id());
173 $assert_session->statusCodeEquals(200);
174 $assert_session->pageTextContains($first_media_item->getName());
176 // Go to second media item.
177 $this->drupalGet('media/' . $second_media_item->id());
178 $assert_session->statusCodeEquals(200);
179 $assert_session->pageTextContains($second_media_item->getName());