drupalPlaceBlock('local_actions_block'); $this->drupalPlaceBlock('local_tasks_block'); } /** * Tests the media actions (add/edit/delete). */ public function testMediaWithOnlyOneBundle() { $session = $this->getSession(); $page = $session->getPage(); $assert_session = $this->assertSession(); /** @var \Drupal\media_entity\MediaBundleInterface $bundle */ $bundle = $this->drupalCreateMediaBundle(); // Assert that media item list is empty. $this->drupalGet('admin/content/media'); $assert_session->statusCodeEquals(200); $assert_session->pageTextContains('No content available.'); $this->drupalGet('media/add'); $assert_session->statusCodeEquals(200); $assert_session->addressEquals('media/add/' . $bundle->id()); $assert_session->checkboxChecked('edit-revision'); // Tests media item add form. $media_name = $this->randomMachineName(); $page->fillField('name[0][value]', $media_name); $revision_log_message = $this->randomString(); $page->fillField('revision_log', $revision_log_message); $page->pressButton('Save and publish'); $media_id = $this->container->get('entity.query')->get('media')->execute(); $media_id = reset($media_id); /** @var \Drupal\media_entity\MediaInterface $media */ $media = $this->container->get('entity_type.manager') ->getStorage('media') ->loadUnchanged($media_id); $this->assertEquals($media->getRevisionLogMessage(), $revision_log_message); $assert_session->titleEquals($media->label() . ' | Drupal'); // Test if the media list contains exactly 1 media bundle. $this->drupalGet('admin/content/media'); $assert_session->statusCodeEquals(200); $assert_session->pageTextContains($media->label()); // Tests media edit form. $media_name2 = $this->randomMachineName(); $this->drupalGet('media/' . $media_id . '/edit'); $assert_session->checkboxNotChecked('edit-revision'); $media_name = $this->randomMachineName(); $page->fillField('name[0][value]', $media_name2); $page->pressButton('Save and keep published'); $assert_session->titleEquals($media_name2 . ' | Drupal'); // Assert that the media list updates after an edit. $this->drupalGet('admin/content/media'); $assert_session->statusCodeEquals(200); $assert_session->pageTextContains($media_name2); // Test that there is no empty vertical tabs element, if the container is // empty (see #2750697). // Make the "Publisher ID" and "Created" fields hidden. $this->drupalGet('/admin/structure/media/manage/' . $bundle->id . '/form-display'); $page->selectFieldOption('fields[created][parent]', 'hidden'); $page->selectFieldOption('fields[uid][parent]', 'hidden'); $page->pressButton('Save'); // Assure we are testing with a user without permission to manage revisions. $this->drupalLogin($this->nonAdminUser); // Check the container is not present. $this->drupalGet('media/' . $media_id . '/edit'); // An empty tab container would look like this. $raw_html = '
' . "\n" . '
'; $assert_session->responseNotContains($raw_html); // Continue testing as admin. $this->drupalLogin($this->adminUser); // Enable revisions by default. $bundle->setNewRevision(TRUE); $bundle->save(); $this->drupalGet('media/' . $media_id . '/edit'); $assert_session->checkboxChecked('edit-revision'); $page->fillField('name[0][value]', $media_name); $page->fillField('revision_log', $revision_log_message); $page->pressButton('Save and keep published'); $assert_session->titleEquals($media_name . ' | Drupal'); /** @var \Drupal\media_entity\MediaInterface $media */ $media = $this->container->get('entity_type.manager') ->getStorage('media') ->loadUnchanged($media_id); $this->assertEquals($media->getRevisionLogMessage(), $revision_log_message); // Tests media delete form. $this->drupalGet('media/' . $media_id . '/edit'); $page->clickLink('Delete'); $assert_session->pageTextContains('This action cannot be undone'); $page->pressButton('Delete'); $media_id = \Drupal::entityQuery('media')->execute(); $this->assertFalse($media_id); // Assert that the media list is empty after deleting the media item. $this->drupalGet('admin/content/media'); $assert_session->statusCodeEquals(200); $assert_session->pageTextNotContains($media_name); $assert_session->pageTextContains('No content available.'); } /** * Tests the "media/add" and "admin/content/media" pages. * * Tests if the "media/add" page gives you a selecting option if there are * multiple media bundles available. */ public function testMediaWithMultipleBundles() { $session = $this->getSession(); $page = $session->getPage(); $assert_session = $this->assertSession(); // Test access to media overview page. $this->drupalLogout(); $this->drupalGet('admin/content/media'); $assert_session->statusCodeEquals(403); $this->drupalLogin($this->adminUser); $this->drupalGet('admin/content'); // Test there is a media tab in the menu. $page->clickLink('Media'); $assert_session->statusCodeEquals(200); $assert_session->pageTextContains('No content available.'); // Tests and creates the first media bundle. $first_media_bundle = $this->drupalCreateMediaBundle(['description' => $this->randomMachineName(32)]); // Test and create a second media bundle. $second_media_bundle = $this->drupalCreateMediaBundle(['description' => $this->randomMachineName(32)]); // Test if media/add displays two media bundle options. $this->drupalGet('media/add'); // Checks for the first media bundle. $assert_session->pageTextContains($first_media_bundle->label()); $assert_session->pageTextContains($first_media_bundle->description); // Checks for the second media bundle. $assert_session->pageTextContains($second_media_bundle->label()); $assert_session->pageTextContains($second_media_bundle->description); // Continue testing media bundle filter. $first_media_item = Media::create(['bundle' => $first_media_bundle->id()]); $first_media_item->save(); $second_media_item = Media::create(['bundle' => $second_media_bundle->id()]); $second_media_item->save(); // Go to media item list. $this->drupalGet('admin/content/media'); $assert_session->statusCodeEquals(200); $assert_session->linkExists('Add media'); // Assert that all available media items are in the list. $assert_session->pageTextContains($first_media_item->label()); $assert_session->pageTextContains($first_media_bundle->label()); $assert_session->pageTextContains($second_media_item->label()); $assert_session->pageTextContains($second_media_bundle->label()); // Filter for each bundle and assert that the list has been updated. $this->drupalGet('admin/content/media', ['query' => ['provider' => $first_media_bundle->id()]]); $assert_session->statusCodeEquals(200); $assert_session->pageTextContains($first_media_item->label()); $assert_session->pageTextNotContains($second_media_item->label()); // Filter all and check for all items again. $this->drupalGet('admin/content/media', ['query' => ['provider' => 'All']]); $assert_session->statusCodeEquals(200); $assert_session->pageTextContains($first_media_item->label()); $assert_session->pageTextContains($first_media_bundle->label()); $assert_session->pageTextContains($second_media_item->label()); $assert_session->pageTextContains($second_media_bundle->label()); } }