diff --git a/src/Symfony/Bundle/SecurityBundle/DataCollector/SecurityDataCollector.php b/src/Symfony/Bundle/SecurityBundle/DataCollector/SecurityDataCollector.php index 02cd06680c..737ee2139e 100644 --- a/src/Symfony/Bundle/SecurityBundle/DataCollector/SecurityDataCollector.php +++ b/src/Symfony/Bundle/SecurityBundle/DataCollector/SecurityDataCollector.php @@ -11,6 +11,7 @@ namespace Symfony\Bundle\SecurityBundle\DataCollector; +use Symfony\Component\Security\Core\Role\RoleInterface; use Symfony\Component\Security\Core\SecurityContextInterface; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; @@ -25,6 +26,11 @@ class SecurityDataCollector extends DataCollector { private $context; + /** + * Constructor. + * + * @param SecurityContextInterface|null $context + */ public function __construct(SecurityContextInterface $context = null) { $this->context = $context; @@ -57,7 +63,7 @@ class SecurityDataCollector extends DataCollector 'authenticated' => $token->isAuthenticated(), 'token_class' => get_class($token), 'user' => $token->getUsername(), - 'roles' => array_map(function ($role) { return $role->getRole();}, $token->getRoles()), + 'roles' => array_map(function (RoleInterface $role) { return $role->getRole(); }, $token->getRoles()), ); } } diff --git a/src/Symfony/Bundle/SecurityBundle/Tests/DataCollector/SecurityDataCollectorTest.php b/src/Symfony/Bundle/SecurityBundle/Tests/DataCollector/SecurityDataCollectorTest.php new file mode 100644 index 0000000000..f455d24840 --- /dev/null +++ b/src/Symfony/Bundle/SecurityBundle/Tests/DataCollector/SecurityDataCollectorTest.php @@ -0,0 +1,87 @@ +collect($this->getRequest(), $this->getResponse()); + + $this->assertSame('security', $collector->getName()); + $this->assertFalse($collector->isEnabled()); + $this->assertFalse($collector->isAuthenticated()); + $this->assertNull($collector->getTokenClass()); + $this->assertCount(0, $collector->getRoles()); + $this->assertEmpty($collector->getUser()); + } + + public function testCollectWhenAuthenticationTokenIsNull() + { + $securityContext = $this->getMock('Symfony\Component\Security\Core\SecurityContextInterface'); + $securityContext->expects($this->once())->method('getToken')->willReturn(null); + + $collector = new SecurityDataCollector($securityContext); + $collector->collect($this->getRequest(), $this->getResponse()); + + $this->assertTrue($collector->isEnabled()); + $this->assertFalse($collector->isAuthenticated()); + $this->assertNull($collector->getTokenClass()); + $this->assertCount(0, $collector->getRoles()); + $this->assertEmpty($collector->getUser()); + } + + /** @dataProvider provideRoles */ + public function testCollectAuthenticationTokenAndRoles(array $roles, array $normalizedRoles) + { + $securityContext = $this->getMock('Symfony\Component\Security\Core\SecurityContextInterface'); + $securityContext + ->expects($this->once()) + ->method('getToken') + ->willReturn(new UsernamePasswordToken('hhamon', 'P4$$w0rD', 'provider', $roles)); + + $collector = new SecurityDataCollector($securityContext); + $collector->collect($this->getRequest(), $this->getResponse()); + + $this->assertTrue($collector->isEnabled()); + $this->assertTrue($collector->isAuthenticated()); + $this->assertSame('Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken', $collector->getTokenClass()); + $this->assertSame($normalizedRoles, $collector->getRoles()); + $this->assertSame('hhamon', $collector->getUser()); + } + + public function provideRoles() + { + return array( + array( + array('ROLE_USER'), + array('ROLE_USER'), + ), + array( + array(new Role('ROLE_USER')), + array('ROLE_USER'), + ), + ); + } + + private function getRequest() + { + return $this + ->getMockBuilder('Symfony\Component\HttpFoundation\Request') + ->disableOriginalConstructor() + ->getMock(); + } + + private function getResponse() + { + return $this + ->getMockBuilder('Symfony\Component\HttpFoundation\Response') + ->disableOriginalConstructor() + ->getMock(); + } +}