33
33
use Symfony \Component \Security \Core \User \UserProviderInterface ;
34
34
use Symfony \Component \Security \Http \Event \DeauthenticatedEvent ;
35
35
use Symfony \Component \Security \Http \Firewall \ContextListener ;
36
+ use Symfony \Component \Security \Http \RememberMe \RememberMeServicesInterface ;
36
37
37
38
class ContextListenerTest extends TestCase
38
39
{
@@ -263,10 +264,23 @@ public function testIfTokenIsNotDeauthenticated()
263
264
$ tokenStorage = new TokenStorage ();
264
265
$ badRefreshedUser = new User ('foobar ' , 'baz ' );
265
266
$ 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 );
267
268
$ this ->assertSame ($ goodRefreshedUser , $ tokenStorage ->getToken ()->getUser ());
268
269
}
269
270
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
+
270
284
public function testTryAllUserProvidersUntilASupportingUserProviderIsFound ()
271
285
{
272
286
$ tokenStorage = new TokenStorage ();
@@ -363,7 +377,7 @@ protected function runSessionOnKernelResponse($newToken, $original = null)
363
377
return $ session ;
364
378
}
365
379
366
- private function handleEventWithPreviousSession (TokenStorageInterface $ tokenStorage , $ userProviders , UserInterface $ user = null )
380
+ private function handleEventWithPreviousSession (TokenStorageInterface $ tokenStorage , $ userProviders , UserInterface $ user = null , RememberMeServicesInterface $ rememberMeServices = null )
367
381
{
368
382
$ user = $ user ?: new User ('foo ' , 'bar ' );
369
383
$ session = new Session (new MockArraySessionStorage ());
@@ -374,6 +388,10 @@ private function handleEventWithPreviousSession(TokenStorageInterface $tokenStor
374
388
$ request ->cookies ->set ('MOCKSESSID ' , true );
375
389
376
390
$ listener = new ContextListener ($ tokenStorage , $ userProviders , 'context_key ' );
391
+
392
+ if ($ rememberMeServices ) {
393
+ $ listener ->setRememberMeServices ($ rememberMeServices );
394
+ }
377
395
$ listener (new RequestEvent ($ this ->getMockBuilder (HttpKernelInterface::class)->getMock (), $ request , HttpKernelInterface::MASTER_REQUEST ));
378
396
}
379
397
}
0 commit comments