5 use BookStack\Access\GroupSyncService;
6 use BookStack\Users\Models\Role;
7 use BookStack\Users\Models\User;
10 class GroupSyncServiceTest extends TestCase
12 public function test_user_is_assigned_to_matching_roles()
14 $user = $this->users->viewer();
16 $roleA = Role::factory()->create(['display_name' => 'Wizards']);
17 $roleB = Role::factory()->create(['display_name' => 'Gremlins']);
18 $roleC = Role::factory()->create(['display_name' => 'ABC123', 'external_auth_id' => 'sales']);
19 $roleD = Role::factory()->create(['display_name' => 'DEF456', 'external_auth_id' => 'admin-team']);
21 foreach ([$roleA, $roleB, $roleC, $roleD] as $role) {
22 $this->assertFalse($user->hasRole($role->id));
25 (new GroupSyncService())->syncUserWithFoundGroups($user, ['Wizards', 'Gremlinz', 'Sales', 'Admin Team'], false);
27 $user = User::query()->find($user->id);
28 $this->assertTrue($user->hasRole($roleA->id));
29 $this->assertFalse($user->hasRole($roleB->id));
30 $this->assertTrue($user->hasRole($roleC->id));
31 $this->assertTrue($user->hasRole($roleD->id));
34 public function test_multiple_values_in_role_external_auth_id_handled()
36 $user = $this->users->viewer();
37 $role = Role::factory()->create(['display_name' => 'ABC123', 'external_auth_id' => 'sales, engineering, developers, marketers']);
38 $this->assertFalse($user->hasRole($role->id));
40 (new GroupSyncService())->syncUserWithFoundGroups($user, ['Developers'], false);
42 $user = User::query()->find($user->id);
43 $this->assertTrue($user->hasRole($role->id));
46 public function test_commas_can_be_used_in_external_auth_id_if_escaped()
48 $user = $this->users->viewer();
49 $role = Role::factory()->create(['display_name' => 'ABC123', 'external_auth_id' => 'sales\,-developers, marketers']);
50 $this->assertFalse($user->hasRole($role->id));
52 (new GroupSyncService())->syncUserWithFoundGroups($user, ['Sales, Developers'], false);
54 $user = User::query()->find($user->id);
55 $this->assertTrue($user->hasRole($role->id));
58 public function test_external_auth_id_matches_ignoring_case()
60 $user = $this->users->viewer();
61 $role = Role::factory()->create(['display_name' => 'ABC123', 'external_auth_id' => 'WaRRioRs']);
62 $this->assertFalse($user->hasRole($role->id));
64 (new GroupSyncService())->syncUserWithFoundGroups($user, ['wArriors', 'penguiNs'], false);
66 $user = User::query()->find($user->id);
67 $this->assertTrue($user->hasRole($role->id));