annotate core/modules/media/tests/src/Functional/MediaAccessTest.php @ 0:4c8ae668cc8c

Initial import (non-working)
author Chris Cannam
date Wed, 29 Nov 2017 16:09:58 +0000
parents
children 1fec387a4317
rev   line source
Chris@0 1 <?php
Chris@0 2
Chris@0 3 namespace Drupal\Tests\media\Functional;
Chris@0 4
Chris@0 5 use Drupal\media\Entity\Media;
Chris@0 6 use Drupal\Tests\system\Functional\Cache\AssertPageCacheContextsAndTagsTrait;
Chris@0 7 use Drupal\user\Entity\Role;
Chris@0 8 use Drupal\user\RoleInterface;
Chris@0 9
Chris@0 10 /**
Chris@0 11 * Basic access tests for Media.
Chris@0 12 *
Chris@0 13 * @group media
Chris@0 14 */
Chris@0 15 class MediaAccessTest extends MediaUiFunctionalTest {
Chris@0 16
Chris@0 17 use AssertPageCacheContextsAndTagsTrait;
Chris@0 18
Chris@0 19 /**
Chris@0 20 * Test some access control functionality.
Chris@0 21 */
Chris@0 22 public function testMediaAccess() {
Chris@0 23 $assert_session = $this->assertSession();
Chris@0 24
Chris@0 25 $media_type = $this->createMediaType();
Chris@0 26
Chris@0 27 // Create media.
Chris@0 28 $media = Media::create([
Chris@0 29 'bundle' => $media_type->id(),
Chris@0 30 'name' => 'Unnamed',
Chris@0 31 ]);
Chris@0 32 $media->save();
Chris@0 33 $user_media = Media::create([
Chris@0 34 'bundle' => $media_type->id(),
Chris@0 35 'name' => 'Unnamed',
Chris@0 36 'uid' => $this->nonAdminUser->id(),
Chris@0 37 ]);
Chris@0 38 $user_media->save();
Chris@0 39
Chris@0 40 // We are logged in as admin, so test 'administer media' permission.
Chris@0 41 $this->drupalGet('media/add/' . $media_type->id());
Chris@0 42 $this->assertCacheContext('user.permissions');
Chris@0 43 $assert_session->statusCodeEquals(200);
Chris@0 44 $this->drupalGet('media/' . $user_media->id());
Chris@0 45 $this->assertCacheContext('user.permissions');
Chris@0 46 $assert_session->statusCodeEquals(200);
Chris@0 47 $this->drupalGet('media/' . $user_media->id() . '/edit');
Chris@0 48 $this->assertCacheContext('user.permissions');
Chris@0 49 $assert_session->statusCodeEquals(200);
Chris@0 50 $this->drupalGet('media/' . $user_media->id() . '/delete');
Chris@0 51 $this->assertCacheContext('user.permissions');
Chris@0 52 $assert_session->statusCodeEquals(200);
Chris@0 53
Chris@0 54 $this->drupalLogin($this->nonAdminUser);
Chris@0 55 /** @var \Drupal\user\RoleInterface $role */
Chris@0 56 $role = Role::load(RoleInterface::AUTHENTICATED_ID);
Chris@0 57
Chris@0 58 // Test 'view media' permission.
Chris@0 59 user_role_revoke_permissions($role->id(), ['view media']);
Chris@0 60 $this->drupalGet('media/' . $media->id());
Chris@0 61 $this->assertCacheContext('user.permissions');
Chris@0 62 $assert_session->statusCodeEquals(403);
Chris@0 63 $access_result = $media->access('view', NULL, TRUE);
Chris@0 64 $this->assertSame("The 'view media' permission is required and the media item must be published.", $access_result->getReason());
Chris@0 65 $this->grantPermissions($role, ['view media']);
Chris@0 66 $this->drupalGet('media/' . $media->id());
Chris@0 67 $this->assertCacheContext('user');
Chris@0 68 $assert_session->statusCodeEquals(200);
Chris@0 69
Chris@0 70 // Test 'create media' permission.
Chris@0 71 $this->drupalGet('media/add/' . $media_type->id());
Chris@0 72 $this->assertCacheContext('user.permissions');
Chris@0 73 $assert_session->statusCodeEquals(403);
Chris@0 74 $this->grantPermissions($role, ['create media']);
Chris@0 75 $this->drupalGet('media/add/' . $media_type->id());
Chris@0 76 $this->assertCacheContext('user.permissions');
Chris@0 77 $assert_session->statusCodeEquals(200);
Chris@0 78
Chris@0 79 // Test 'update media' and 'delete media' permissions.
Chris@0 80 $this->drupalGet('media/' . $user_media->id() . '/edit');
Chris@0 81 $this->assertCacheContext('user');
Chris@0 82 $assert_session->statusCodeEquals(403);
Chris@0 83 $this->drupalGet('media/' . $user_media->id() . '/delete');
Chris@0 84 $this->assertCacheContext('user');
Chris@0 85 $assert_session->statusCodeEquals(403);
Chris@0 86 $this->grantPermissions($role, ['update media']);
Chris@0 87 $this->grantPermissions($role, ['delete media']);
Chris@0 88 $this->drupalGet('media/' . $user_media->id() . '/edit');
Chris@0 89 $this->assertCacheContext('user');
Chris@0 90 $assert_session->statusCodeEquals(200);
Chris@0 91 $this->drupalGet('media/' . $user_media->id() . '/delete');
Chris@0 92 $this->assertCacheContext('user');
Chris@0 93 $assert_session->statusCodeEquals(200);
Chris@0 94
Chris@0 95 // Test 'update any media' and 'delete any media' permissions.
Chris@0 96 $this->drupalGet('media/' . $media->id() . '/edit');
Chris@0 97 $this->assertCacheContext('user');
Chris@0 98 $assert_session->statusCodeEquals(403);
Chris@0 99 $this->drupalGet('media/' . $media->id() . '/delete');
Chris@0 100 $this->assertCacheContext('user');
Chris@0 101 $assert_session->statusCodeEquals(403);
Chris@0 102 $this->grantPermissions($role, ['update any media']);
Chris@0 103 $this->grantPermissions($role, ['delete any media']);
Chris@0 104 $this->drupalGet('media/' . $media->id() . '/edit');
Chris@0 105 $this->assertCacheContext('user.permissions');
Chris@0 106 $assert_session->statusCodeEquals(200);
Chris@0 107 $this->drupalGet('media/' . $media->id() . '/delete');
Chris@0 108 $this->assertCacheContext('user.permissions');
Chris@0 109 $assert_session->statusCodeEquals(200);
Chris@0 110
Chris@0 111 // Test the 'access media overview' permission.
Chris@0 112 $this->grantPermissions($role, ['access content overview']);
Chris@0 113 $this->drupalGet('admin/content');
Chris@0 114 $assert_session->linkByHrefNotExists('/admin/content/media');
Chris@0 115 $this->assertCacheContext('user');
Chris@0 116
Chris@0 117 // Create a new role, which implicitly checks if the permission exists.
Chris@0 118 $mediaOverviewRole = $this->createRole(['access content overview', 'access media overview']);
Chris@0 119 $this->nonAdminUser->addRole($mediaOverviewRole);
Chris@0 120 $this->nonAdminUser->save();
Chris@0 121
Chris@0 122 $this->drupalGet('admin/content');
Chris@0 123 $assert_session->linkByHrefExists('/admin/content/media');
Chris@0 124 $this->clickLink('Media');
Chris@0 125 $this->assertCacheContext('user.permissions');
Chris@0 126 $assert_session->statusCodeEquals(200);
Chris@0 127 $assert_session->elementExists('css', '.view-media');
Chris@0 128 $assert_session->pageTextContains($this->loggedInUser->getDisplayName());
Chris@0 129 $assert_session->pageTextContains($this->nonAdminUser->getDisplayName());
Chris@0 130 $assert_session->linkByHrefExists('/media/' . $media->id());
Chris@0 131 $assert_session->linkByHrefExists('/media/' . $user_media->id());
Chris@0 132 }
Chris@0 133
Chris@0 134 }