]> BookStack Code Mirror - bookstack/blob - tests/Auth/GroupSyncServiceTest.php
Added ability to escape role "External Auth ID" commas
[bookstack] / tests / Auth / GroupSyncServiceTest.php
1 <?php
2
3 namespace Tests\Auth;
4
5 use BookStack\Auth\Access\GroupSyncService;
6 use BookStack\Auth\Role;
7 use BookStack\Auth\User;
8 use Tests\TestCase;
9
10 class GroupSyncServiceTest extends TestCase
11 {
12
13     public function test_user_is_assigned_to_matching_roles()
14     {
15         $user = $this->getViewer();
16
17         $roleA = Role::factory()->create(['display_name' => 'Wizards']);
18         $roleB = Role::factory()->create(['display_name' => 'Gremlins']);
19         $roleC = Role::factory()->create(['display_name' => 'ABC123', 'external_auth_id' => 'sales']);
20         $roleD = Role::factory()->create(['display_name' => 'DEF456', 'external_auth_id' => 'admin-team']);
21
22         foreach([$roleA, $roleB, $roleC, $roleD] as $role) {
23             $this->assertFalse($user->hasRole($role->id));
24         }
25
26         (new GroupSyncService())->syncUserWithFoundGroups($user, ['Wizards', 'Gremlinz', 'Sales', 'Admin Team'], false);
27
28         $user = User::query()->find($user->id);
29         $this->assertTrue($user->hasRole($roleA->id));
30         $this->assertFalse($user->hasRole($roleB->id));
31         $this->assertTrue($user->hasRole($roleC->id));
32         $this->assertTrue($user->hasRole($roleD->id));
33     }
34
35     public function test_multiple_values_in_role_external_auth_id_handled()
36     {
37         $user = $this->getViewer();
38         $role = Role::factory()->create(['display_name' => 'ABC123', 'external_auth_id' => 'sales, engineering, developers, marketers']);
39         $this->assertFalse($user->hasRole($role->id));
40
41         (new GroupSyncService())->syncUserWithFoundGroups($user, ['Developers'], false);
42
43         $user = User::query()->find($user->id);
44         $this->assertTrue($user->hasRole($role->id));
45     }
46
47     public function test_commas_can_be_used_in_external_auth_id_if_escaped()
48     {
49         $user = $this->getViewer();
50         $role = Role::factory()->create(['display_name' => 'ABC123', 'external_auth_id' => 'sales\,-developers, marketers']);
51         $this->assertFalse($user->hasRole($role->id));
52
53         (new GroupSyncService())->syncUserWithFoundGroups($user, ['Sales, Developers'], false);
54
55         $user = User::query()->find($user->id);
56         $this->assertTrue($user->hasRole($role->id));
57     }
58
59 }