annotate core/modules/media/tests/src/Functional/MediaAccessTest.php @ 14:1fec387a4317

Update Drupal core to 8.5.2 via Composer
author Chris Cannam
date Mon, 23 Apr 2018 09:46:53 +0100
parents 4c8ae668cc8c
children 129ea1e6d783
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@14 15 class MediaAccessTest extends MediaFunctionalTestBase {
Chris@0 16
Chris@0 17 use AssertPageCacheContextsAndTagsTrait;
Chris@0 18
Chris@0 19 /**
Chris@14 20 * {@inheritdoc}
Chris@14 21 */
Chris@14 22 public static $modules = [
Chris@14 23 'block',
Chris@14 24 'media_test_source',
Chris@14 25 ];
Chris@14 26
Chris@14 27 /**
Chris@14 28 * {@inheritdoc}
Chris@14 29 */
Chris@14 30 protected function setUp() {
Chris@14 31 parent::setUp();
Chris@14 32 // This is needed to provide the user cache context for a below assertion.
Chris@14 33 $this->drupalPlaceBlock('local_tasks_block');
Chris@14 34 }
Chris@14 35
Chris@14 36 /**
Chris@0 37 * Test some access control functionality.
Chris@0 38 */
Chris@0 39 public function testMediaAccess() {
Chris@0 40 $assert_session = $this->assertSession();
Chris@0 41
Chris@0 42 $media_type = $this->createMediaType();
Chris@0 43
Chris@0 44 // Create media.
Chris@0 45 $media = Media::create([
Chris@0 46 'bundle' => $media_type->id(),
Chris@0 47 'name' => 'Unnamed',
Chris@0 48 ]);
Chris@0 49 $media->save();
Chris@0 50 $user_media = Media::create([
Chris@0 51 'bundle' => $media_type->id(),
Chris@0 52 'name' => 'Unnamed',
Chris@0 53 'uid' => $this->nonAdminUser->id(),
Chris@0 54 ]);
Chris@0 55 $user_media->save();
Chris@0 56
Chris@0 57 // We are logged in as admin, so test 'administer media' permission.
Chris@0 58 $this->drupalGet('media/add/' . $media_type->id());
Chris@0 59 $this->assertCacheContext('user.permissions');
Chris@0 60 $assert_session->statusCodeEquals(200);
Chris@0 61 $this->drupalGet('media/' . $user_media->id());
Chris@0 62 $this->assertCacheContext('user.permissions');
Chris@0 63 $assert_session->statusCodeEquals(200);
Chris@0 64 $this->drupalGet('media/' . $user_media->id() . '/edit');
Chris@0 65 $this->assertCacheContext('user.permissions');
Chris@0 66 $assert_session->statusCodeEquals(200);
Chris@0 67 $this->drupalGet('media/' . $user_media->id() . '/delete');
Chris@0 68 $this->assertCacheContext('user.permissions');
Chris@0 69 $assert_session->statusCodeEquals(200);
Chris@0 70
Chris@0 71 $this->drupalLogin($this->nonAdminUser);
Chris@0 72 /** @var \Drupal\user\RoleInterface $role */
Chris@0 73 $role = Role::load(RoleInterface::AUTHENTICATED_ID);
Chris@0 74
Chris@0 75 // Test 'view media' permission.
Chris@0 76 user_role_revoke_permissions($role->id(), ['view media']);
Chris@0 77 $this->drupalGet('media/' . $media->id());
Chris@0 78 $this->assertCacheContext('user.permissions');
Chris@0 79 $assert_session->statusCodeEquals(403);
Chris@0 80 $access_result = $media->access('view', NULL, TRUE);
Chris@0 81 $this->assertSame("The 'view media' permission is required and the media item must be published.", $access_result->getReason());
Chris@0 82 $this->grantPermissions($role, ['view media']);
Chris@0 83 $this->drupalGet('media/' . $media->id());
Chris@14 84 $this->assertCacheContext('user.permissions');
Chris@0 85 $assert_session->statusCodeEquals(200);
Chris@0 86
Chris@14 87 // Test 'create BUNDLE media' permission.
Chris@14 88 $this->drupalGet('media/add/' . $media_type->id());
Chris@14 89 $this->assertCacheContext('user.permissions');
Chris@14 90 $assert_session->statusCodeEquals(403);
Chris@14 91 $permissions = ['create ' . $media_type->id() . ' media'];
Chris@14 92 $this->grantPermissions($role, $permissions);
Chris@14 93 $this->drupalGet('media/add/' . $media_type->id());
Chris@14 94 $this->assertCacheContext('user.permissions');
Chris@14 95 $assert_session->statusCodeEquals(200);
Chris@14 96 user_role_revoke_permissions($role->id(), $permissions);
Chris@14 97 $role = Role::load(RoleInterface::AUTHENTICATED_ID);
Chris@14 98
Chris@0 99 // Test 'create media' permission.
Chris@0 100 $this->drupalGet('media/add/' . $media_type->id());
Chris@0 101 $this->assertCacheContext('user.permissions');
Chris@0 102 $assert_session->statusCodeEquals(403);
Chris@14 103 $permissions = ['create media'];
Chris@14 104 $this->grantPermissions($role, $permissions);
Chris@0 105 $this->drupalGet('media/add/' . $media_type->id());
Chris@0 106 $this->assertCacheContext('user.permissions');
Chris@0 107 $assert_session->statusCodeEquals(200);
Chris@14 108 user_role_revoke_permissions($role->id(), $permissions);
Chris@14 109 $role = Role::load(RoleInterface::AUTHENTICATED_ID);
Chris@0 110
Chris@14 111 // Test 'edit own BUNDLE media' and 'delete own BUNDLE media' permissions.
Chris@0 112 $this->drupalGet('media/' . $user_media->id() . '/edit');
Chris@14 113 $this->assertCacheContext('user.permissions');
Chris@0 114 $assert_session->statusCodeEquals(403);
Chris@0 115 $this->drupalGet('media/' . $user_media->id() . '/delete');
Chris@14 116 $this->assertCacheContext('user.permissions');
Chris@0 117 $assert_session->statusCodeEquals(403);
Chris@14 118 $permissions = [
Chris@14 119 'edit own ' . $user_media->bundle() . ' media',
Chris@14 120 'delete own ' . $user_media->bundle() . ' media',
Chris@14 121 ];
Chris@14 122 $this->grantPermissions($role, $permissions);
Chris@0 123 $this->drupalGet('media/' . $user_media->id() . '/edit');
Chris@0 124 $this->assertCacheContext('user');
Chris@0 125 $assert_session->statusCodeEquals(200);
Chris@0 126 $this->drupalGet('media/' . $user_media->id() . '/delete');
Chris@0 127 $this->assertCacheContext('user');
Chris@0 128 $assert_session->statusCodeEquals(200);
Chris@14 129 user_role_revoke_permissions($role->id(), $permissions);
Chris@14 130 $role = Role::load(RoleInterface::AUTHENTICATED_ID);
Chris@0 131
Chris@14 132 // Test 'edit any BUNDLE media' and 'delete any BUNDLE media' permissions.
Chris@0 133 $this->drupalGet('media/' . $media->id() . '/edit');
Chris@14 134 $this->assertCacheContext('user.permissions');
Chris@0 135 $assert_session->statusCodeEquals(403);
Chris@0 136 $this->drupalGet('media/' . $media->id() . '/delete');
Chris@14 137 $this->assertCacheContext('user.permissions');
Chris@0 138 $assert_session->statusCodeEquals(403);
Chris@14 139 $permissions = [
Chris@14 140 'edit any ' . $media->bundle() . ' media',
Chris@14 141 'delete any ' . $media->bundle() . ' media',
Chris@14 142 ];
Chris@14 143 $this->grantPermissions($role, $permissions);
Chris@0 144 $this->drupalGet('media/' . $media->id() . '/edit');
Chris@0 145 $this->assertCacheContext('user.permissions');
Chris@0 146 $assert_session->statusCodeEquals(200);
Chris@0 147 $this->drupalGet('media/' . $media->id() . '/delete');
Chris@0 148 $this->assertCacheContext('user.permissions');
Chris@0 149 $assert_session->statusCodeEquals(200);
Chris@0 150
Chris@0 151 // Test the 'access media overview' permission.
Chris@0 152 $this->grantPermissions($role, ['access content overview']);
Chris@0 153 $this->drupalGet('admin/content');
Chris@0 154 $assert_session->linkByHrefNotExists('/admin/content/media');
Chris@0 155 $this->assertCacheContext('user');
Chris@0 156
Chris@0 157 // Create a new role, which implicitly checks if the permission exists.
Chris@0 158 $mediaOverviewRole = $this->createRole(['access content overview', 'access media overview']);
Chris@0 159 $this->nonAdminUser->addRole($mediaOverviewRole);
Chris@0 160 $this->nonAdminUser->save();
Chris@0 161
Chris@0 162 $this->drupalGet('admin/content');
Chris@0 163 $assert_session->linkByHrefExists('/admin/content/media');
Chris@0 164 $this->clickLink('Media');
Chris@0 165 $this->assertCacheContext('user.permissions');
Chris@0 166 $assert_session->statusCodeEquals(200);
Chris@0 167 $assert_session->elementExists('css', '.view-media');
Chris@0 168 $assert_session->pageTextContains($this->loggedInUser->getDisplayName());
Chris@0 169 $assert_session->pageTextContains($this->nonAdminUser->getDisplayName());
Chris@0 170 $assert_session->linkByHrefExists('/media/' . $media->id());
Chris@0 171 $assert_session->linkByHrefExists('/media/' . $user_media->id());
Chris@0 172 }
Chris@0 173
Chris@0 174 }