expectException(\RuntimeException::class); $this->expectExceptionMessage('Missing user attribute: title'); $mapping = [ 'mapping' => [ ['saml' => '$Email', 'kimai' => 'email'], ['saml' => '$title', 'kimai' => 'title'], ], 'roles' => [ 'attribute' => '', 'mapping' => [] ] ]; $attributes = [ 'Email' => ['test@example.com'], ]; $token = new SamlToken(); $token->setAttributes($attributes); $sut = new SamlUserFactory($mapping); $user = $sut->createUser($token); } public function testCreateUserThrowsExceptionOnMissingAttributeInMultiple() { $this->expectException(\RuntimeException::class); $this->expectExceptionMessage('Missing user attribute: test'); $mapping = [ 'mapping' => [ ['saml' => '$Email $test', 'kimai' => 'email'], ], 'roles' => [ 'attribute' => '', 'mapping' => [] ] ]; $attributes = [ 'Email' => ['test@example.com'], ]; $token = new SamlToken(); $token->setAttributes($attributes); $sut = new SamlUserFactory($mapping); $user = $sut->createUser($token); } public function testCreateUserThrowsExceptionOnInvalidMapping() { $this->expectException(\RuntimeException::class); $this->expectExceptionMessage('Invalid mapping field given: foo'); $mapping = [ 'mapping' => [ ['saml' => '$Email', 'kimai' => 'email'], ['saml' => '$Email', 'kimai' => 'foo'], ], 'roles' => [ 'attribute' => '', 'mapping' => [] ] ]; $attributes = [ 'Email' => ['test@example.com'], ]; $token = new SamlToken(); $token->setAttributes($attributes); $sut = new SamlUserFactory($mapping); $user = $sut->createUser($token); } public function testCreateUser() { $mapping = [ 'mapping' => [ ['saml' => '$avatar', 'kimai' => 'avatar'], ['saml' => '$Email', 'kimai' => 'email'], ['saml' => 'A static super title', 'kimai' => 'title'], // double space between "$LastName $FOOO" on purpose!!! ['saml' => '$FirstName $LastName $FOOO me', 'kimai' => 'alias'], ], 'roles' => [ 'attribute' => 'RoLeS', 'mapping' => [ ['saml' => 'fooobar', 'kimai' => 'ROLE_ADMIN'], ['saml' => 'ROLE_1', 'kimai' => 'ROLE_TEAMLEAD'], ['saml' => 'ROLE_2', 'kimai' => 'ROLE_2'], ] ] ]; $attributes = [ 'RoLeS' => ['ROLE_1', 'ROLE_2', 'ROLE_3'], 'Email' => ['test@example.com'], 'FOOO' => ['test', 'test2'], 'FirstName' => ['Kevin'], 'LastName' => ['Papst'], 'avatar' => ['http://www.example.com/test.jpg'], ]; $token = new SamlToken(); $token->setUser('foo@example.com'); $token->setAttributes($attributes); $sut = new SamlUserFactory($mapping); $user = $sut->createUser($token); self::assertInstanceOf(User::class, $user); self::assertTrue($user->isEnabled()); self::assertEquals('', $user->getPassword()); self::assertEquals('test@example.com', $user->getEmail()); self::assertEquals('foo@example.com', $user->getUsername()); self::assertEquals('A static super title', $user->getTitle()); self::assertEquals('Kevin Papst test me', $user->getAlias()); self::assertEquals(['ROLE_TEAMLEAD', 'ROLE_2', 'ROLE_USER'], $user->getRoles()); } public function testCreateUserDoesOverwriteUsername() { $mapping = [ 'mapping' => [ ['saml' => '$avatar', 'kimai' => 'avatar'], ['saml' => '$Email', 'kimai' => 'email'], ['saml' => 'A static super title', 'kimai' => 'title'], ['saml' => 'Mr. T', 'kimai' => 'username'], ], 'roles' => [ 'attribute' => null, 'mapping' => [] ] ]; $attributes = [ 'Email' => ['test@example.com'], 'FOOO' => ['test', 'test2'], 'avatar' => ['http://www.example.com/test.jpg'], ]; $token = new SamlToken(); $token->setUser('foo@example.com'); $token->setAttributes($attributes); $sut = new SamlUserFactory($mapping); $user = $sut->createUser($token); self::assertInstanceOf(User::class, $user); self::assertTrue($user->isEnabled()); self::assertEquals('', $user->getPassword()); self::assertEquals('test@example.com', $user->getEmail()); self::assertEquals('foo@example.com', $user->getUsername()); self::assertEquals('A static super title', $user->getTitle()); self::assertEquals(['ROLE_USER'], $user->getRoles()); } }