3333use Symfony \Component \Security \Core \User \UserProviderInterface ;
3434use Symfony \Component \Security \Http \Event \DeauthenticatedEvent ;
3535use Symfony \Component \Security \Http \Firewall \ContextListener ;
36+ use Symfony \Component \Security \Http \RememberMe \RememberMeServicesInterface ;
3637
3738class ContextListenerTest extends TestCase
3839{
@@ -263,10 +264,23 @@ public function testIfTokenIsNotDeauthenticated()
263264 $ tokenStorage = new TokenStorage ();
264265 $ badRefreshedUser = new User ('foobar ' , 'baz ' );
265266 $ goodRefreshedUser = new User ('foobar ' , 'bar ' );
266- $ this ->handleEventWithPreviousSession ($ tokenStorage , [new SupportingUserProvider ($ badRefreshedUser ), new SupportingUserProvider ($ goodRefreshedUser )], $ goodRefreshedUser, true );
267+ $ this ->handleEventWithPreviousSession ($ tokenStorage , [new SupportingUserProvider ($ badRefreshedUser ), new SupportingUserProvider ($ goodRefreshedUser )], $ goodRefreshedUser );
267268 $ this ->assertSame ($ goodRefreshedUser , $ tokenStorage ->getToken ()->getUser ());
268269 }
269270
271+ public function testRememberMeGetsCanceledIfTokenIsDeauthenticated ()
272+ {
273+ $ tokenStorage = new TokenStorage ();
274+ $ refreshedUser = new User ('foobar ' , 'baz ' );
275+
276+ $ rememberMeServices = $ this ->createMock (RememberMeServicesInterface::class);
277+ $ rememberMeServices ->expects ($ this ->once ())->method ('loginFail ' );
278+
279+ $ this ->handleEventWithPreviousSession ($ tokenStorage , [new NotSupportingUserProvider (), new SupportingUserProvider ($ refreshedUser )], null , $ rememberMeServices );
280+
281+ $ this ->assertNull ($ tokenStorage ->getToken ());
282+ }
283+
270284 public function testTryAllUserProvidersUntilASupportingUserProviderIsFound ()
271285 {
272286 $ tokenStorage = new TokenStorage ();
@@ -363,7 +377,7 @@ protected function runSessionOnKernelResponse($newToken, $original = null)
363377 return $ session ;
364378 }
365379
366- private function handleEventWithPreviousSession (TokenStorageInterface $ tokenStorage , $ userProviders , UserInterface $ user = null )
380+ private function handleEventWithPreviousSession (TokenStorageInterface $ tokenStorage , $ userProviders , UserInterface $ user = null , RememberMeServicesInterface $ rememberMeServices = null )
367381 {
368382 $ user = $ user ?: new User ('foo ' , 'bar ' );
369383 $ session = new Session (new MockArraySessionStorage ());
@@ -374,6 +388,10 @@ private function handleEventWithPreviousSession(TokenStorageInterface $tokenStor
374388 $ request ->cookies ->set ('MOCKSESSID ' , true );
375389
376390 $ listener = new ContextListener ($ tokenStorage , $ userProviders , 'context_key ' );
391+
392+ if ($ rememberMeServices ) {
393+ $ listener ->setRememberMeServices ($ rememberMeServices );
394+ }
377395 $ listener (new RequestEvent ($ this ->getMockBuilder (HttpKernelInterface::class)->getMock (), $ request , HttpKernelInterface::MASTER_REQUEST ));
378396 }
379397}
0 commit comments