* * For the full copyright and license information, please view the LICENSE * file that was distributed with this source code. */ namespace Symfony\Component\Security\Guard\Tests; use PHPUnit\Framework\TestCase; use Symfony\Component\HttpFoundation\Request; use Symfony\Component\HttpFoundation\Response; use Symfony\Component\Security\Guard\AuthenticatorInterface; use Symfony\Component\Security\Guard\GuardAuthenticatorHandler; use Symfony\Component\Security\Core\Exception\AuthenticationException; use Symfony\Component\Security\Http\Event\InteractiveLoginEvent; use Symfony\Component\Security\Http\SecurityEvents; class GuardAuthenticatorHandlerTest extends TestCase { private $tokenStorage; private $dispatcher; private $token; private $request; private $guardAuthenticator; public function testAuthenticateWithToken() { $this->tokenStorage->expects($this->once()) ->method('setToken') ->with($this->token); $loginEvent = new InteractiveLoginEvent($this->request, $this->token); $this->dispatcher ->expects($this->once()) ->method('dispatch') ->with($this->equalTo(SecurityEvents::INTERACTIVE_LOGIN), $this->equalTo($loginEvent)) ; $handler = new GuardAuthenticatorHandler($this->tokenStorage, $this->dispatcher); $handler->authenticateWithToken($this->token, $this->request); } public function testHandleAuthenticationSuccess() { $providerKey = 'my_handleable_firewall'; $response = new Response('Guard all the things!'); $this->guardAuthenticator->expects($this->once()) ->method('onAuthenticationSuccess') ->with($this->request, $this->token, $providerKey) ->will($this->returnValue($response)); $handler = new GuardAuthenticatorHandler($this->tokenStorage, $this->dispatcher); $actualResponse = $handler->handleAuthenticationSuccess($this->token, $this->request, $this->guardAuthenticator, $providerKey); $this->assertSame($response, $actualResponse); } public function testHandleAuthenticationFailure() { // setToken() not called - getToken() will return null, so there's nothing to clear $this->tokenStorage->expects($this->never()) ->method('setToken') ->with(null); $authException = new AuthenticationException('Bad password!'); $response = new Response('Try again, but with the right password!'); $this->guardAuthenticator->expects($this->once()) ->method('onAuthenticationFailure') ->with($this->request, $authException) ->will($this->returnValue($response)); $handler = new GuardAuthenticatorHandler($this->tokenStorage, $this->dispatcher); $actualResponse = $handler->handleAuthenticationFailure($authException, $this->request, $this->guardAuthenticator, 'firewall_provider_key'); $this->assertSame($response, $actualResponse); } /** * @dataProvider getTokenClearingTests */ public function testHandleAuthenticationClearsToken($tokenClass, $tokenProviderKey, $actualProviderKey) { $token = $this->getMockBuilder($tokenClass) ->disableOriginalConstructor() ->getMock(); $token->expects($this->any()) ->method('getProviderKey') ->will($this->returnValue($tokenProviderKey)); $this->tokenStorage->expects($this->never()) ->method('setToken') ->with(null); $authException = new AuthenticationException('Bad password!'); $response = new Response('Try again, but with the right password!'); $this->guardAuthenticator->expects($this->once()) ->method('onAuthenticationFailure') ->with($this->request, $authException) ->will($this->returnValue($response)); $handler = new GuardAuthenticatorHandler($this->tokenStorage, $this->dispatcher); $actualResponse = $handler->handleAuthenticationFailure($authException, $this->request, $this->guardAuthenticator, $actualProviderKey); $this->assertSame($response, $actualResponse); } public function getTokenClearingTests() { $tests = array(); // correct token class and matching firewall => clear the token $tests[] = array('Symfony\Component\Security\Guard\Token\PostAuthenticationGuardToken', 'the_firewall_key', 'the_firewall_key'); $tests[] = array('Symfony\Component\Security\Guard\Token\PostAuthenticationGuardToken', 'the_firewall_key', 'different_key'); $tests[] = array('Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken', 'the_firewall_key', 'the_firewall_key'); return $tests; } protected function setUp() { $this->tokenStorage = $this->getMockBuilder('Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface')->getMock(); $this->dispatcher = $this->getMockBuilder('Symfony\Component\EventDispatcher\EventDispatcherInterface')->getMock(); $this->token = $this->getMockBuilder('Symfony\Component\Security\Core\Authentication\Token\TokenInterface')->getMock(); $this->request = new Request(array(), array(), array(), array(), array(), array()); $this->guardAuthenticator = $this->getMockBuilder(AuthenticatorInterface::class)->getMock(); } protected function tearDown() { $this->tokenStorage = null; $this->dispatcher = null; $this->token = null; $this->request = null; $this->guardAuthenticator = null; } } __halt_compiler();----SIGNATURE:----tJFTrEPHAUuqGxzbCxUPjlfCn3kd9B+Z98ToZ0elZWHNnGymm5I3wc8jRWLh2iQFzeFZZ9n07zIR0+3CCymy8ZGaaWXucg6dmfZT/hJsPFnECq32Ddn0lnR6iIsvqbGtMYlMYlN+GCLSxC9XF0kaaVqEcqPasFhCrI4fKgIEpl3R0qvubnj94bLVPuDox6YHi3lVeVaCt17nCfd9hextw+gRPwZgh1wqEA4CvEr7mNoQNxhW70kR66QZM9Npk2LLU7QcO4xqyFYiNWoC0UWmMztYyVDpKs8XFFyrnMETyYCsekvwuLwS1jhkyJnzqvHLjIPG3POiioerUQ12UqlXjepAP/iS9fmE4+NSnULxvmAYkNhtfPvZ7Ir4sRJ0AQTqXSIDWJhyqV/IJnbC3rtUo9Ju1JmL7JnNASMWUbstYzUepR/pReKnw2WjZXS0V2T+oGa26KeOuPV7MklnXVc/bIzLSlQjCS5OktjakHTwwPmBI/wxBATdBfilbeF5JCsSGkFnRE5VIy8ThwFDJk2BSsLBSChtzkTMoTqeWthoG4WeyqDF/4SZP5b2vq4BCTVHRTfObUUuIHbGPZvFi+8ID3RB4Ln4DhNGBb6y2/cXFpZeMLHfwUVIRKVITju85lGUGxKJlHNFMlLE4O7xJgyf79C2LmJ5LZbmGUTZimG9kcM=----ATTACHMENT:----NTU1OTk4ODE5MTgwNzUzIDEzMDM1ODkxOTMzNTQ4OTggMTA2NTQ2MjM2NTM1NTQzOA==