Skip to content

Commit 9859200

Browse files
Update test cases
1 parent fa30ef2 commit 9859200

File tree

2 files changed

+64
-54
lines changed

2 files changed

+64
-54
lines changed

src/Symfony/Component/HttpFoundation/Session/Session.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -208,7 +208,7 @@ public function getId(): string
208208
*/
209209
public function setId(string $id)
210210
{
211-
if ($this->storage->getId() !== $id || !$id) {
211+
if ($this->storage->getId() !== $id) {
212212
$this->storage->setId($id);
213213
}
214214
}

src/Symfony/Component/HttpKernel/Tests/EventListener/SessionListenerTest.php

Lines changed: 63 additions & 53 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +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;
2626
use Symfony\Component\HttpFoundation\Session\Storage\PhpBridgeSessionStorageFactory;
27+
use Symfony\Component\HttpFoundation\Session\Storage\SessionStorageFactoryInterface;
2728
use Symfony\Component\HttpKernel\DataCollector\RequestDataCollector;
2829
use Symfony\Component\HttpKernel\Event\RequestEvent;
2930
use Symfony\Component\HttpKernel\Event\ResponseEvent;
@@ -134,21 +135,8 @@ public function testPhpBridgeAlreadyStartedSession()
134135
session_start();
135136
$sessionId = session_id();
136137

137-
$requestStack = new RequestStack();
138138
$request = new Request();
139-
$requestStack->push($request);
140-
141-
$sessionFactory = new SessionFactory(
142-
$requestStack,
143-
new PhpBridgeSessionStorageFactory(),
144-
);
145-
146-
$container = new Container();
147-
$container->set('request_stack', $requestStack);
148-
$container->set('session_factory', $sessionFactory);
149-
150-
$request = new Request();
151-
$listener = new SessionListener($container);
139+
$listener = $this->createListener($request, new PhpBridgeSessionStorageFactory());
152140

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

@@ -163,17 +151,14 @@ public function testPhpBridgeAlreadyStartedSession()
163151
*/
164152
public function testSessionCookieWrittenNoCookieGiven()
165153
{
166-
$session = new Session();
167-
$session->set('hello', 'world');
168-
169-
$container = new Container();
170-
$container->set('initialized_session', $session);
154+
$request = new Request();
155+
$listener = $this->createListener($request, new NativeSessionStorageFactory());
171156

172-
$listener = new SessionListener($container);
173157
$kernel = $this->createMock(HttpKernelInterface::class);
174158

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

178163
$response = new Response();
179164
$listener->onKernelResponse(new ResponseEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST, $response));
@@ -192,22 +177,25 @@ public function testSessionCookieWrittenNoCookieGiven()
192177
*/
193178
public function testSessionCookieNotWrittenCookieGiven()
194179
{
195-
$session = new Session();
196-
$session->set('hello', 'world');
197-
$sessionId = $session->getId();
198-
199-
$container = new Container();
200-
$container->set('initialized_session', $session);
180+
$sessionId = $this->createValidSessionId();
201181

202-
$listener = new SessionListener($container);
203-
$kernel = $this->createMock(HttpKernelInterface::class);
182+
$this->assertNotEmpty($sessionId);
204183

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

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

212200
$cookies = $response->headers->getCookies();
213201
$this->assertCount(0, $cookies);
@@ -218,21 +206,18 @@ public function testSessionCookieNotWrittenCookieGiven()
218206
*/
219207
public function testSessionCookieClearedWhenInvalidated()
220208
{
221-
$session = new Session();
222-
223-
$container = new Container();
224-
$container->set('initialized_session', $session);
225-
226-
$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());
227213
$kernel = $this->createMock(HttpKernelInterface::class);
228214

229-
$request = new Request();
230215
$listener->onKernelRequest(new RequestEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST));
231216

217+
$session = $request->getSession();
232218
$session->start();
233219
$sessionId = $session->getId();
234220
$this->assertNotEmpty($sessionId);
235-
$request->cookies->set($session->getName(), $sessionId);
236221
$_SESSION['hello'] = 'world'; // check compatibility to php session bridge
237222

238223
$session->invalidate();
@@ -253,21 +238,18 @@ public function testSessionCookieClearedWhenInvalidated()
253238
*/
254239
public function testSessionCookieNotClearedWhenOtherVariablesSet()
255240
{
256-
$session = new Session();
257-
258-
$container = new Container();
259-
$container->set('initialized_session', $session);
260-
261-
$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());
262245
$kernel = $this->createMock(HttpKernelInterface::class);
263246

264-
$request = new Request();
265247
$listener->onKernelRequest(new RequestEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST));
266248

249+
$session = $request->getSession();
267250
$session->start();
268251
$sessionId = $session->getId();
269252
$this->assertNotEmpty($sessionId);
270-
$request->cookies->set($session->getName(), $sessionId);
271253
$_SESSION['hello'] = 'world';
272254

273255
$response = new Response();
@@ -282,17 +264,13 @@ public function testSessionCookieNotClearedWhenOtherVariablesSet()
282264
*/
283265
public function testSessionCookieSetWhenOtherNativeVariablesSet()
284266
{
285-
$session = new Session();
286-
287-
$container = new Container();
288-
$container->set('initialized_session', $session);
289-
290-
$listener = new SessionListener($container);
267+
$request = new Request();
268+
$listener = $this->createListener($request, new NativeSessionStorageFactory());
291269
$kernel = $this->createMock(HttpKernelInterface::class);
292270

293-
$request = new Request();
294271
$listener->onKernelRequest(new RequestEvent($kernel, $request, HttpKernelInterface::MAIN_REQUEST));
295272

273+
$session = $request->getSession();
296274
$session->start();
297275
$sessionId = $session->getId();
298276
$this->assertNotEmpty($sessionId);
@@ -785,4 +763,36 @@ public function testResetUnclosedSession()
785763
$this->assertEmpty(session_id());
786764
$this->assertSame(\PHP_SESSION_NONE, session_status());
787765
}
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+
}
788798
}

0 commit comments

Comments
 (0)