View source
<?php
namespace Drupal\Tests\media_revisions_ui\Functional;
use Drupal\Core\Entity\EntityInterface;
use Drupal\media\Entity\Media;
use Drupal\Tests\media\Traits\MediaTypeCreationTrait;
class MediaRevisionsUiAccessTest extends MediaRevisionsTestBase {
use MediaTypeCreationTrait;
public static $modules = [
'system',
'node',
'media',
'media_test_source',
'media_revisions_ui',
'block',
];
protected function setUp() {
parent::setUp();
$this
->drupalPlaceBlock('local_tasks_block');
}
public function testOperationsAccess() {
$type1 = $this
->createMediaType('test');
$type2 = $this
->createMediaType('test');
$media = Media::create([
'bundle' => $type1
->id(),
'name' => 'Test media 1',
]);
$media
->save();
$this
->createMediaRevision($media);
$mediaRevision = $this
->loadOldestRevisionId($media);
$media2 = Media::create([
'bundle' => $type2
->id(),
'name' => 'Test media 2',
]);
$media2
->save();
$this
->createMediaRevision($media2);
$media2Revision = $this
->loadOldestRevisionId($media2);
$this
->createUserWithPermissionsAndLogin([
'administer media',
]);
$this
->assertRevisionViewStatusCode($mediaRevision, 200);
$this
->assertRevisionRevertStatusCode($mediaRevision, 200);
$this
->assertRevisionDeleteStatusCode($mediaRevision, 200);
$this
->assertRevisionViewStatusCode($media2Revision, 200);
$this
->assertRevisionRevertStatusCode($media2Revision, 200);
$this
->assertRevisionDeleteStatusCode($media2Revision, 200);
$this
->createUserWithPermissionsAndLogin([
'view all media revisions',
]);
$this
->assertRevisionViewStatusCode($mediaRevision, 200);
$this
->assertRevisionRevertStatusCode($mediaRevision, 403);
$this
->assertRevisionDeleteStatusCode($mediaRevision, 403);
$this
->assertRevisionViewStatusCode($media2Revision, 200);
$this
->assertRevisionRevertStatusCode($media2Revision, 403);
$this
->assertRevisionDeleteStatusCode($media2Revision, 403);
$this
->createUserWithPermissionsAndLogin([
'update any media',
'revert all media revisions',
]);
$this
->assertRevisionViewStatusCode($mediaRevision, 403);
$this
->assertRevisionRevertStatusCode($mediaRevision, 200);
$this
->assertRevisionDeleteStatusCode($mediaRevision, 403);
$this
->assertRevisionViewStatusCode($media2Revision, 403);
$this
->assertRevisionRevertStatusCode($media2Revision, 200);
$this
->assertRevisionDeleteStatusCode($media2Revision, 403);
$this
->createUserWithPermissionsAndLogin([
'delete any media',
'delete all media revisions',
]);
$this
->assertRevisionViewStatusCode($mediaRevision, 403);
$this
->assertRevisionRevertStatusCode($mediaRevision, 403);
$this
->assertRevisionDeleteStatusCode($mediaRevision, 200);
$this
->assertRevisionViewStatusCode($media2Revision, 403);
$this
->assertRevisionRevertStatusCode($media2Revision, 403);
$this
->assertRevisionDeleteStatusCode($media2Revision, 200);
$this
->createUserWithPermissionsAndLogin([
"view {$type1->id()} media revisions",
]);
$this
->assertRevisionViewStatusCode($mediaRevision, 200);
$this
->assertRevisionRevertStatusCode($mediaRevision, 403);
$this
->assertRevisionDeleteStatusCode($mediaRevision, 403);
$this
->assertRevisionViewStatusCode($media2Revision, 403);
$this
->assertRevisionRevertStatusCode($media2Revision, 403);
$this
->assertRevisionDeleteStatusCode($media2Revision, 403);
$this
->createUserWithPermissionsAndLogin([
"update any media",
"revert {$type1->id()} media revisions",
]);
$this
->assertRevisionViewStatusCode($mediaRevision, 403);
$this
->assertRevisionRevertStatusCode($mediaRevision, 200);
$this
->assertRevisionDeleteStatusCode($mediaRevision, 403);
$this
->assertRevisionViewStatusCode($media2Revision, 403);
$this
->assertRevisionRevertStatusCode($media2Revision, 403);
$this
->assertRevisionDeleteStatusCode($media2Revision, 403);
$this
->createUserWithPermissionsAndLogin([
"delete any media",
"delete {$type1->id()} media revisions",
]);
$this
->assertRevisionViewStatusCode($mediaRevision, 403);
$this
->assertRevisionRevertStatusCode($mediaRevision, 403);
$this
->assertRevisionDeleteStatusCode($mediaRevision, 200);
$this
->assertRevisionViewStatusCode($media2Revision, 403);
$this
->assertRevisionRevertStatusCode($media2Revision, 403);
$this
->assertRevisionDeleteStatusCode($media2Revision, 403);
$this
->createUserWithPermissionsAndLogin([
"revert {$type1->id()} media revisions",
]);
$this
->assertRevisionRevertStatusCode($mediaRevision, 403);
$this
->createUserWithPermissionsAndLogin([
"delete {$type1->id()} media revisions",
]);
$this
->assertRevisionDeleteStatusCode($mediaRevision, 403);
$this
->createUserWithPermissionsAndLogin([
"update any media",
]);
$this
->assertRevisionRevertStatusCode($mediaRevision, 403);
$this
->createUserWithPermissionsAndLogin([
"delete any media",
]);
$this
->assertRevisionDeleteStatusCode($mediaRevision, 403);
}
protected function assertRevisionViewStatusCode(EntityInterface $media, $expectedStatusCode) {
$this
->drupalGet("/media/{$media->id()}/revisions/{$media->getRevisionId()}/view");
$this
->assertSession()
->statusCodeEquals($expectedStatusCode);
}
protected function assertRevisionRevertStatusCode(EntityInterface $media, $expectedStatusCode) {
$this
->drupalGet("/media/{$media->id()}/revisions/{$media->getRevisionId()}/revert");
$this
->assertSession()
->statusCodeEquals($expectedStatusCode);
}
protected function assertRevisionDeleteStatusCode(EntityInterface $media, $expectedStatusCode) {
$this
->drupalGet("/media/{$media->id()}/revisions/{$media->getRevisionId()}/delete");
$this
->assertSession()
->statusCodeEquals($expectedStatusCode);
}
}