@@ -191,6 +191,36 @@ public function testSwitchUser()
191
191
$ this ->assertInstanceOf ('Symfony\Component\Security\Core\Authentication\Token\UsernamePasswordToken ' , $ this ->tokenStorage ->getToken ());
192
192
}
193
193
194
+ public function testSwitchUserAlreadySwitched ()
195
+ {
196
+ $ originalToken = new UsernamePasswordToken ('original ' , null , 'key ' , ['ROLE_FOO ' ]);
197
+ $ alreadySwitchedToken = new UsernamePasswordToken ('switched_1 ' , null , 'key ' , [new SwitchUserRole ('ROLE_PREVIOUS_ADMIN ' , $ originalToken )]);
198
+
199
+ $ tokenStorage = new TokenStorage ();
200
+ $ tokenStorage ->setToken ($ alreadySwitchedToken );
201
+
202
+ $ targetUser = new User ('kuba ' , 'password ' , ['ROLE_FOO ' , 'ROLE_BAR ' ]);
203
+ $ this ->request ->query ->set ('_switch_user ' , 'kuba ' );
204
+
205
+ $ this ->accessDecisionManager ->expects ($ this ->once ())
206
+ ->method ('decide ' )->with ($ originalToken , ['ROLE_ALLOWED_TO_SWITCH ' ])
207
+ ->willReturn (true );
208
+ $ this ->userProvider ->expects ($ this ->once ())
209
+ ->method ('loadUserByUsername ' )
210
+ ->with ('kuba ' )
211
+ ->willReturn ($ targetUser );
212
+ $ this ->userChecker ->expects ($ this ->once ())
213
+ ->method ('checkPostAuth ' )->with ($ targetUser );
214
+
215
+ $ listener = new SwitchUserListener ($ tokenStorage , $ this ->userProvider , $ this ->userChecker , 'provider123 ' , $ this ->accessDecisionManager , null , '_switch_user ' , 'ROLE_ALLOWED_TO_SWITCH ' , null , false );
216
+ $ listener ->handle ($ this ->event );
217
+
218
+ $ this ->assertSame ([], $ this ->request ->query ->all ());
219
+ $ this ->assertSame ('' , $ this ->request ->server ->get ('QUERY_STRING ' ));
220
+ $ this ->assertSame ('kuba ' , $ tokenStorage ->getToken ()->getUsername ());
221
+ $ this ->assertSame ($ originalToken , $ tokenStorage ->getToken ()->getRoles ()[2 ]->getSource ());
222
+ }
223
+
194
224
public function testSwitchUserWorksWithFalsyUsernames ()
195
225
{
196
226
$ token = new UsernamePasswordToken ('username ' , '' , 'key ' , ['ROLE_FOO ' ]);
0 commit comments