X-Git-Url: http://source.bookstackapp.com/bookstack/blobdiff_plain/a274406038e13cf678e14d65dfa70d04ead67206..refs/pull/3365/head:/tests/Auth/LdapTest.php diff --git a/tests/Auth/LdapTest.php b/tests/Auth/LdapTest.php index 9e0729a8e..03ef926cb 100644 --- a/tests/Auth/LdapTest.php +++ b/tests/Auth/LdapTest.php @@ -20,7 +20,7 @@ class LdapTest extends TestCase protected $mockUser; protected $resourceId = 'resource-test'; - public function setUp(): void + protected function setUp(): void { parent::setUp(); if (!defined('LDAP_OPT_REFERRALS')) { @@ -42,7 +42,7 @@ class LdapTest extends TestCase ]); $this->mockLdap = \Mockery::mock(Ldap::class); $this->app[Ldap::class] = $this->mockLdap; - $this->mockUser = factory(User::class)->make(); + $this->mockUser = User::factory()->make(); } protected function runFailedAuthLogin() @@ -264,9 +264,9 @@ class LdapTest extends TestCase public function test_login_maps_roles_and_retains_existing_roles() { - $roleToReceive = factory(Role::class)->create(['display_name' => 'LdapTester']); - $roleToReceive2 = factory(Role::class)->create(['display_name' => 'LdapTester Second']); - $existingRole = factory(Role::class)->create(['display_name' => 'ldaptester-existing']); + $roleToReceive = Role::factory()->create(['display_name' => 'LdapTester']); + $roleToReceive2 = Role::factory()->create(['display_name' => 'LdapTester Second']); + $existingRole = Role::factory()->create(['display_name' => 'ldaptester-existing']); $this->mockUser->forceFill(['external_auth_id' => $this->mockUser->name])->save(); $this->mockUser->attachRole($existingRole); @@ -310,8 +310,8 @@ class LdapTest extends TestCase public function test_login_maps_roles_and_removes_old_roles_if_set() { - $roleToReceive = factory(Role::class)->create(['display_name' => 'LdapTester']); - $existingRole = factory(Role::class)->create(['display_name' => 'ldaptester-existing']); + $roleToReceive = Role::factory()->create(['display_name' => 'LdapTester']); + $existingRole = Role::factory()->create(['display_name' => 'ldaptester-existing']); $this->mockUser->forceFill(['external_auth_id' => $this->mockUser->name])->save(); $this->mockUser->attachRole($existingRole); @@ -348,17 +348,73 @@ class LdapTest extends TestCase ]); } + public function test_dump_user_groups_shows_group_related_details_as_json() + { + app('config')->set([ + 'services.ldap.user_to_groups' => true, + 'services.ldap.group_attribute' => 'memberOf', + 'services.ldap.remove_from_groups' => true, + 'services.ldap.dump_user_groups' => true, + ]); + + $userResp = ['count' => 1, 0 => [ + 'uid' => [$this->mockUser->name], + 'cn' => [$this->mockUser->name], + 'dn' => 'dc=test,' . config('services.ldap.base_dn'), + 'mail' => [$this->mockUser->email], + ]]; + $this->commonLdapMocks(1, 1, 4, 5, 4, 2); + $this->mockLdap->shouldReceive('searchAndGetEntries')->times(4) + ->with($this->resourceId, config('services.ldap.base_dn'), \Mockery::type('string'), \Mockery::type('array')) + ->andReturn($userResp, ['count' => 1, + 0 => [ + 'dn' => 'dc=test,' . config('services.ldap.base_dn'), + 'memberof' => [ + 'count' => 1, + 0 => 'cn=ldaptester,ou=groups,dc=example,dc=com', + ], + ], + ], [ + 'count' => 1, + 0 => [ + 'dn' => 'cn=ldaptester,ou=groups,dc=example,dc=com', + 'memberof' => [ + 'count' => 1, + 0 => 'cn=monsters,ou=groups,dc=example,dc=com', + ], + ], + ], ['count' => 0]); + + $resp = $this->mockUserLogin(); + $resp->assertJson([ + 'details_from_ldap' => [ + 'dn' => 'dc=test,' . config('services.ldap.base_dn'), + 'memberof' => [ + 0 => 'cn=ldaptester,ou=groups,dc=example,dc=com', + 'count' => 1, + ], + ], + 'parsed_direct_user_groups' => [ + 'ldaptester', + ], + 'parsed_recursive_user_groups' => [ + 'ldaptester', + 'monsters', + ], + ]); + } + public function test_external_auth_id_visible_in_roles_page_when_ldap_active() { - $role = factory(Role::class)->create(['display_name' => 'ldaptester', 'external_auth_id' => 'ex-auth-a, test-second-param']); + $role = Role::factory()->create(['display_name' => 'ldaptester', 'external_auth_id' => 'ex-auth-a, test-second-param']); $this->asAdmin()->get('/settings/roles/' . $role->id) ->assertSee('ex-auth-a'); } public function test_login_maps_roles_using_external_auth_ids_if_set() { - $roleToReceive = factory(Role::class)->create(['display_name' => 'ldaptester', 'external_auth_id' => 'test-second-param, ex-auth-a']); - $roleToNotReceive = factory(Role::class)->create(['display_name' => 'ex-auth-a', 'external_auth_id' => 'test-second-param']); + $roleToReceive = Role::factory()->create(['display_name' => 'ldaptester', 'external_auth_id' => 'test-second-param, ex-auth-a']); + $roleToNotReceive = Role::factory()->create(['display_name' => 'ex-auth-a', 'external_auth_id' => 'test-second-param']); app('config')->set([ 'services.ldap.user_to_groups' => true, @@ -395,8 +451,8 @@ class LdapTest extends TestCase public function test_login_group_mapping_does_not_conflict_with_default_role() { - $roleToReceive = factory(Role::class)->create(['display_name' => 'LdapTester']); - $roleToReceive2 = factory(Role::class)->create(['display_name' => 'LdapTester Second']); + $roleToReceive = Role::factory()->create(['display_name' => 'LdapTester']); + $roleToReceive2 = Role::factory()->create(['display_name' => 'LdapTester Second']); $this->mockUser->forceFill(['external_auth_id' => $this->mockUser->name])->save(); setting()->put('registration-role', $roleToReceive->id); @@ -641,8 +697,8 @@ class LdapTest extends TestCase public function test_login_with_email_confirmation_required_maps_groups_but_shows_confirmation_screen() { - $roleToReceive = factory(Role::class)->create(['display_name' => 'LdapTester']); - $user = factory(User::class)->make(); + $roleToReceive = Role::factory()->create(['display_name' => 'LdapTester']); + $user = User::factory()->make(); setting()->put('registration-confirmation', 'true'); app('config')->set([