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,17 +47,17 @@ 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 );
@@ -97,10 +93,12 @@ public function testSessionUsesFactory()
97
93
public function testResponseIsPrivateIfSessionStarted ()
98
94
{
99
95
$ session = $ this ->createMock (Session::class);
100
- $ session ->expects ($ this ->exactly (2 ))->method ('getUsageIndex ' )->will ($ this ->onConsecutiveCalls (0 , 1 ));
96
+ $ session ->expects ($ this ->once ())->method ('getUsageIndex ' )->willReturn (1 );
97
+ $ sessionFactory = $ this ->createMock (SessionFactory::class);
98
+ $ sessionFactory ->expects ($ this ->once ())->method ('createSession ' )->willReturn ($ session );
101
99
102
100
$ container = new Container ();
103
- $ container ->set ('initialized_session ' , $ session );
101
+ $ container ->set ('session_factory ' , $ sessionFactory );
104
102
105
103
$ listener = new SessionListener ($ container );
106
104
$ kernel = $ this ->createMock (HttpKernelInterface::class);
@@ -109,7 +107,7 @@ public function testResponseIsPrivateIfSessionStarted()
109
107
$ listener ->onKernelRequest (new RequestEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST ));
110
108
111
109
$ response = new Response ();
112
- $ listener ->onKernelResponse (new ResponseEvent ($ kernel , new Request () , HttpKernelInterface::MAIN_REQUEST , $ response ));
110
+ $ listener ->onKernelResponse (new ResponseEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST , $ response ));
113
111
114
112
$ this ->assertTrue ($ response ->headers ->has ('Expires ' ));
115
113
$ this ->assertTrue ($ response ->headers ->hasCacheControlDirective ('private ' ));
@@ -122,10 +120,9 @@ public function testResponseIsPrivateIfSessionStarted()
122
120
public function testResponseIsStillPublicIfSessionStartedAndHeaderPresent ()
123
121
{
124
122
$ session = $ this ->createMock (Session::class);
125
- $ session ->expects ($ this ->exactly ( 2 ))->method ('getUsageIndex ' )->will ( $ this -> onConsecutiveCalls ( 0 , 1 ) );
123
+ $ session ->expects ($ this ->once ( ))->method ('getUsageIndex ' )->willReturn ( 1 );
126
124
127
125
$ container = new Container ();
128
- $ container ->set ('initialized_session ' , $ session );
129
126
130
127
$ listener = new SessionListener ($ container );
131
128
$ kernel = $ this ->createMock (HttpKernelInterface::class);
@@ -136,7 +133,10 @@ public function testResponseIsStillPublicIfSessionStartedAndHeaderPresent()
136
133
$ response = new Response ();
137
134
$ response ->setSharedMaxAge (60 );
138
135
$ response ->headers ->set (AbstractSessionListener::NO_AUTO_CACHE_CONTROL_HEADER , 'true ' );
139
- $ listener ->onKernelResponse (new ResponseEvent ($ kernel , new Request (), HttpKernelInterface::MAIN_REQUEST , $ response ));
136
+
137
+ $ request = new Request ();
138
+ $ request ->setSession ($ session );
139
+ $ listener ->onKernelResponse (new ResponseEvent ($ kernel , $ request , HttpKernelInterface::MAIN_REQUEST , $ response ));
140
140
141
141
$ this ->assertTrue ($ response ->headers ->hasCacheControlDirective ('public ' ));
142
142
$ this ->assertFalse ($ response ->headers ->has ('Expires ' ));
@@ -153,9 +153,7 @@ public function testUninitializedSession()
153
153
$ response ->setSharedMaxAge (60 );
154
154
$ response ->headers ->set (AbstractSessionListener::NO_AUTO_CACHE_CONTROL_HEADER , 'true ' );
155
155
156
- $ container = new ServiceLocator ([
157
- 'initialized_session ' => function () {},
158
- ]);
156
+ $ container = new Container ();
159
157
160
158
$ listener = new SessionListener ($ container );
161
159
$ listener ->onKernelResponse (new ResponseEvent ($ kernel , new Request (), HttpKernelInterface::MAIN_REQUEST , $ response ));
@@ -170,11 +168,12 @@ public function testUninitializedSession()
170
168
public function testSurrogateMainRequestIsPublic ()
171
169
{
172
170
$ session = $ this ->createMock (Session::class);
173
- $ session ->expects ($ this ->exactly (4 ))->method ('getUsageIndex ' )->will ($ this ->onConsecutiveCalls (0 , 1 , 1 , 1 ));
171
+ $ session ->expects ($ this ->exactly (2 ))->method ('getUsageIndex ' )->will ($ this ->onConsecutiveCalls (0 , 1 ));
172
+ $ sessionFactory = $ this ->createMock (SessionFactory::class);
173
+ $ sessionFactory ->expects ($ this ->once ())->method ('createSession ' )->willReturn ($ session );
174
174
175
175
$ container = new Container ();
176
- $ container ->set ('initialized_session ' , $ session );
177
- $ container ->set ('session ' , $ session );
176
+ $ container ->set ('session_factory ' , $ sessionFactory );
178
177
179
178
$ listener = new SessionListener ($ container );
180
179
$ kernel = $ this ->createMock (HttpKernelInterface::class);
@@ -189,7 +188,6 @@ public function testSurrogateMainRequestIsPublic()
189
188
$ this ->assertSame ($ request ->getSession (), $ subRequest ->getSession ());
190
189
$ listener ->onKernelRequest (new RequestEvent ($ kernel , $ subRequest , HttpKernelInterface::MAIN_REQUEST ));
191
190
$ listener ->onKernelResponse (new ResponseEvent ($ kernel , $ subRequest , HttpKernelInterface::MAIN_REQUEST , $ response ));
192
- $ listener ->onFinishRequest (new FinishRequestEvent ($ kernel , $ subRequest , HttpKernelInterface::MAIN_REQUEST ));
193
191
194
192
$ this ->assertFalse ($ response ->headers ->has ('Expires ' ));
195
193
$ this ->assertFalse ($ response ->headers ->hasCacheControlDirective ('private ' ));
@@ -209,19 +207,15 @@ public function testSurrogateMainRequestIsPublic()
209
207
public function testGetSessionIsCalledOnce ()
210
208
{
211
209
$ session = $ this ->createMock (Session::class);
212
- $ sessionStorage = $ this ->createMock (NativeSessionStorage::class);
210
+ $ sessionFactory = $ this ->createMock (SessionFactory::class);
211
+ $ sessionFactory ->expects ($ this ->once ())->method ('createSession ' )->willReturn ($ session );
213
212
$ kernel = $ this ->createMock (KernelInterface::class);
214
213
215
- $ sessionStorage ->expects ($ this ->once ())
216
- ->method ('setOptions ' )
217
- ->with (['cookie_secure ' => true ]);
218
-
219
214
$ requestStack = new RequestStack ();
220
215
$ requestStack ->push ($ mainRequest = new Request ([], [], [], [], [], ['HTTPS ' => 'on ' ]));
221
216
222
217
$ container = new Container ();
223
- $ container ->set ('session_storage ' , $ sessionStorage );
224
- $ container ->set ('session ' , $ session );
218
+ $ container ->set ('session_factory ' , $ sessionFactory );
225
219
$ container ->set ('request_stack ' , $ requestStack );
226
220
227
221
$ event = new RequestEvent ($ kernel , $ mainRequest , HttpKernelInterface::MAIN_REQUEST );
@@ -230,9 +224,6 @@ public function testGetSessionIsCalledOnce()
230
224
$ listener ->onKernelRequest ($ event );
231
225
232
226
// storage->setOptions() should have been called already
233
- $ container ->set ('session_storage ' , null );
234
- $ sessionStorage = null ;
235
-
236
227
$ subRequest = $ mainRequest ->duplicate ();
237
228
// at this point both main and subrequest have a closure to build the session
238
229
@@ -245,10 +236,12 @@ public function testGetSessionIsCalledOnce()
245
236
public function testSessionUsageExceptionIfStatelessAndSessionUsed ()
246
237
{
247
238
$ session = $ this ->createMock (Session::class);
248
- $ session ->expects ($ this ->exactly (2 ))->method ('getUsageIndex ' )->will ($ this ->onConsecutiveCalls (0 , 1 ));
239
+ $ session ->expects ($ this ->once ())->method ('getUsageIndex ' )->willReturn (1 );
240
+ $ sessionFactory = $ this ->createMock (SessionFactory::class);
241
+ $ sessionFactory ->expects ($ this ->once ())->method ('createSession ' )->willReturn ($ session );
249
242
250
243
$ container = new Container ();
251
- $ container ->set ('initialized_session ' , $ session );
244
+ $ container ->set ('session_factory ' , $ sessionFactory );
252
245
253
246
$ listener = new SessionListener ($ container , true );
254
247
$ kernel = $ this ->createMock (HttpKernelInterface::class);
@@ -264,13 +257,15 @@ public function testSessionUsageExceptionIfStatelessAndSessionUsed()
264
257
public function testSessionUsageLogIfStatelessAndSessionUsed ()
265
258
{
266
259
$ session = $ this ->createMock (Session::class);
267
- $ session ->expects ($ this ->exactly (2 ))->method ('getUsageIndex ' )->will ($ this ->onConsecutiveCalls (0 , 1 ));
260
+ $ session ->expects ($ this ->once ())->method ('getUsageIndex ' )->willReturn (1 );
261
+ $ sessionFactory = $ this ->createMock (SessionFactory::class);
262
+ $ sessionFactory ->expects ($ this ->once ())->method ('createSession ' )->willReturn ($ session );
268
263
269
264
$ logger = $ this ->createMock (LoggerInterface::class);
270
265
$ logger ->expects ($ this ->exactly (1 ))->method ('warning ' );
271
266
272
267
$ container = new Container ();
273
- $ container ->set ('initialized_session ' , $ session );
268
+ $ container ->set ('session_factory ' , $ sessionFactory );
274
269
$ container ->set ('logger ' , $ logger );
275
270
276
271
$ listener = new SessionListener ($ container , false );
@@ -287,11 +282,13 @@ public function testSessionIsSavedWhenUnexpectedSessionExceptionThrown()
287
282
{
288
283
$ session = $ this ->createMock (Session::class);
289
284
$ session ->method ('isStarted ' )->willReturn (true );
290
- $ session ->expects ($ this ->exactly ( 2 ))->method ('getUsageIndex ' )->will ( $ this -> onConsecutiveCalls ( 0 , 1 ) );
285
+ $ session ->expects ($ this ->once ( ))->method ('getUsageIndex ' )->willReturn ( 1 );
291
286
$ session ->expects ($ this ->exactly (1 ))->method ('save ' );
287
+ $ sessionFactory = $ this ->createMock (SessionFactory::class);
288
+ $ sessionFactory ->expects ($ this ->once ())->method ('createSession ' )->willReturn ($ session );
292
289
293
290
$ container = new Container ();
294
- $ container ->set ('initialized_session ' , $ session );
291
+ $ container ->set ('session_factory ' , $ sessionFactory );
295
292
296
293
$ listener = new SessionListener ($ container , true );
297
294
$ kernel = $ this ->createMock (HttpKernelInterface::class);
@@ -319,13 +316,13 @@ public function testSessionUsageCallbackWhenDebugAndStateless()
319
316
320
317
$ requestStack ->push (new Request ());
321
318
$ requestStack ->push ($ request );
322
- $ requestStack ->push (new Request ());
319
+ $ requestStack ->push ($ subRequest = new Request ());
320
+ $ subRequest ->setSession ($ session );
323
321
324
322
$ collector = $ this ->createMock (RequestDataCollector::class);
325
323
$ collector ->expects ($ this ->once ())->method ('collectSessionUsage ' );
326
324
327
325
$ container = new Container ();
328
- $ container ->set ('initialized_session ' , $ session );
329
326
$ container ->set ('request_stack ' , $ requestStack );
330
327
$ container ->set ('session_collector ' , \Closure::fromCallable ([$ collector , 'collectSessionUsage ' ]));
331
328
@@ -349,7 +346,6 @@ public function testSessionUsageCallbackWhenNoDebug()
349
346
$ collector ->expects ($ this ->never ())->method ('collectSessionUsage ' );
350
347
351
348
$ container = new Container ();
352
- $ container ->set ('initialized_session ' , $ session );
353
349
$ container ->set ('request_stack ' , $ requestStack );
354
350
$ container ->set ('session_collector ' , $ collector );
355
351
@@ -367,7 +363,6 @@ public function testSessionUsageCallbackWhenNoStateless()
367
363
$ requestStack ->push (new Request ());
368
364
369
365
$ container = new Container ();
370
- $ container ->set ('initialized_session ' , $ session );
371
366
$ container ->set ('request_stack ' , $ requestStack );
372
367
373
368
(new SessionListener ($ container , true ))->onSessionUsage ();
0 commit comments