@@ -223,6 +223,39 @@ public function testSwitchUser()
223
223
$ this ->assertInstanceOf ('Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken ' , $ this ->tokenStorage ->getToken ());
224
224
}
225
225
226
+ public function testSwitchUserAlreadySwitched ()
227
+ {
228
+ $ originalToken = new UsernamePasswordToken ('original ' , null , 'key ' , ['ROLE_FOO ' ]);
229
+ $ alreadySwitchedToken = new SwitchUserToken ('switched_1 ' , null , 'key ' , ['ROLE_BAR ' ], $ originalToken );
230
+
231
+ $ tokenStorage = new TokenStorage ();
232
+ $ tokenStorage ->setToken ($ alreadySwitchedToken );
233
+
234
+ $ targetUser = new User ('kuba ' , 'password ' , ['ROLE_FOO ' , 'ROLE_BAR ' ]);
235
+
236
+ $ this ->request ->query ->set ('_switch_user ' , 'kuba ' );
237
+
238
+ $ this ->accessDecisionManager ->expects ($ this ->once ())
239
+ ->method ('decide ' )->with ($ originalToken , ['ROLE_ALLOWED_TO_SWITCH ' ], $ targetUser )
240
+ ->willReturn (true );
241
+
242
+ $ this ->userProvider ->expects ($ this ->exactly (2 ))
243
+ ->method ('loadUserByUsername ' )
244
+ ->withConsecutive (['kuba ' ])
245
+ ->will ($ this ->onConsecutiveCalls ($ targetUser , $ this ->throwException (new UsernameNotFoundException ())));
246
+ $ this ->userChecker ->expects ($ this ->once ())
247
+ ->method ('checkPostAuth ' )->with ($ targetUser );
248
+
249
+ $ listener = new SwitchUserListener ($ tokenStorage , $ this ->userProvider , $ this ->userChecker , 'provider123 ' , $ this ->accessDecisionManager , null , '_switch_user ' , 'ROLE_ALLOWED_TO_SWITCH ' , null , false );
250
+ $ listener ($ this ->event );
251
+
252
+ $ this ->assertSame ([], $ this ->request ->query ->all ());
253
+ $ this ->assertSame ('' , $ this ->request ->server ->get ('QUERY_STRING ' ));
254
+ $ this ->assertInstanceOf (SwitchUserToken::class, $ tokenStorage ->getToken ());
255
+ $ this ->assertSame ('kuba ' , $ tokenStorage ->getToken ()->getUsername ());
256
+ $ this ->assertSame ($ originalToken , $ tokenStorage ->getToken ()->getOriginalToken ());
257
+ }
258
+
226
259
public function testSwitchUserWorksWithFalsyUsernames ()
227
260
{
228
261
$ token = new UsernamePasswordToken ('username ' , '' , 'key ' , ['ROLE_FOO ' ]);
0 commit comments