function MediaUiFunctionalTest::testMediaWithOnlyOneMediaType

Same name and namespace in other branches
  1. 9 core/modules/media/tests/src/Functional/MediaUiFunctionalTest.php \Drupal\Tests\media\Functional\MediaUiFunctionalTest::testMediaWithOnlyOneMediaType()
  2. 8.9.x core/modules/media/tests/src/Functional/MediaUiFunctionalTest.php \Drupal\Tests\media\Functional\MediaUiFunctionalTest::testMediaWithOnlyOneMediaType()
  3. 10 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 47

Class

MediaUiFunctionalTest
Ensures that media UI works correctly.

Namespace

Drupal\Tests\media\Functional

Code

public function testMediaWithOnlyOneMediaType() : void {
    $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.