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 }
|