function 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);
  // Change the authored by field to an empty string, which should assign
  // authorship to the anonymous user (uid 0).
  $this->drupalGet('media/' . $media_id . '/edit');
  $edit['uid[0][target_id]'] = '';
  $this->submitForm($edit, 'Save');
  /** @var \Drupal\media\MediaInterface $media */
  $media = $this->container
    ->get('entity_type.manager')
    ->getStorage('media')
    ->loadUnchanged($media_id);
  $uid = $media->getOwnerId();
  // Most SQL database drivers stringify fetches but entities are not
  // necessarily stored in a SQL database. At the same time, NULL/FALSE/""
  // won't do.
  $this->assertTrue($uid === 0 || $uid === '0', 'Media authored by anonymous user.');
  // 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);
}

Buggy or inaccurate documentation? Please file an issue. Need support? Need help programming? Connect with the Drupal community.