Skip to content

Commit 00303f5

Browse files
Merge branch '5.4' into 6.0
* 5.4: [DoctrineBridge] fix tests [HttpKernel] Fix session test cases for symfony [FrameworkBundle] Fix missing arguments when a serialization default context is bound
2 parents 063d271 + baae3ba commit 00303f5

File tree

1 file changed

+64
-52
lines changed

1 file changed

+64
-52
lines changed

Tests/EventListener/SessionListenerTest.php

Lines changed: 64 additions & 52 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,9 @@
2222
use Symfony\Component\HttpFoundation\Session\Session;
2323
use Symfony\Component\HttpFoundation\Session\SessionFactory;
2424
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorage;
25-
use Symfony\Component\HttpFoundation\Session\Storage\PhpBridgeSessionStorage;
25+
use Symfony\Component\HttpFoundation\Session\Storage\NativeSessionStorageFactory;
26+
use Symfony\Component\HttpFoundation\Session\Storage\PhpBridgeSessionStorageFactory;
27+
use Symfony\Component\HttpFoundation\Session\Storage\SessionStorageFactoryInterface;
2628
use Symfony\Component\HttpKernel\DataCollector\RequestDataCollector;
2729
use Symfony\Component\HttpKernel\Event\RequestEvent;
2830
use Symfony\Component\HttpKernel\Event\ResponseEvent;
@@ -133,20 +135,8 @@ public function testPhpBridgeAlreadyStartedSession()
133135
session_start();
134136
$sessionId = session_id();
135137

136-
$requestStack = new RequestStack();
137138
$request = new Request();
138-
$requestStack->push($request);
139-
140-
$session = new Session();
141-
$sessionStorage = new PhpBridgeSessionStorage();
142-
143-
$container = new Container();
144-
$container->set('request_stack', $requestStack);
145-
$container->set('session', $session);
146-
$container->set('session_storage', $sessionStorage);
147-
148-
$request = new Request();
149-
$listener = new SessionListener($container);
139+
$listener = $this->createListener($request, new PhpBridgeSessionStorageFactory());
150140

151141
$event = new RequestEvent($this->createMock(HttpKernelInterface::class), $request, HttpKernelInterface::MAIN_REQUEST);
152142

@@ -161,17 +151,14 @@ public function testPhpBridgeAlreadyStartedSession()
161151
*/
162152
public function testSessionCookieWrittenNoCookieGiven()
163153
{
164-
$session = new Session();
165-
$session->set('hello', 'world');
166-
167-
$container = new Container();
168-
$container->set('initialized_session', $session);
154+
$request = new Request();
155+
$listener = $this->createListener($request, new NativeSessionStorageFactory());
169156

170-
$listener = new SessionListener($container);
171157
$kernel = $this->createMock(HttpKernelInterface::class);
172158

173-
$request = new Request();
174159
$listener->onKernelRequest(new RequestEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST));
160+
$session = $request->getSession();
161+
$session->set('hello', 'world');
175162

176163
$response = new Response();
177164
$listener->onKernelResponse(new ResponseEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST, $response));
@@ -190,22 +177,25 @@ public function testSessionCookieWrittenNoCookieGiven()
190177
*/
191178
public function testSessionCookieNotWrittenCookieGiven()
192179
{
193-
$session = new Session();
194-
$session->set('hello', 'world');
195-
$sessionId = $session->getId();
180+
$sessionId = $this->createValidSessionId();
196181

197-
$container = new Container();
198-
$container->set('initialized_session', $session);
199-
200-
$listener = new SessionListener($container);
201-
$kernel = $this->createMock(HttpKernelInterface::class);
182+
$this->assertNotEmpty($sessionId);
202183

203184
$request = new Request();
204185
$request->cookies->set('PHPSESSID', $sessionId);
186+
187+
$listener = $this->createListener($request, new NativeSessionStorageFactory());
188+
189+
$kernel = $this->createMock(HttpKernelInterface::class);
205190
$listener->onKernelRequest(new RequestEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST));
206191

192+
$session = $request->getSession();
193+
$this->assertSame($sessionId, $session->getId());
194+
$session->set('hello', 'world');
195+
207196
$response = new Response();
208197
$listener->onKernelResponse(new ResponseEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST, $response));
198+
$this->assertSame($sessionId, $session->getId());
209199

210200
$cookies = $response->headers->getCookies();
211201
$this->assertCount(0, $cookies);
@@ -216,21 +206,18 @@ public function testSessionCookieNotWrittenCookieGiven()
216206
*/
217207
public function testSessionCookieClearedWhenInvalidated()
218208
{
219-
$session = new Session();
220-
221-
$container = new Container();
222-
$container->set('initialized_session', $session);
223-
224-
$listener = new SessionListener($container);
209+
$sessionId = $this->createValidSessionId();
210+
$request = new Request();
211+
$request->cookies->set('PHPSESSID', $sessionId);
212+
$listener = $this->createListener($request, new NativeSessionStorageFactory());
225213
$kernel = $this->createMock(HttpKernelInterface::class);
226214

227-
$request = new Request();
228215
$listener->onKernelRequest(new RequestEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST));
229216

217+
$session = $request->getSession();
230218
$session->start();
231219
$sessionId = $session->getId();
232220
$this->assertNotEmpty($sessionId);
233-
$request->cookies->set($session->getName(), $sessionId);
234221
$_SESSION['hello'] = 'world'; // check compatibility to php session bridge
235222

236223
$session->invalidate();
@@ -251,21 +238,18 @@ public function testSessionCookieClearedWhenInvalidated()
251238
*/
252239
public function testSessionCookieNotClearedWhenOtherVariablesSet()
253240
{
254-
$session = new Session();
255-
256-
$container = new Container();
257-
$container->set('initialized_session', $session);
258-
259-
$listener = new SessionListener($container);
241+
$sessionId = $this->createValidSessionId();
242+
$request = new Request();
243+
$request->cookies->set('PHPSESSID', $sessionId);
244+
$listener = $this->createListener($request, new NativeSessionStorageFactory());
260245
$kernel = $this->createMock(HttpKernelInterface::class);
261246

262-
$request = new Request();
263247
$listener->onKernelRequest(new RequestEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST));
264248

249+
$session = $request->getSession();
265250
$session->start();
266251
$sessionId = $session->getId();
267252
$this->assertNotEmpty($sessionId);
268-
$request->cookies->set($session->getName(), $sessionId);
269253
$_SESSION['hello'] = 'world';
270254

271255
$response = new Response();
@@ -280,17 +264,13 @@ public function testSessionCookieNotClearedWhenOtherVariablesSet()
280264
*/
281265
public function testSessionCookieSetWhenOtherNativeVariablesSet()
282266
{
283-
$session = new Session();
284-
285-
$container = new Container();
286-
$container->set('initialized_session', $session);
287-
288-
$listener = new SessionListener($container);
267+
$request = new Request();
268+
$listener = $this->createListener($request, new NativeSessionStorageFactory());
289269
$kernel = $this->createMock(HttpKernelInterface::class);
290270

291-
$request = new Request();
292271
$listener->onKernelRequest(new RequestEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST));
293272

273+
$session = $request->getSession();
294274
$session->start();
295275
$sessionId = $session->getId();
296276
$this->assertNotEmpty($sessionId);
@@ -783,4 +763,36 @@ public function testResetUnclosedSession()
783763
$this->assertEmpty(session_id());
784764
$this->assertSame(\PHP_SESSION_NONE, session_status());
785765
}
766+
767+
private function createListener(Request $request, SessionStorageFactoryInterface $sessionFactory)
768+
{
769+
$requestStack = new RequestStack();
770+
$request = new Request();
771+
$requestStack->push($request);
772+
773+
$sessionFactory = new SessionFactory(
774+
$requestStack,
775+
$sessionFactory,
776+
);
777+
778+
$container = new Container();
779+
$container->set('request_stack', $requestStack);
780+
$container->set('session_factory', $sessionFactory);
781+
782+
$listener = new SessionListener($container);
783+
784+
return new SessionListener($container);
785+
}
786+
787+
private function createValidSessionId(): string
788+
{
789+
session_start();
790+
$sessionId = session_id();
791+
$_SESSION['some'] = 'value';
792+
session_write_close();
793+
$_SESSION = [];
794+
session_abort();
795+
796+
return $sessionId;
797+
}
786798
}

0 commit comments

Comments
 (0)