View source
<?php
namespace Drupal\Tests\media_revisions_ui\Functional;
use Drupal\Core\Entity\EntityInterface;
use Drupal\media\Entity\Media;
use Drupal\Tests\BrowserTestBase;
use Drupal\Tests\media\Traits\MediaTypeCreationTrait;
use Drupal\user\Entity\User;
class MediaRevisionsUiTest extends BrowserTestBase {
use MediaTypeCreationTrait;
public static $modules = [
'system',
'node',
'media',
'media_test_source',
'media_revisions_ui',
'block',
];
protected $defaultTheme = 'stark';
protected $user;
protected $mediaType;
protected $mediaStorage;
protected function setUp() {
parent::setUp();
$entityTypeManager = $this->container
->get('entity_type.manager');
$this->mediaStorage = $entityTypeManager
->getStorage('media');
$this
->drupalPlaceBlock('local_tasks_block');
$this->mediaType = $this
->createMediaType('test');
}
public function testTabAccess() {
$media = Media::create([
'bundle' => $this->mediaType
->id(),
'name' => 'Test media',
]);
$media
->save();
$this
->assertRevisionsListStatusCode($this
->drupalCreateUser([]), $media, 403);
$user = $this
->drupalCreateUser([
'administer media',
'view all media revisions',
]);
$media = Media::create([
'bundle' => $this->mediaType
->id(),
'name' => 'Test media',
]);
$media
->save();
$this
->assertRevisionsListStatusCode($user, $media, 403);
$this
->assertRevisionsTabNotExists($media);
$this
->createMediaRevision($media);
$this
->assertRevisionsListStatusCode($user, $media, 200);
$this
->assertRevisionsTabExists($media);
$revisionId = $this
->loadOldestRevisionId($media);
$this->mediaStorage
->deleteRevision($revisionId);
$this
->assertRevisionsListStatusCode($user, $media, 403);
$this
->assertRevisionsTabNotExists($media);
$this->mediaType
->setNewRevision(TRUE);
$this->mediaType
->save();
$media = Media::create([
'bundle' => $this->mediaType
->id(),
'name' => 'Test media',
]);
$media
->save();
$this
->assertRevisionsListStatusCode($user, $media, 200);
$this
->assertRevisionsTabExists($media);
}
public function testRevert() {
$media = Media::create([
'bundle' => $this->mediaType
->id(),
'name' => 'Test media',
]);
$media
->save();
$user = $this
->drupalCreateUser([
'administer media',
'view all media revisions',
]);
$this
->createMediaRevision($media);
$this
->assertRevisionsListStatusCode($user, $media, 200);
$this
->clickLink('Revert');
$this
->assertSession()
->statusCodeEquals(200);
$this
->getSession()
->getPage()
->pressButton('Revert');
$this
->assertSession()
->pageTextContains('Media Test media has been reverted');
}
protected function createMediaRevision(EntityInterface $media) {
$media
->setName($this
->randomMachineName());
$media
->setNewRevision();
$media
->save();
return $media;
}
protected function assertRevisionsListStatusCode(User $user, EntityInterface $media, $expectedStatusCode) {
$this
->drupalLogin($user);
$this
->drupalGet("/media/{$media->id()}/revisions");
$this
->assertSession()
->statusCodeEquals($expectedStatusCode);
}
protected function assertRevisionsTabNotExists(EntityInterface $media) {
$this
->drupalGet("/media/{$media->id()}/edit");
$this
->assertSession()
->statusCodeEquals(200);
$this
->assertSession()
->linkByHrefNotExists("/media/{$media->id()}/revisions");
}
protected function assertRevisionsTabExists(EntityInterface $media) {
$this
->drupalGet("/media/{$media->id()}/edit");
$this
->assertSession()
->statusCodeEquals(200);
$this
->assertSession()
->linkByHrefExists("/media/{$media->id()}/revisions");
}
protected function loadOldestRevisionId(EntityInterface $media) {
$result = $this->mediaStorage
->getQuery()
->allRevisions()
->condition('mid', $media
->id())
->sort('vid', 'ASC')
->range(NULL, 1)
->execute();
return array_keys($result) ? array_keys($result)[0] : NULL;
}
}