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