From 85f72f403773402cb38c7d6b7a66959e1911a332 Mon Sep 17 00:00:00 2001 From: Hugo Hamon Date: Sat, 20 Dec 2014 12:57:51 +0100 Subject: [PATCH] =?UTF-8?q?[SecurityBundle]=C2=A0adds=20unit=20tests=20sui?= =?UTF-8?q?te=20for=20SecurityDataCollector=20class.?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- .../DataCollector/SecurityDataCollector.php | 8 +- .../SecurityDataCollectorTest.php | 87 +++++++++++++++++++ 2 files changed, 94 insertions(+), 1 deletion(-) create mode 100644 src/Symfony/Bundle/SecurityBundle/Tests/DataCollector/SecurityDataCollectorTest.php diff --git a/src/Symfony/Bundle/SecurityBundle/DataCollector/SecurityDataCollector.php b/src/Symfony/Bundle/SecurityBundle/DataCollector/SecurityDataCollector.php index 02cd06680c8b1..737ee2139ebce 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 @@ public function collect(Request $request, Response $response, \Exception $except '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 0000000000000..f455d24840691 --- /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(); + } +}