e5168f7e10f9892314c9955426b56e5406ffb4d3
[yaffs-website] / web / modules / contrib / media_entity / tests / src / Functional / MediaUiFunctionalTest.php
1 <?php
2
3 namespace Drupal\Tests\media_entity\Functional;
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 MediaUiFunctionalTest extends MediaEntityFunctionalTestBase {
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 the media actions (add/edit/delete).
42    */
43   public function testMediaWithOnlyOneBundle() {
44     $session = $this->getSession();
45     $page = $session->getPage();
46     $assert_session = $this->assertSession();
47
48     /** @var \Drupal\media_entity\MediaBundleInterface $bundle */
49     $bundle = $this->drupalCreateMediaBundle();
50
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.');
55
56     $this->drupalGet('media/add');
57     $assert_session->statusCodeEquals(200);
58     $assert_session->addressEquals('media/add/' . $bundle->id());
59     $assert_session->checkboxChecked('edit-revision');
60
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')
71       ->getStorage('media')
72       ->loadUnchanged($media_id);
73     $this->assertEquals($media->getRevisionLogMessage(), $revision_log_message);
74     $assert_session->titleEquals($media->label() . ' | Drupal');
75
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());
80
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');
89
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);
94
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);
111
112     // Enable revisions by default.
113     $bundle->setNewRevision(TRUE);
114     $bundle->save();
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);
126
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);
134
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.');
140
141   }
142
143   /**
144    * Tests the "media/add" and "admin/content/media" pages.
145    *
146    * Tests if the "media/add" page gives you a selecting option if there are
147    * multiple media bundles available.
148    */
149   public function testMediaWithMultipleBundles() {
150     $session = $this->getSession();
151     $page = $session->getPage();
152     $assert_session = $this->assertSession();
153
154     // Test access to media overview page.
155     $this->drupalLogout();
156     $this->drupalGet('admin/content/media');
157     $assert_session->statusCodeEquals(403);
158
159     $this->drupalLogin($this->adminUser);
160     $this->drupalGet('admin/content');
161
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.');
166
167     // Tests and creates the first media bundle.
168     $first_media_bundle = $this->drupalCreateMediaBundle(['description' => $this->randomMachineName(32)]);
169
170     // Test and create a second media bundle.
171     $second_media_bundle = $this->drupalCreateMediaBundle(['description' => $this->randomMachineName(32)]);
172
173     // Test if media/add displays two media bundle options.
174     $this->drupalGet('media/add');
175
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);
182
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();
188
189     // Go to media item list.
190     $this->drupalGet('admin/content/media');
191     $assert_session->statusCodeEquals(200);
192     $assert_session->linkExists('Add media');
193
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());
199
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());
205
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());
213
214   }
215
216 }