5 use BookStack\Auth\Access\GroupSyncService;
6 use BookStack\Auth\Role;
7 use BookStack\Auth\User;
10 class GroupSyncServiceTest extends TestCase
13 public function test_user_is_assigned_to_matching_roles()
15 $user = $this->getViewer();
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']);
22 foreach([$roleA, $roleB, $roleC, $roleD] as $role) {
23 $this->assertFalse($user->hasRole($role->id));
26 (new GroupSyncService())->syncUserWithFoundGroups($user, ['Wizards', 'Gremlinz', 'Sales', 'Admin Team'], false);
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));
35 public function test_multiple_values_in_role_external_auth_id_handled()
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));
41 (new GroupSyncService())->syncUserWithFoundGroups($user, ['Developers'], false);
43 $user = User::query()->find($user->id);
44 $this->assertTrue($user->hasRole($role->id));
47 public function test_commas_can_be_used_in_external_auth_id_if_escaped()
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));
53 (new GroupSyncService())->syncUserWithFoundGroups($user, ['Sales, Developers'], false);
55 $user = User::query()->find($user->id);
56 $this->assertTrue($user->hasRole($role->id));