* * 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:----LkMGI7Cl4Nt5It1j55bIDEqaQgOnKVdASoj8c4uWAL2Irlz1NiekEr84YEmnFLgmEoR30ZgfMZHb9bMsGBVNVopetihnmddnjgqULK8nHfxUMhMCtO5+1Wo31/NXFVpMV9DlrfdnMX+jXKhmV14AidvtmGbY+ZhqGOcTdqxOZX/z/1RY2FrICCGBTMjiwNZTFxFnkZOpiSxtqhlOhCyP0oycakzSs/4vqOPxxBdfSQaG33fBU2+vjHgdjZLRYEozcA2ZfrF6sEaNXCLMo9Bt++tTUsvNXMFvR7cXJUPsjUy+3fOdMR3HPqUnbQsgUisxvJrOgbdMuALNKeljwsAS06+P6AN9brsliG2mK7uGQ2bP9j8ATUZW3aTUBgTM/mAqfjFTiR5Eqt7jNAlXbH1QwRKY7YwoUjgD62znsY3FfQtcfgX74rn1FtvTsyYlkICJI1brBvAgwehEaTkb8fq7e34yf1P5n7sDd4YMaF5iq79XDmhZTZr3j79D/QEEwrDIufKtMd/OYmAnCCK2v+ddEpqQNfO0/rZSNAxD+xpp+ZxC74HDkjc+d4NO0wdJnKkQzZxGA6Hf2yAzD+6MQ8PPjCt04yASRFt6HkJJXk2Vnbz0FNKldRpKAo5prC5O5qv+c0B+NArqVryZftAkSZ0L3yVro4AdSXr0MXorvjGpRFw=----ATTACHMENT:----Mzg3NTYwNDc5NTk5Nzc5OSA5NjIxODM5MDc0MDk2Njg5IDM0MTYzMDY3ODkyNjM5OQ==