22
22
use Symfony \Component \HttpKernel \Kernel ;
23
23
use Symfony \Component \Security \Core \Authentication \Token \AbstractToken ;
24
24
use Symfony \Component \Security \Core \Authentication \Token \Storage \TokenStorageInterface ;
25
+ use Symfony \Component \Security \Core \Authentication \Token \SwitchUserToken ;
25
26
use Symfony \Component \Security \Core \Authentication \Token \TokenInterface ;
26
27
use Symfony \Component \Security \Core \User \UserInterface ;
27
28
@@ -51,6 +52,9 @@ protected function setUp(): void
51
52
52
53
/**
53
54
* @dataProvider handleKernelRequestEventDataProvider
55
+ * @dataProvider handleKernelRequestEventForSymfonyVersionLowerThan54DataProvider
56
+ * @dataProvider handleKernelRequestEventForSymfonyVersionGreaterThan54DataProvider
57
+ * @dataProvider handleKernelRequestEventForSymfonyVersionLowerThan60DataProvider
54
58
*/
55
59
public function testHandleKernelRequestEvent (RequestEvent $ requestEvent , ?ClientInterface $ client , ?TokenInterface $ token , ?UserDataBag $ expectedUser ): void
56
60
{
@@ -138,46 +142,6 @@ public function handleKernelRequestEventDataProvider(): \Generator
138
142
UserDataBag::createFromUserIpAddress ('127.0.0.1 ' ),
139
143
];
140
144
141
- if (version_compare (Kernel::VERSION , '6.0.0 ' , '< ' )) {
142
- yield 'token.authenticated = TRUE && token.user INSTANCEOF string ' => [
143
- new RequestEvent (
144
- $ this ->createMock (HttpKernelInterface::class),
145
- new Request ([], [], [], [], [], ['REMOTE_ADDR ' => '127.0.0.1 ' ]),
146
- HttpKernelInterface::MASTER_REQUEST
147
- ),
148
- $ this ->getMockedClientWithOptions (new Options (['send_default_pii ' => true ])),
149
- new AuthenticatedTokenStub ('foo_user ' ),
150
- new UserDataBag (null , null , '127.0.0.1 ' , 'foo_user ' ),
151
- ];
152
-
153
- yield 'token.authenticated = TRUE && token.user INSTANCEOF UserInterface && getUserIdentifier() method DOES NOT EXISTS ' => [
154
- new RequestEvent (
155
- $ this ->createMock (HttpKernelInterface::class),
156
- new Request ([], [], [], [], [], ['REMOTE_ADDR ' => '127.0.0.1 ' ]),
157
- HttpKernelInterface::MASTER_REQUEST
158
- ),
159
- $ this ->getMockedClientWithOptions (new Options (['send_default_pii ' => true ])),
160
- new AuthenticatedTokenStub (new UserWithoutIdentifierStub ()),
161
- new UserDataBag (null , null , '127.0.0.1 ' , 'foo_user ' ),
162
- ];
163
-
164
- yield 'token.authenticated = TRUE && token.user INSTANCEOF object && __toString() method EXISTS ' => [
165
- new RequestEvent (
166
- $ this ->createMock (HttpKernelInterface::class),
167
- new Request ([], [], [], [], [], ['REMOTE_ADDR ' => '127.0.0.1 ' ]),
168
- HttpKernelInterface::MASTER_REQUEST
169
- ),
170
- $ this ->getMockedClientWithOptions (new Options (['send_default_pii ' => true ])),
171
- new AuthenticatedTokenStub (new class () implements \Stringable {
172
- public function __toString (): string
173
- {
174
- return 'foo_user ' ;
175
- }
176
- }),
177
- new UserDataBag (null , null , '127.0.0.1 ' , 'foo_user ' ),
178
- ];
179
- }
180
-
181
145
yield 'token.authenticated = TRUE && token.user INSTANCEOF UserInterface && getUserIdentifier() method EXISTS ' => [
182
146
new RequestEvent (
183
147
$ this ->createMock (HttpKernelInterface::class),
@@ -201,6 +165,115 @@ public function __toString(): string
201
165
];
202
166
}
203
167
168
+ /**
169
+ * @return \Generator<mixed>
170
+ */
171
+ public function handleKernelRequestEventForSymfonyVersionLowerThan54DataProvider (): \Generator
172
+ {
173
+ if (version_compare (Kernel::VERSION , '5.4.0 ' , '>= ' )) {
174
+ return ;
175
+ }
176
+
177
+ yield 'token.authenticated = TRUE && token INSTANCEOF SwitchUserToken ' => [
178
+ new RequestEvent (
179
+ $ this ->createMock (HttpKernelInterface::class),
180
+ new Request ([], [], [], [], [], ['REMOTE_ADDR ' => '127.0.0.1 ' ]),
181
+ HttpKernelInterface::MASTER_REQUEST
182
+ ),
183
+ $ this ->getMockedClientWithOptions (new Options (['send_default_pii ' => true ])),
184
+ new SwitchUserToken (
185
+ new UserWithIdentifierStub (),
186
+ '' ,
187
+ 'user_provider ' ,
188
+ ['ROLE_USER ' ],
189
+ new AuthenticatedTokenStub (new UserWithIdentifierStub ('foo_user_impersonator ' ))
190
+ ),
191
+ UserDataBag::createFromArray ([
192
+ 'ip_address ' => '127.0.0.1 ' ,
193
+ 'username ' => 'foo_user ' ,
194
+ 'impersonator_username ' => 'foo_user_impersonator ' ,
195
+ ]),
196
+ ];
197
+ }
198
+
199
+ /**
200
+ * @return \Generator<mixed>
201
+ */
202
+ public function handleKernelRequestEventForSymfonyVersionGreaterThan54DataProvider (): \Generator
203
+ {
204
+ if (version_compare (Kernel::VERSION , '5.4.0 ' , '< ' )) {
205
+ return ;
206
+ }
207
+
208
+ yield 'token.authenticated = TRUE && token INSTANCEOF SwitchUserToken ' => [
209
+ new RequestEvent (
210
+ $ this ->createMock (HttpKernelInterface::class),
211
+ new Request ([], [], [], [], [], ['REMOTE_ADDR ' => '127.0.0.1 ' ]),
212
+ HttpKernelInterface::MASTER_REQUEST
213
+ ),
214
+ $ this ->getMockedClientWithOptions (new Options (['send_default_pii ' => true ])),
215
+ new SwitchUserToken (
216
+ new UserWithIdentifierStub (),
217
+ 'main ' ,
218
+ ['ROLE_USER ' ],
219
+ new AuthenticatedTokenStub (new UserWithIdentifierStub ('foo_user_impersonator ' ))
220
+ ),
221
+ UserDataBag::createFromArray ([
222
+ 'ip_address ' => '127.0.0.1 ' ,
223
+ 'username ' => 'foo_user ' ,
224
+ 'impersonator_username ' => 'foo_user_impersonator ' ,
225
+ ]),
226
+ ];
227
+ }
228
+
229
+ /**
230
+ * @return \Generator<mixed>
231
+ */
232
+ public function handleKernelRequestEventForSymfonyVersionLowerThan60DataProvider (): \Generator
233
+ {
234
+ if (version_compare (Kernel::VERSION , '6.0.0 ' , '>= ' )) {
235
+ return ;
236
+ }
237
+
238
+ yield 'token.authenticated = TRUE && token.user INSTANCEOF string ' => [
239
+ new RequestEvent (
240
+ $ this ->createMock (HttpKernelInterface::class),
241
+ new Request ([], [], [], [], [], ['REMOTE_ADDR ' => '127.0.0.1 ' ]),
242
+ HttpKernelInterface::MASTER_REQUEST
243
+ ),
244
+ $ this ->getMockedClientWithOptions (new Options (['send_default_pii ' => true ])),
245
+ new AuthenticatedTokenStub ('foo_user ' ),
246
+ new UserDataBag (null , null , '127.0.0.1 ' , 'foo_user ' ),
247
+ ];
248
+
249
+ yield 'token.authenticated = TRUE && token.user INSTANCEOF UserInterface && getUserIdentifier() method DOES NOT EXISTS ' => [
250
+ new RequestEvent (
251
+ $ this ->createMock (HttpKernelInterface::class),
252
+ new Request ([], [], [], [], [], ['REMOTE_ADDR ' => '127.0.0.1 ' ]),
253
+ HttpKernelInterface::MASTER_REQUEST
254
+ ),
255
+ $ this ->getMockedClientWithOptions (new Options (['send_default_pii ' => true ])),
256
+ new AuthenticatedTokenStub (new UserWithoutIdentifierStub ()),
257
+ new UserDataBag (null , null , '127.0.0.1 ' , 'foo_user ' ),
258
+ ];
259
+
260
+ yield 'token.authenticated = TRUE && token.user INSTANCEOF object && __toString() method EXISTS ' => [
261
+ new RequestEvent (
262
+ $ this ->createMock (HttpKernelInterface::class),
263
+ new Request ([], [], [], [], [], ['REMOTE_ADDR ' => '127.0.0.1 ' ]),
264
+ HttpKernelInterface::MASTER_REQUEST
265
+ ),
266
+ $ this ->getMockedClientWithOptions (new Options (['send_default_pii ' => true ])),
267
+ new AuthenticatedTokenStub (new class () implements \Stringable {
268
+ public function __toString (): string
269
+ {
270
+ return 'foo_user ' ;
271
+ }
272
+ }),
273
+ new UserDataBag (null , null , '127.0.0.1 ' , 'foo_user ' ),
274
+ ];
275
+ }
276
+
204
277
/**
205
278
* @dataProvider handleKernelControllerEventDataProvider
206
279
*
0 commit comments