1818use Symfony \Bundle \SecurityBundle \Security \FirewallMap ;
1919use Symfony \Component \EventDispatcher \EventDispatcher ;
2020use Symfony \Component \EventDispatcher \EventDispatcherInterface ;
21+ use Symfony \Component \HttpFoundation \Request ;
22+ use Symfony \Component \HttpFoundation \Response ;
2123use Symfony \Component \HttpKernel \Event \GetResponseEvent ;
2224use Symfony \Component \HttpKernel \HttpKernelInterface ;
2325use Symfony \Component \Security \Core \Authentication \Token \Storage \TokenStorage ;
26+ use Symfony \Component \Security \Core \Authentication \Token \SwitchUserToken ;
2427use Symfony \Component \Security \Core \Authentication \Token \UsernamePasswordToken ;
2528use Symfony \Component \Security \Core \Authorization \AccessDecisionManager ;
2629use Symfony \Component \Security \Core \Authorization \TraceableAccessDecisionManager ;
@@ -38,7 +41,7 @@ class SecurityDataCollectorTest extends TestCase
3841 public function testCollectWhenSecurityIsDisabled ()
3942 {
4043 $ collector = new SecurityDataCollector ();
41- $ collector ->collect ($ this -> getRequest (), $ this -> getResponse ());
44+ $ collector ->collect (new Request (), new Response ());
4245
4346 $ this ->assertSame ('security ' , $ collector ->getName ());
4447 $ this ->assertFalse ($ collector ->isEnabled ());
@@ -58,7 +61,7 @@ public function testCollectWhenAuthenticationTokenIsNull()
5861 {
5962 $ tokenStorage = new TokenStorage ();
6063 $ collector = new SecurityDataCollector ($ tokenStorage , $ this ->getRoleHierarchy ());
61- $ collector ->collect ($ this -> getRequest (), $ this -> getResponse ());
64+ $ collector ->collect (new Request (), new Response ());
6265
6366 $ this ->assertTrue ($ collector ->isEnabled ());
6467 $ this ->assertFalse ($ collector ->isAuthenticated ());
@@ -80,7 +83,7 @@ public function testCollectAuthenticationTokenAndRoles(array $roles, array $norm
8083 $ tokenStorage ->setToken (new UsernamePasswordToken ('hhamon ' , 'P4$$w0rD ' , 'provider ' , $ roles ));
8184
8285 $ collector = new SecurityDataCollector ($ tokenStorage , $ this ->getRoleHierarchy ());
83- $ collector ->collect ($ this -> getRequest (), $ this -> getResponse ());
86+ $ collector ->collect (new Request (), new Response ());
8487 $ collector ->lateCollect ();
8588
8689 $ this ->assertTrue ($ collector ->isEnabled ());
@@ -95,6 +98,9 @@ public function testCollectAuthenticationTokenAndRoles(array $roles, array $norm
9598 $ this ->assertSame ('hhamon ' , $ collector ->getUser ());
9699 }
97100
101+ /**
102+ * @group legacy
103+ */
98104 public function testCollectImpersonatedToken ()
99105 {
100106 $ adminToken = new UsernamePasswordToken ('yceruto ' , 'P4$$w0rD ' , 'provider ' , ['ROLE_ADMIN ' ]);
@@ -108,7 +114,7 @@ public function testCollectImpersonatedToken()
108114 $ tokenStorage ->setToken (new UsernamePasswordToken ('hhamon ' , 'P4$$w0rD ' , 'provider ' , $ userRoles ));
109115
110116 $ collector = new SecurityDataCollector ($ tokenStorage , $ this ->getRoleHierarchy ());
111- $ collector ->collect ($ this -> getRequest (), $ this -> getResponse ());
117+ $ collector ->collect (new Request (), new Response ());
112118 $ collector ->lateCollect ();
113119
114120 $ this ->assertTrue ($ collector ->isEnabled ());
@@ -122,10 +128,32 @@ public function testCollectImpersonatedToken()
122128 $ this ->assertSame ('hhamon ' , $ collector ->getUser ());
123129 }
124130
131+ public function testCollectSwitchUserToken ()
132+ {
133+ $ adminToken = new UsernamePasswordToken ('yceruto ' , 'P4$$w0rD ' , 'provider ' , ['ROLE_ADMIN ' ]);
134+
135+ $ tokenStorage = new TokenStorage ();
136+ $ tokenStorage ->setToken (new SwitchUserToken ('hhamon ' , 'P4$$w0rD ' , 'provider ' , ['ROLE_USER ' , 'ROLE_PREVIOUS_ADMIN ' ], $ adminToken ));
137+
138+ $ collector = new SecurityDataCollector ($ tokenStorage , $ this ->getRoleHierarchy ());
139+ $ collector ->collect (new Request (), new Response ());
140+ $ collector ->lateCollect ();
141+
142+ $ this ->assertTrue ($ collector ->isEnabled ());
143+ $ this ->assertTrue ($ collector ->isAuthenticated ());
144+ $ this ->assertTrue ($ collector ->isImpersonated ());
145+ $ this ->assertSame ('yceruto ' , $ collector ->getImpersonatorUser ());
146+ $ this ->assertSame (SwitchUserToken::class, $ collector ->getTokenClass ()->getValue ());
147+ $ this ->assertTrue ($ collector ->supportsRoleHierarchy ());
148+ $ this ->assertSame (['ROLE_USER ' , 'ROLE_PREVIOUS_ADMIN ' ], $ collector ->getRoles ()->getValue (true ));
149+ $ this ->assertSame ([], $ collector ->getInheritedRoles ()->getValue (true ));
150+ $ this ->assertSame ('hhamon ' , $ collector ->getUser ());
151+ }
152+
125153 public function testGetFirewall ()
126154 {
127155 $ firewallConfig = new FirewallConfig ('dummy ' , 'security.request_matcher.dummy ' , 'security.user_checker.dummy ' );
128- $ request = $ this -> getRequest ();
156+ $ request = new Request ();
129157
130158 $ firewallMap = $ this
131159 ->getMockBuilder (FirewallMap::class)
@@ -138,7 +166,7 @@ public function testGetFirewall()
138166 ->willReturn ($ firewallConfig );
139167
140168 $ collector = new SecurityDataCollector (null , null , null , null , $ firewallMap , new TraceableFirewallListener ($ firewallMap , new EventDispatcher (), new LogoutUrlGenerator ()));
141- $ collector ->collect ($ request , $ this -> getResponse ());
169+ $ collector ->collect ($ request , new Response ());
142170 $ collector ->lateCollect ();
143171 $ collected = $ collector ->getFirewall ();
144172
@@ -158,8 +186,8 @@ public function testGetFirewall()
158186
159187 public function testGetFirewallReturnsNull ()
160188 {
161- $ request = $ this -> getRequest ();
162- $ response = $ this -> getResponse ();
189+ $ request = new Request ();
190+ $ response = new Response ();
163191
164192 // Don't inject any firewall map
165193 $ collector = new SecurityDataCollector ();
@@ -192,9 +220,9 @@ public function testGetFirewallReturnsNull()
192220 */
193221 public function testGetListeners ()
194222 {
195- $ request = $ this -> getRequest ();
223+ $ request = new Request ();
196224 $ event = new GetResponseEvent ($ this ->getMockBuilder (HttpKernelInterface::class)->getMock (), $ request , HttpKernelInterface::MASTER_REQUEST );
197- $ event ->setResponse ($ response = $ this -> getResponse ());
225+ $ event ->setResponse ($ response = new Response ());
198226 $ listener = $ this ->getMockBuilder (ListenerInterface::class)->getMock ();
199227 $ listener
200228 ->expects ($ this ->once ())
@@ -345,7 +373,7 @@ public function testCollectDecisionLog(string $strategy, array $decisionLog, arr
345373 ->willReturn ($ decisionLog );
346374
347375 $ dataCollector = new SecurityDataCollector (null , null , null , $ accessDecisionManager );
348- $ dataCollector ->collect ($ this -> getRequest (), $ this -> getResponse ());
376+ $ dataCollector ->collect (new Request (), new Response ());
349377
350378 $ this ->assertEquals ($ dataCollector ->getAccessDecisionLog (), $ expectedDecisionLog , 'Wrong value returned by getAccessDecisionLog ' );
351379
@@ -367,7 +395,7 @@ public function provideRoles()
367395 [],
368396 ],
369397 [
370- [new Role ('ROLE_USER ' )],
398+ [new Role ('ROLE_USER ' , false )],
371399 ['ROLE_USER ' ],
372400 [],
373401 ],
@@ -378,7 +406,7 @@ public function provideRoles()
378406 ['ROLE_USER ' , 'ROLE_ALLOWED_TO_SWITCH ' ],
379407 ],
380408 [
381- [new Role ('ROLE_ADMIN ' )],
409+ [new Role ('ROLE_ADMIN ' , false )],
382410 ['ROLE_ADMIN ' ],
383411 ['ROLE_USER ' , 'ROLE_ALLOWED_TO_SWITCH ' ],
384412 ],
@@ -397,20 +425,4 @@ private function getRoleHierarchy()
397425 'ROLE_OPERATOR ' => ['ROLE_USER ' ],
398426 ]);
399427 }
400-
401- private function getRequest ()
402- {
403- return $ this
404- ->getMockBuilder ('Symfony\Component\HttpFoundation\Request ' )
405- ->disableOriginalConstructor ()
406- ->getMock ();
407- }
408-
409- private function getResponse ()
410- {
411- return $ this
412- ->getMockBuilder ('Symfony\Component\HttpFoundation\Response ' )
413- ->disableOriginalConstructor ()
414- ->getMock ();
415- }
416428}
0 commit comments