You are here

public function MediaUiFunctionalTest::testMediaWithOnlyOneMediaType in Drupal 9

Same name and namespace in other branches
  1. 8 core/modules/media/tests/src/Functional/MediaUiFunctionalTest.php \Drupal\Tests\media\Functional\MediaUiFunctionalTest::testMediaWithOnlyOneMediaType()

Tests the media actions (add/edit/delete).

File

core/modules/media/tests/src/Functional/MediaUiFunctionalTest.php, line 45

Class

MediaUiFunctionalTest
Ensures that media UI works correctly.

Namespace

Drupal\Tests\media\Functional

Code

public function testMediaWithOnlyOneMediaType() {
  $session = $this
    ->getSession();
  $page = $session
    ->getPage();
  $assert_session = $this
    ->assertSession();
  $media_type = $this
    ->createMediaType('test', [
    'queue_thumbnail_downloads' => FALSE,
  ]);
  $this
    ->drupalGet('media/add');
  $assert_session
    ->statusCodeEquals(200);
  $assert_session
    ->addressEquals('media/add/' . $media_type
    ->id());
  $assert_session
    ->elementNotExists('css', '#edit-revision');

  // Tests media add form.
  $media_name = $this
    ->randomMachineName();
  $page
    ->fillField('name[0][value]', $media_name);
  $revision_log_message = $this
    ->randomString();
  $page
    ->fillField('revision_log_message[0][value]', $revision_log_message);
  $source_field = $this
    ->randomString();
  $page
    ->fillField('field_media_test[0][value]', $source_field);
  $page
    ->pressButton('Save');
  $media_id = $this->container
    ->get('entity_type.manager')
    ->getStorage('media')
    ->getQuery()
    ->accessCheck(FALSE)
    ->execute();
  $media_id = reset($media_id);

  /** @var \Drupal\media\MediaInterface $media */
  $media = $this->container
    ->get('entity_type.manager')
    ->getStorage('media')
    ->loadUnchanged($media_id);
  $this
    ->assertSame($media
    ->getRevisionLogMessage(), $revision_log_message);
  $this
    ->assertSame($media
    ->getName(), $media_name);

  // Tests media edit form.
  $media_type
    ->setNewRevision(FALSE);
  $media_type
    ->save();
  $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');

  /** @var \Drupal\media\MediaInterface $media */
  $media = $this->container
    ->get('entity_type.manager')
    ->getStorage('media')
    ->loadUnchanged($media_id);
  $this
    ->assertSame($media
    ->getName(), $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/' . $media_type
    ->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');
  $assert_session
    ->elementNotExists('css', 'input.vertical-tabs__active-tab');

  // Continue testing as admin.
  $this
    ->drupalLogin($this->adminUser);

  // Enable revisions by default.
  $previous_revision_id = $media
    ->getRevisionId();
  $media_type
    ->setNewRevision(TRUE);
  $media_type
    ->save();
  $this
    ->drupalGet('media/' . $media_id . '/edit');
  $assert_session
    ->checkboxChecked('edit-revision');
  $page
    ->fillField('name[0][value]', $media_name);
  $page
    ->fillField('revision_log_message[0][value]', $revision_log_message);
  $page
    ->pressButton('Save');
  $this
    ->drupalGet('media/' . $media_id);
  $assert_session
    ->statusCodeEquals(404);

  /** @var \Drupal\media\MediaInterface $media */
  $media = $this->container
    ->get('entity_type.manager')
    ->getStorage('media')
    ->loadUnchanged($media_id);
  $this
    ->assertSame($media
    ->getRevisionLogMessage(), $revision_log_message);
  $this
    ->assertNotEquals($previous_revision_id, $media
    ->getRevisionId());

  // Test the status checkbox.
  $this
    ->drupalGet('media/' . $media_id . '/edit');
  $page
    ->uncheckField('status[value]');
  $page
    ->pressButton('Save');

  /** @var \Drupal\media\MediaInterface $media */
  $media = $this->container
    ->get('entity_type.manager')
    ->getStorage('media')
    ->loadUnchanged($media_id);
  $this
    ->assertFalse($media
    ->isPublished());

  // 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')
    ->accessCheck(FALSE)
    ->execute();
  $this
    ->assertEmpty($media_id);
}