31
31
use Symfony \Component \HttpKernel \HttpKernelInterface ;
32
32
use Symfony \Component \HttpKernel \KernelInterface ;
33
33
34
- /**
35
- * Tests related to `initialized_session` and `session` can be updated when symfony/http-kernel will stop being
36
- * compatible with symfony/framework-bundle<6.0
37
- */
38
34
class SessionListenerTest extends TestCase
39
35
{
40
36
public function testOnlyTriggeredOnMainRequest ()
@@ -51,23 +47,23 @@ public function testOnlyTriggeredOnMainRequest()
51
47
public function testSessionIsSet ()
52
48
{
53
49
$ session = $ this ->createMock (Session::class);
50
+ $ sessionFactory = $ this ->createMock (SessionFactory::class);
51
+ $ sessionFactory ->expects ($ this ->once ())->method ('createSession ' )->willReturn ($ session );
54
52
55
53
$ requestStack = $ this ->createMock (RequestStack::class);
56
- $ requestStack ->expects ($ this ->once ())->method ('getMainRequest ' )->willReturn (null );
57
54
58
55
$ sessionStorage = $ this ->createMock (NativeSessionStorage::class);
59
56
$ sessionStorage ->expects ($ this ->never ())->method ('setOptions ' )->with (['cookie_secure ' => true ]);
60
57
61
58
$ container = new Container ();
62
- $ container ->set ('session ' , $ session );
59
+ $ container ->set ('session_factory ' , $ sessionFactory );
63
60
$ container ->set ('request_stack ' , $ requestStack );
64
- $ container ->set ('session_storage ' , $ sessionStorage );
65
61
66
62
$ request = new Request ();
67
63
$ listener = new SessionListener ($ container );
68
64
69
65
$ event = $ this ->createMock (RequestEvent::class);
70
- $ event ->expects ($ this ->exactly (2 ))->method ('isMainRequest ' )->willReturn (true );
66
+ $ event ->expects ($ this ->exactly (1 ))->method ('isMainRequest ' )->willReturn (true );
71
67
$ event ->expects ($ this ->once ())->method ('getRequest ' )->willReturn ($ request );
72
68
73
69
$ listener ->onKernelRequest ($ event );
@@ -89,7 +85,7 @@ public function testSessionUsesFactory()
89
85
$ listener = new SessionListener ($ container );
90
86
91
87
$ event = $ this ->createMock (RequestEvent::class);
92
- $ event ->expects ($ this ->exactly (2 ))->method ('isMainRequest ' )->willReturn (true );
88
+ $ event ->expects ($ this ->exactly (1 ))->method ('isMainRequest ' )->willReturn (true );
93
89
$ event ->expects ($ this ->once ())->method ('getRequest ' )->willReturn ($ request );
94
90
95
91
$ listener ->onKernelRequest ($ event );
@@ -101,10 +97,12 @@ public function testSessionUsesFactory()
101
97
public function testResponseIsPrivateIfSessionStarted ()
102
98
{
103
99
$ session = $ this ->createMock (Session::class);
104
- $ session ->expects ($ this ->exactly (2 ))->method ('getUsageIndex ' )->will ($ this ->onConsecutiveCalls (0 , 1 ));
100
+ $ session ->expects ($ this ->once ())->method ('getUsageIndex ' )->willReturn (1 );
101
+ $ sessionFactory = $ this ->createMock (SessionFactory::class);
102
+ $ sessionFactory ->expects ($ this ->once ())->method ('createSession ' )->willReturn ($ session );
105
103
106
104
$ container = new Container ();
107
- $ container ->set ('initialized_session ' , $ session );
105
+ $ container ->set ('session_factory ' , $ sessionFactory );
108
106
109
107
$ listener = new SessionListener ($ container );
110
108
$ kernel = $ this ->createMock (HttpKernelInterface::class);
@@ -113,7 +111,7 @@ public function testResponseIsPrivateIfSessionStarted()
113
111
$ listener ->onKernelRequest (new RequestEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST ));
114
112
115
113
$ response = new Response ();
116
- $ listener ->onKernelResponse (new ResponseEvent ($ kernel , new Request () , HttpKernelInterface::MAIN_REQUEST , $ response ));
114
+ $ listener ->onKernelResponse (new ResponseEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST , $ response ));
117
115
118
116
$ this ->assertTrue ($ response ->headers ->has ('Expires ' ));
119
117
$ this ->assertTrue ($ response ->headers ->hasCacheControlDirective ('private ' ));
@@ -126,10 +124,9 @@ public function testResponseIsPrivateIfSessionStarted()
126
124
public function testResponseIsStillPublicIfSessionStartedAndHeaderPresent ()
127
125
{
128
126
$ session = $ this ->createMock (Session::class);
129
- $ session ->expects ($ this ->exactly ( 2 ))->method ('getUsageIndex ' )->will ( $ this -> onConsecutiveCalls ( 0 , 1 ) );
127
+ $ session ->expects ($ this ->once ( ))->method ('getUsageIndex ' )->willReturn ( 1 );
130
128
131
129
$ container = new Container ();
132
- $ container ->set ('initialized_session ' , $ session );
133
130
134
131
$ listener = new SessionListener ($ container );
135
132
$ kernel = $ this ->createMock (HttpKernelInterface::class);
@@ -140,7 +137,10 @@ public function testResponseIsStillPublicIfSessionStartedAndHeaderPresent()
140
137
$ response = new Response ();
141
138
$ response ->setSharedMaxAge (60 );
142
139
$ response ->headers ->set (AbstractSessionListener::NO_AUTO_CACHE_CONTROL_HEADER , 'true ' );
143
- $ listener ->onKernelResponse (new ResponseEvent ($ kernel , new Request (), HttpKernelInterface::MAIN_REQUEST , $ response ));
140
+
141
+ $ request = new Request ();
142
+ $ request ->setSession ($ session );
143
+ $ listener ->onKernelResponse (new ResponseEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST , $ response ));
144
144
145
145
$ this ->assertTrue ($ response ->headers ->hasCacheControlDirective ('public ' ));
146
146
$ this ->assertFalse ($ response ->headers ->has ('Expires ' ));
@@ -157,9 +157,7 @@ public function testUninitializedSession()
157
157
$ response ->setSharedMaxAge (60 );
158
158
$ response ->headers ->set (AbstractSessionListener::NO_AUTO_CACHE_CONTROL_HEADER , 'true ' );
159
159
160
- $ container = new ServiceLocator ([
161
- 'initialized_session ' => function () {},
162
- ]);
160
+ $ container = new Container ();
163
161
164
162
$ listener = new SessionListener ($ container );
165
163
$ listener ->onKernelResponse (new ResponseEvent ($ kernel , new Request (), HttpKernelInterface::MAIN_REQUEST , $ response ));
@@ -174,11 +172,12 @@ public function testUninitializedSession()
174
172
public function testSurrogateMainRequestIsPublic ()
175
173
{
176
174
$ session = $ this ->createMock (Session::class);
177
- $ session ->expects ($ this ->exactly (4 ))->method ('getUsageIndex ' )->will ($ this ->onConsecutiveCalls (0 , 1 , 1 , 1 ));
175
+ $ session ->expects ($ this ->exactly (2 ))->method ('getUsageIndex ' )->will ($ this ->onConsecutiveCalls (0 , 1 ));
176
+ $ sessionFactory = $ this ->createMock (SessionFactory::class);
177
+ $ sessionFactory ->expects ($ this ->once ())->method ('createSession ' )->willReturn ($ session );
178
178
179
179
$ container = new Container ();
180
- $ container ->set ('initialized_session ' , $ session );
181
- $ container ->set ('session ' , $ session );
180
+ $ container ->set ('session_factory ' , $ sessionFactory );
182
181
183
182
$ listener = new SessionListener ($ container );
184
183
$ kernel = $ this ->createMock (HttpKernelInterface::class);
@@ -193,7 +192,6 @@ public function testSurrogateMainRequestIsPublic()
193
192
$ this ->assertSame ($ request ->getSession (), $ subRequest ->getSession ());
194
193
$ listener ->onKernelRequest (new RequestEvent ($ kernel , $ subRequest , HttpKernelInterface::MAIN_REQUEST ));
195
194
$ listener ->onKernelResponse (new ResponseEvent ($ kernel , $ subRequest , HttpKernelInterface::MAIN_REQUEST , $ response ));
196
- $ listener ->onFinishRequest (new FinishRequestEvent ($ kernel , $ subRequest , HttpKernelInterface::MAIN_REQUEST ));
197
195
198
196
$ this ->assertFalse ($ response ->headers ->has ('Expires ' ));
199
197
$ this ->assertFalse ($ response ->headers ->hasCacheControlDirective ('private ' ));
@@ -213,19 +211,15 @@ public function testSurrogateMainRequestIsPublic()
213
211
public function testGetSessionIsCalledOnce ()
214
212
{
215
213
$ session = $ this ->createMock (Session::class);
216
- $ sessionStorage = $ this ->createMock (NativeSessionStorage::class);
214
+ $ sessionFactory = $ this ->createMock (SessionFactory::class);
215
+ $ sessionFactory ->expects ($ this ->once ())->method ('createSession ' )->willReturn ($ session );
217
216
$ kernel = $ this ->createMock (KernelInterface::class);
218
217
219
- $ sessionStorage ->expects ($ this ->once ())
220
- ->method ('setOptions ' )
221
- ->with (['cookie_secure ' => true ]);
222
-
223
218
F438
$ requestStack = new RequestStack ();
224
219
$ requestStack ->push ($ mainRequest = new Request ([], [], [], [], [], ['HTTPS ' => 'on ' ]));
225
220
226
221
$ container = new Container ();
227
- $ container ->set ('session_storage ' , $ sessionStorage );
228
- $ container ->set ('session ' , $ session );
222
+ $ container ->set ('session_factory ' , $ sessionFactory );
229
223
$ container ->set ('request_stack ' , $ requestStack );
230
224
231
225
$ event = new RequestEvent ($ kernel , $ mainRequest , HttpKernelInterface::MAIN_REQUEST );
@@ -234,9 +228,6 @@ public function testGetSessionIsCalledOnce()
234
228
$ listener ->onKernelRequest ($ event );
235
229
236
230
// storage->setOptions() should have been called already
237
- $ container ->set ('session_storage ' , null );
238
- $ sessionStorage = null ;
239
-
240
231
$ subRequest = $ mainRequest ->duplicate ();
241
232
// at this point both main and subrequest have a closure to build the session
242
233
@@ -249,10 +240,12 @@ public function testGetSessionIsCalledOnce()
249
240
public function testSessionUsageExceptionIfStatelessAndSessionUsed ()
250
241
{
251
242
$ session = $ this ->createMock (Session::class);
252
- $ session ->expects ($ this ->exactly (2 ))->method ('getUsageIndex ' )->will ($ this ->onConsecutiveCalls (0 , 1 ));
243
+ $ session ->expects ($ this ->once ())->method ('getUsageIndex ' )->willReturn (1 );
244
+ $ sessionFactory = $ this ->createMock (SessionFactory::class);
245
+ $ sessionFactory ->expects ($ this ->once ())->method ('createSession ' )->willReturn ($ session );
253
246
254
247
$ container = new Container ();
255
- $ container ->set ('initialized_session ' , $ session );
248
+ $ container ->set ('session_factory ' , $ sessionFactory );
256
249
257
250
$ listener = new SessionListener ($ container , true );
258
251
$ kernel = $ this ->createMock (HttpKernelInterface::class);
@@ -268,13 +261,15 @@ public function testSessionUsageExceptionIfStatelessAndSessionUsed()
268
261
public function testSessionUsageLogIfStatelessAndSessionUsed ()
269
262
{
270
263
$ session = $ this ->createMock (Session::class);
271
- $ session ->expects ($ this ->exactly (2 ))->method ('getUsageIndex ' )->will ($ this ->onConsecutiveCalls (0 , 1 ));
264
+ $ session ->expects ($ this ->once ())->method ('getUsageIndex ' )->willReturn (1 );
265
+ $ sessionFactory = $ this ->createMock (SessionFactory::class);
266
+ $ sessionFactory ->expects ($ this ->once ())->method ('createSession ' )->willReturn ($ session );
272
267
273
268
$ logger = $ this ->createMock (LoggerInterface::class);
274
269
$ logger ->expects ($ this ->exactly (1 ))->method ('warning ' );
275
270
276
271
$ container = new Container ();
277
- $ container ->set ('initialized_session ' , $ session );
272
+ $ container ->set ('session_factory ' , $ sessionFactory );
278
273
$ container ->set ('logger ' , $ logger );
279
274
280
275
$ listener = new SessionListener ($ container , false );
@@ -291,11 +286,13 @@ public function testSessionIsSavedWhenUnexpectedSessionExceptionThrown()
291
286
{
292
287
$ session = $ this ->createMock (Session::class);
293
288
$ session ->method ('isStarted ' )->willReturn (true );
294
- $ session ->expects ($ this ->exactly ( 2 ))->method ('getUsageIndex ' )->will ( $ this -> onConsecutiveCalls ( 0 , 1 ) );
289
+ $ session ->expects ($ this ->once ( ))->method ('getUsageIndex ' )->willReturn ( 1 );
295
290
$ session ->expects ($ this ->exactly (1 ))->method ('save ' );
291
+ $ sessionFactory = $ this ->createMock (SessionFactory::class);
292
+ $ sessionFactory ->expects ($ this ->once ())->method ('createSession ' )->willReturn ($ session );
296
293
297
294
$ container = new Container ();
298
- $ container ->set ('initialized_session ' , $ session );
295
+ $ container ->set ('session_factory ' , $ sessionFactory );
299
296
300
297
$ listener = new SessionListener ($ container , true );
301
298
$ kernel = $ this ->createMock (HttpKernelInterface::class);
@@ -323,13 +320,13 @@ public function testSessionUsageCallbackWhenDebugAndStateless()
323
320
324
321
$ requestStack ->push (new Request ());
325
322
$ requestStack ->push ($ request );
326
- $ requestStack ->push (new Request ());
323
+ $ requestStack ->push ($ subRequest = new Request ());
324
+ $ subRequest ->setSession ($ session );
327
325
328
326
$ collector = $ this ->createMock (RequestDataCollector::class);
329
327
$ collector ->expects ($ this ->once ())->method ('collectSessionUsage ' );
330
328
331
329
$ container = new Container ();
332
- $ container ->set ('initialized_session ' , $ session );
333
330
$ container ->set ('request_stack ' , $ requestStack );
334
331
$ container ->set ('session_collector ' , \Closure::fromCallable ([$ collector , 'collectSessionUsage ' ]));
335
332
@@ -353,7 +350,6 @@ public function testSessionUsageCallbackWhenNoDebug()
353
350
$ collector ->expects ($ this ->never ())->method ('collectSessionUsage ' );
354
351
355
352
$ container = new Container ();
356
- $ container ->set ('initialized_session ' , $ session );
357
353
$ container ->set ('request_stack ' , $ requestStack );
358
354
$ container ->set ('session_collector ' , $ collector );
359
355
@@ -371,7 +367,6 @@ public function testSessionUsageCallbackWhenNoStateless()
371
367
$ requestStack ->push (new Request ());
372
368
373
369
$ container = new Container ();
374
- $ container ->set ('initialized_session ' , $ session );
375
370
$ container ->set ('request_stack ' , $ requestStack );
376
371
377
372
(new SessionListener ($ container , true ))->onSessionUsage ();
0 commit comments