1515use Symfony \Component \HttpFoundation \Exception \SessionNotFoundException ;
1616use Symfony \Component \HttpFoundation \Request ;
1717use Symfony \Component \HttpFoundation \RequestStack ;
18+ use Symfony \Component \HttpFoundation \Session \Session ;
1819use Symfony \Component \Security \Csrf \TokenStorage \SessionTokenStorage ;
1920use Symfony \Component \Security \Http \Event \LogoutEvent ;
2021use Symfony \Component \Security \Http \EventListener \CsrfTokenClearingLogoutListener ;
2122
2223class CsrfTokenClearingLogoutListenerTest extends TestCase
2324{
24- public function testSkipsClearingSessionTokenStorageOnStatelessRequest ()
25+ public function testSkipsClearingSessionTokenStorageOnRequestWithoutSession ()
2526 {
2627 try {
2728 (new CsrfTokenClearingLogoutListener (
@@ -33,4 +34,25 @@ public function testSkipsClearingSessionTokenStorageOnStatelessRequest()
3334
3435 $ this ->addToAssertionCount (1 );
3536 }
37+
38+ public function testSkipsClearingSessionTokenStorageOnStatelessRequest ()
39+ {
40+ $ session = new Session ();
41+
42+ // Create a stateless request with a previous session
43+ $ request = new Request ();
44+ $ request ->setSession ($ session );
45+ $ request ->cookies ->set ($ session ->getName (), 'previous_session ' );
46+ $ request ->attributes ->set ('_stateless ' , true );
47+
48+ try {
49+ (new CsrfTokenClearingLogoutListener (
50+ new SessionTokenStorage (new RequestStack ())
51+ ))->onLogout (new LogoutEvent ($ request , null ));
52+ } catch (SessionNotFoundException ) {
53+ $ this ->fail ('clear() must not be called if the request is stateless ' );
54+ }
55+
56+ $ this ->addToAssertionCount (1 );
57+ }
3658}
0 commit comments