Thanks to visit codestin.com
Credit goes to github.com

Skip to content

Commit 1be07ff

Browse files
committed
Add test to clear CSRF on stateless request
1 parent 7f812e1 commit 1be07ff

File tree

1 file changed

+43
-2
lines changed

1 file changed

+43
-2
lines changed

src/Symfony/Component/Security/Http/Tests/EventListener/CsrfTokenClearingLogoutListenerTest.php

Lines changed: 43 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -12,25 +12,66 @@
1212
namespace Symfony\Component\Security\Http\Tests\EventListener;
1313

1414
use PHPUnit\Framework\TestCase;
15+
use Symfony\Bundle\SecurityBundle\Security\FirewallConfig;
16+
use Symfony\Bundle\SecurityBundle\Security\FirewallMap;
1517
use Symfony\Component\HttpFoundation\Exception\SessionNotFoundException;
1618
use Symfony\Component\HttpFoundation\Request;
1719
use Symfony\Component\HttpFoundation\RequestStack;
20+
use Symfony\Component\HttpFoundation\Session\Session;
1821
use Symfony\Component\Security\Csrf\TokenStorage\SessionTokenStorage;
1922
use Symfony\Component\Security\Http\Event\LogoutEvent;
2023
use Symfony\Component\Security\Http\EventListener\CsrfTokenClearingLogoutListener;
2124

2225
class CsrfTokenClearingLogoutListenerTest extends TestCase
2326
{
24-
public function testSkipsClearingSessionTokenStorageOnStatelessRequest()
27+
public function testSkipsClearingSessionTokenStorageOnRequestWithoutSession()
2528
{
29+
$map = $this->createMock(FirewallMap::class);
30+
$map
31+
->expects($this->once())
32+
->method('getFirewallConfig')
33+
->willReturn(new FirewallConfig('firewall', 'user_checker'))
34+
;
35+
2636
try {
2737
(new CsrfTokenClearingLogoutListener(
28-
new SessionTokenStorage(new RequestStack())
38+
new SessionTokenStorage(new RequestStack()),
39+
$map
2940
))->onLogout(new LogoutEvent(new Request(), null));
3041
} catch (SessionNotFoundException) {
3142
$this->fail('clear() must not be called if the request is not associated with a session instance');
3243
}
3344

3445
$this->addToAssertionCount(1);
3546
}
47+
48+
public function testSkipsClearingSessionTokenStorageOnStatelessRequest()
49+
{
50+
$session = new Session();
51+
52+
// Create a stateless request with a previous session
53+
$request = new Request();
54+
$request->setSession($session);
55+
$request->cookies->set($session->getName(), 'previous_session');
56+
$request->attributes->set('_stateless', true);
57+
58+
$map = $this->createMock(FirewallMap::class);
59+
$map
60+
->expects($this->once())
61+
->method('getFirewallConfig')
62+
->with($this->equalTo($request))
63+
->willReturn(new FirewallConfig('stateless_firewall', 'user_checker', stateless: true))
64+
;
65+
66+
try {
67+
(new CsrfTokenClearingLogoutListener(
68+
new SessionTokenStorage(new RequestStack()),
69+
$map
70+
))->onLogout(new LogoutEvent($request, null));
71+
} catch (SessionNotFoundException) {
72+
$this->fail('clear() must not be called if the request is stateless');
73+
}
74+
75+
$this->addToAssertionCount(1);
76+
}
3677
}

0 commit comments

Comments
 (0)