1515use Illuminate \Testing \TestResponse ;
1616use Tests \TestCase ;
1717
18- class RolesTest extends TestCase
18+ class RolePermissionsTest extends TestCase
1919{
2020 protected User $ user ;
2121
@@ -25,208 +25,6 @@ protected function setUp(): void
2525 $ this ->user = $ this ->users ->viewer ();
2626 }
2727
28- public function test_admin_can_see_settings ()
29- {
30- $ this ->asAdmin ()->get ('/settings/features ' )->assertSee ('Settings ' );
31- }
32-
33- public function test_cannot_delete_admin_role ()
34- {
35- $ adminRole = Role::getRole ('admin ' );
36- $ deletePageUrl = '/settings/roles/delete/ ' . $ adminRole ->id ;
37-
38- $ this ->asAdmin ()->get ($ deletePageUrl );
39- $ this ->delete ($ deletePageUrl )->assertRedirect ($ deletePageUrl );
40- $ this ->get ($ deletePageUrl )->assertSee ('cannot be deleted ' );
41- }
42-
43- public function test_role_cannot_be_deleted_if_default ()
44- {
45- $ newRole = $ this ->users ->createRole ();
46- $ this ->setSettings (['registration-role ' => $ newRole ->id ]);
47-
48- $ deletePageUrl = '/settings/roles/delete/ ' . $ newRole ->id ;
49- $ this ->asAdmin ()->get ($ deletePageUrl );
50- $ this ->delete ($ deletePageUrl )->assertRedirect ($ deletePageUrl );
51- $ this ->get ($ deletePageUrl )->assertSee ('cannot be deleted ' );
52- }
53-
54- public function test_role_create_update_delete_flow ()
55- {
56- $ testRoleName = 'Test Role ' ;
57- $ testRoleDesc = 'a little test description ' ;
58- $ testRoleUpdateName = 'An Super Updated role ' ;
59-
60- // Creation
61- $ resp = $ this ->asAdmin ()->get ('/settings/features ' );
62- $ this ->withHtml ($ resp )->assertElementContains ('a[href=" ' . url ('/settings/roles ' ) . '"] ' , 'Roles ' );
63-
64- $ resp = $ this ->get ('/settings/roles ' );
65- $ this ->withHtml ($ resp )->assertElementContains ('a[href=" ' . url ('/settings/roles/new ' ) . '"] ' , 'Create New Role ' );
66-
67- $ resp = $ this ->get ('/settings/roles/new ' );
68- $ this ->withHtml ($ resp )->assertElementContains ('form[action=" ' . url ('/settings/roles/new ' ) . '"] ' , 'Save Role ' );
69-
70- $ resp = $ this ->post ('/settings/roles/new ' , [
71- 'display_name ' => $ testRoleName ,
72- 'description ' => $ testRoleDesc ,
73- ]);
74- $ resp ->assertRedirect ('/settings/roles ' );
75-
76- $ resp = $ this ->get ('/settings/roles ' );
77- $ resp ->assertSee ($ testRoleName );
78- $ resp ->assertSee ($ testRoleDesc );
79- $ this ->assertDatabaseHas ('roles ' , [
80- 'display_name ' => $ testRoleName ,
81- 'description ' => $ testRoleDesc ,
82- 'mfa_enforced ' => false ,
83- ]);
84-
85- /** @var Role $role */
86- $ role = Role::query ()->where ('display_name ' , '= ' , $ testRoleName )->first ();
87-
88- // Updating
89- $ resp = $ this ->get ('/settings/roles/ ' . $ role ->id );
90- $ resp ->assertSee ($ testRoleName );
91- $ resp ->assertSee ($ testRoleDesc );
92- $ this ->withHtml ($ resp )->assertElementContains ('form[action=" ' . url ('/settings/roles/ ' . $ role ->id ) . '"] ' , 'Save Role ' );
93-
94- $ resp = $ this ->put ('/settings/roles/ ' . $ role ->id , [
95- 'display_name ' => $ testRoleUpdateName ,
96- 'description ' => $ testRoleDesc ,
97- 'mfa_enforced ' => 'true ' ,
98- ]);
99- $ resp ->assertRedirect ('/settings/roles ' );
100- $ this ->assertDatabaseHas ('roles ' , [
101- 'display_name ' => $ testRoleUpdateName ,
102- 'description ' => $ testRoleDesc ,
103- 'mfa_enforced ' => true ,
104- ]);
105-
106- // Deleting
107- $ resp = $ this ->get ('/settings/roles/ ' . $ role ->id );
108- $ this ->withHtml ($ resp )->assertElementContains ('a[href=" ' . url ("/settings/roles/delete/ $ role ->id " ) . '"] ' , 'Delete Role ' );
109-
110- $ resp = $ this ->get ("/settings/roles/delete/ $ role ->id " );
111- $ resp ->assertSee ($ testRoleUpdateName );
112- $ this ->withHtml ($ resp )->assertElementContains ('form[action=" ' . url ("/settings/roles/delete/ $ role ->id " ) . '"] ' , 'Confirm ' );
113-
114- $ resp = $ this ->delete ("/settings/roles/delete/ $ role ->id " );
115- $ resp ->assertRedirect ('/settings/roles ' );
116- $ this ->get ('/settings/roles ' )->assertSee ('Role successfully deleted ' );
117- $ this ->assertActivityExists (ActivityType::ROLE_DELETE );
118- }
119-
120- public function test_admin_role_cannot_be_removed_if_user_last_admin ()
121- {
122- /** @var Role $adminRole */
123- $ adminRole = Role::query ()->where ('system_name ' , '= ' , 'admin ' )->first ();
124- $ adminUser = $ this ->users ->admin ();
125- $ adminRole ->users ()->where ('id ' , '!= ' , $ adminUser ->id )->delete ();
126- $ this ->assertEquals (1 , $ adminRole ->users ()->count ());
127-
128- $ viewerRole = $ this ->users ->viewer ()->roles ()->first ();
129-
130- $ editUrl = '/settings/users/ ' . $ adminUser ->id ;
131- $ resp = $ this ->actingAs ($ adminUser )->put ($ editUrl , [
132- 'name ' => $ adminUser ->name ,
133- 'email ' => $ adminUser ->email ,
134- 'roles ' => [
135- 'viewer ' => strval ($ viewerRole ->id ),
136- ],
137- ]);
138-
139- $ resp ->assertRedirect ($ editUrl );
140-
141- $ resp = $ this ->get ($ editUrl );
142- $ resp ->assertSee ('This user is the only user assigned to the administrator role ' );
143- }
144-
145- public function test_migrate_users_on_delete_works ()
146- {
147- /** @var Role $roleA */
148- $ roleA = Role::query ()->create (['display_name ' => 'Delete Test A ' ]);
149- /** @var Role $roleB */
150- $ roleB = Role::query ()->create (['display_name ' => 'Delete Test B ' ]);
151- $ this ->user ->attachRole ($ roleB );
152-
153- $ this ->assertCount (0 , $ roleA ->users ()->get ());
154- $ this ->assertCount (1 , $ roleB ->users ()->get ());
155-
156- $ deletePage = $ this ->asAdmin ()->get ("/settings/roles/delete/ $ roleB ->id " );
157- $ this ->withHtml ($ deletePage )->assertElementExists ('select[name=migrate_role_id] ' );
158- $ this ->asAdmin ()->delete ("/settings/roles/delete/ $ roleB ->id " , [
159- 'migrate_role_id ' => $ roleA ->id ,
160- ]);
161-
162- $ this ->assertCount (1 , $ roleA ->users ()->get ());
163- $ this ->assertEquals ($ this ->user ->id , $ roleA ->users ()->first ()->id );
164- }
165-
166- public function test_delete_with_empty_migrate_option_works ()
167- {
168- $ role = $ this ->users ->attachNewRole ($ this ->user );
169-
170- $ this ->assertCount (1 , $ role ->users ()->get ());
171-
172- $ deletePage = $ this ->asAdmin ()->get ("/settings/roles/delete/ $ role ->id " );
173- $ this ->withHtml ($ deletePage )->assertElementExists ('select[name=migrate_role_id] ' );
174- $ resp = $ this ->asAdmin ()->delete ("/settings/roles/delete/ $ role ->id " , [
175- 'migrate_role_id ' => '' ,
176- ]);
177-
178- $ resp ->assertRedirect ('/settings/roles ' );
179- $ this ->assertDatabaseMissing ('roles ' , ['id ' => $ role ->id ]);
180- }
181-
182- public function test_entity_permissions_are_removed_on_delete ()
183- {
184- /** @var Role $roleA */
185- $ roleA = Role::query ()->create (['display_name ' => 'Entity Permissions Delete Test ' ]);
186- $ page = $ this ->entities ->page ();
187-
188- $ this ->permissions ->setEntityPermissions ($ page , ['view ' ], [$ roleA ]);
189-
190- $ this ->assertDatabaseHas ('entity_permissions ' , [
191- 'role_id ' => $ roleA ->id ,
192- 'entity_id ' => $ page ->id ,
193- 'entity_type ' => $ page ->getMorphClass (),
194- ]);
195-
196- $ this ->asAdmin ()->delete ("/settings/roles/delete/ $ roleA ->id " );
197-
198- $ this ->assertDatabaseMissing ('entity_permissions ' , [
199- 'role_id ' => $ roleA ->id ,
200- 'entity_id ' => $ page ->id ,
201- 'entity_type ' => $ page ->getMorphClass (),
202- ]);
203- }
204-
205- public function test_image_view_notice_shown_on_role_form ()
206- {
207- /** @var Role $role */
208- $ role = Role::query ()->first ();
209- $ this ->asAdmin ()->get ("/settings/roles/ {$ role ->id }" )
210- ->assertSee ('Actual access of uploaded image files will be dependant upon system image storage option ' );
211- }
212-
213- public function test_copy_role_button_shown ()
214- {
215- /** @var Role $role */
216- $ role = Role::query ()->first ();
217- $ resp = $ this ->asAdmin ()->get ("/settings/roles/ {$ role ->id }" );
218- $ this ->withHtml ($ resp )->assertElementContains ('a[href$="/roles/new?copy_from= ' . $ role ->id . '"] ' , 'Copy ' );
219- }
220-
221- public function test_copy_from_param_on_create_prefills_with_other_role_data ()
222- {
223- /** @var Role $role */
224- $ role = Role::query ()->first ();
225- $ resp = $ this ->asAdmin ()->get ("/settings/roles/new?copy_from= {$ role ->id }" );
226- $ resp ->assertOk ();
227- $ this ->withHtml ($ resp )->assertElementExists ('input[name="display_name"][value=" ' . ($ role ->display_name . ' (Copy) ' ) . '"] ' );
228- }
229-
23028 public function test_manage_user_permission ()
23129 {
23230 $ this ->actingAs ($ this ->user )->get ('/settings/users ' )->assertRedirect ('/ ' );
@@ -306,7 +104,7 @@ public function test_settings_manage_permission()
306104
307105 public function test_restrictions_manage_all_permission ()
308106 {
309- $ page = Page:: query ()-> get ()-> first ();
107+ $ page = $ this -> entities -> page ();
310108
311109 $ this ->actingAs ($ this ->user )->get ($ page ->getUrl ())->assertDontSee ('Permissions ' );
312110 $ this ->get ($ page ->getUrl ('/permissions ' ))->assertRedirect ('/ ' );
@@ -322,8 +120,7 @@ public function test_restrictions_manage_all_permission()
322120
323121 public function test_restrictions_manage_own_permission ()
324122 {
325- /** @var Page $otherUsersPage */
326- $ otherUsersPage = Page::query ()->first ();
123+ $ otherUsersPage = $ this ->entities ->page ();
327124 $ content = $ this ->entities ->createChainBelongingToUser ($ this ->user );
328125
329126 // Set a different creator on the page we're checking to ensure
@@ -798,44 +595,6 @@ public function test_page_delete_all_permission()
798595 $ this ->get ($ parent ->getUrl ())->assertDontSee ($ otherPage ->name );
799596 }
800597
801- public function test_public_role_visible_in_user_edit_screen ()
802- {
803- /** @var User $user */
804- $ user = User::query ()->first ();
805- $ adminRole = Role::getSystemRole ('admin ' );
806- $ publicRole = Role::getSystemRole ('public ' );
807- $ resp = $ this ->asAdmin ()->get ('/settings/users/ ' . $ user ->id );
808- $ this ->withHtml ($ resp )->assertElementExists ('[name="roles[ ' . $ adminRole ->id . ']"] ' )
809- ->assertElementExists ('[name="roles[ ' . $ publicRole ->id . ']"] ' );
810- }
811-
812- public function test_public_role_visible_in_role_listing ()
813- {
814- $ this ->asAdmin ()->get ('/settings/roles ' )
815- ->assertSee ('Admin ' )
816- ->assertSee ('Public ' );
817- }
818-
819- public function test_public_role_visible_in_default_role_setting ()
820- {
821- $ resp = $ this ->asAdmin ()->get ('/settings/registration ' );
822- $ this ->withHtml ($ resp )->assertElementExists ('[data-system-role-name="admin"] ' )
823- ->assertElementExists ('[data-system-role-name="public"] ' );
824- }
825-
826- public function test_public_role_not_deletable ()
827- {
828- /** @var Role $publicRole */
829- $ publicRole = Role::getSystemRole ('public ' );
830- $ resp = $ this ->asAdmin ()->delete ('/settings/roles/delete/ ' . $ publicRole ->id );
831- $ resp ->assertRedirect ('/ ' );
832-
833- $ this ->get ('/settings/roles/delete/ ' . $ publicRole ->id );
834- $ resp = $ this ->delete ('/settings/roles/delete/ ' . $ publicRole ->id );
835- $ resp ->assertRedirect ('/settings/roles/delete/ ' . $ publicRole ->id );
836- $ resp = $ this ->get ('/settings/roles/delete/ ' . $ publicRole ->id );
837- $ resp ->assertSee ('This role is a system role and cannot be deleted ' );
838- }
839598
840599 public function test_image_delete_own_permission ()
841600 {
@@ -874,23 +633,6 @@ public function test_image_delete_all_permission()
874633 $ this ->assertDatabaseMissing ('images ' , ['id ' => $ image ->id ]);
875634 }
876635
877- public function test_role_permission_removal ()
878- {
879- // To cover issue fixed in f99c8ff99aee9beb8c692f36d4b84dc6e651e50a.
880- $ page = $ this ->entities ->page ();
881- $ viewerRole = Role::getRole ('viewer ' );
882- $ viewer = $ this ->users ->viewer ();
883- $ this ->actingAs ($ viewer )->get ($ page ->getUrl ())->assertOk ();
884-
885- $ this ->asAdmin ()->put ('/settings/roles/ ' . $ viewerRole ->id , [
886- 'display_name ' => $ viewerRole ->display_name ,
887- 'description ' => $ viewerRole ->description ,
888- 'permissions ' => [],
889- ])->assertStatus (302 );
890-
891- $ this ->actingAs ($ viewer )->get ($ page ->getUrl ())->assertStatus (404 );
892- }
893-
894636 public function test_empty_state_actions_not_visible_without_permission ()
895637 {
896638 $ admin = $ this ->users ->admin ();
0 commit comments