Spaces:
No application file
No application file
namespace Mautic\UserBundle\Tests\Security\SAML\User; | |
use LightSaml\Model\Assertion\Assertion; | |
use LightSaml\Model\Assertion\Attribute; | |
use LightSaml\Model\Assertion\AttributeStatement; | |
use LightSaml\Model\Protocol\Response; | |
use Mautic\UserBundle\Security\SAML\User\UserMapper; | |
use PHPUnit\Framework\MockObject\MockObject; | |
use PHPUnit\Framework\TestCase; | |
class UserMapperTest extends TestCase | |
{ | |
private UserMapper $mapper; | |
/** | |
* @var Response|MockObject | |
*/ | |
private MockObject $response; | |
protected function setUp(): void | |
{ | |
$this->mapper = new UserMapper( | |
[ | |
'email' => 'EmailAddress', | |
'firstname' => 'FirstName', | |
'lastname' => 'LastName', | |
'username' => null, | |
] | |
); | |
$emailAttribute = $this->createMock(Attribute::class); | |
$emailAttribute->method('getFirstAttributeValue') | |
->willReturn('[email protected]'); | |
$firstnameAttribute = $this->createMock(Attribute::class); | |
$firstnameAttribute->method('getFirstAttributeValue') | |
->willReturn('Joe'); | |
$lastnameAttribute = $this->createMock(Attribute::class); | |
$lastnameAttribute->method('getFirstAttributeValue') | |
->willReturn('Smith'); | |
$defaultAttribute = $this->createMock(Attribute::class); | |
$defaultAttribute->method('getFirstAttributeValue') | |
->willReturn('default'); | |
$statement = $this->createMock(AttributeStatement::class); | |
$statement->method('getFirstAttributeByName') | |
->willReturnCallback( | |
fn ($attributeName) => match ($attributeName) { | |
'EmailAddress' => $emailAttribute, | |
'FirstName' => $firstnameAttribute, | |
'LastName' => $lastnameAttribute, | |
default => $defaultAttribute, | |
} | |
); | |
$assertion = $this->createMock(Assertion::class); | |
$assertion->method('getAllAttributeStatements') | |
->willReturn([$statement]); | |
$this->response = $this->createMock(Response::class); | |
$this->response->method('getAllAssertions') | |
->willReturn([$assertion]); | |
} | |
public function testUserEntityIsPopulatedFromAssertions(): void | |
{ | |
$user = $this->mapper->getUser($this->response); | |
$this->assertEquals('[email protected]', $user->getEmail()); | |
$this->assertEquals('[email protected]', $user->getUserIdentifier()); | |
$this->assertEquals('Joe', $user->getFirstName()); | |
$this->assertEquals('Smith', $user->getLastName()); | |
} | |
public function testUsernameIsReturned(): void | |
{ | |
$username = $this->mapper->getUsername($this->response); | |
$this->assertEquals('[email protected]', $username); | |
} | |
} | |