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());
}
}