3131use Symfony \Component \Security \Core \User \UserInterface ;
3232use Symfony \Component \Security \Core \User \UserProviderInterface ;
3333use Symfony \Component \Security \Http \Firewall \ContextListener ;
34+ use Symfony \Component \Security \Http \RememberMe \RememberMeServicesInterface ;
3435
3536class ContextListenerTest extends TestCase
3637{
@@ -278,6 +279,19 @@ public function testIfTokenIsNotDeauthenticated()
278279 $ this ->assertSame ($ goodRefreshedUser , $ tokenStorage ->getToken ()->getUser ());
279280 }
280281
282+ public function testRememberMeGetsCanceledIfTokenIsDeauthenticated ()
283+ {
284+ $ tokenStorage = new TokenStorage ();
285+ $ refreshedUser = new User ('foobar ' , 'baz ' );
286+
287+ $ rememberMeServices = $ this ->createMock (RememberMeServicesInterface::class);
288+ $ rememberMeServices ->expects ($ this ->once ())->method ('loginFail ' );
289+
290+ $ this ->handleEventWithPreviousSession ($ tokenStorage , [new NotSupportingUserProvider (), new SupportingUserProvider ($ refreshedUser )], null , true , $ rememberMeServices );
291+
292+ $ this ->assertNull ($ tokenStorage ->getToken ());
293+ }
294+
281295 public function testTryAllUserProvidersUntilASupportingUserProviderIsFound ()
282296 {
283297 $ tokenStorage = new TokenStorage ();
@@ -347,7 +361,7 @@ protected function runSessionOnKernelResponse($newToken, $original = null)
347361 return $ session ;
348362 }
349363
350- private function handleEventWithPreviousSession (TokenStorageInterface $ tokenStorage , $ userProviders , UserInterface $ user = null , $ logoutOnUserChange = false )
364+ private function handleEventWithPreviousSession (TokenStorageInterface $ tokenStorage , $ userProviders , UserInterface $ user = null , $ logoutOnUserChange = false , RememberMeServicesInterface $ rememberMeServices = null )
351365 {
352366 $ user = $ user ?: new User ('foo ' , 'bar ' );
353367 $ session = new Session (new MockArraySessionStorage ());
@@ -359,6 +373,10 @@ private function handleEventWithPreviousSession(TokenStorageInterface $tokenStor
359373
360374 $ listener = new ContextListener ($ tokenStorage , $ userProviders , 'context_key ' );
361375 $ listener ->setLogoutOnUserChange ($ logoutOnUserChange );
376+
377+ if ($ rememberMeServices ) {
378+ $ listener ->setRememberMeServices ($ rememberMeServices );
379+ }
362380 $ listener ->handle (new GetResponseEvent ($ this ->getMockBuilder ('Symfony\Component\HttpKernel\HttpKernelInterface ' )->getMock (), $ request , HttpKernelInterface::MASTER_REQUEST ));
363381 }
364382}
0 commit comments