1111
1212namespace FOS \UserBundle \Tests \Security ;
1313
14+ use FOS \UserBundle \Model \UserInterface ;
1415use FOS \UserBundle \Security \LoginManager ;
1516use PHPUnit \Framework \TestCase ;
17+ use Symfony \Component \HttpFoundation \Request ;
18+ use Symfony \Component \HttpFoundation \RequestStack ;
1619use Symfony \Component \HttpFoundation \Response ;
20+ use Symfony \Component \Security \Core \Authentication \Token \Storage \TokenStorageInterface ;
21+ use Symfony \Component \Security \Core \Authentication \Token \TokenInterface ;
22+ use Symfony \Component \Security \Http \RememberMe \RememberMeHandlerInterface ;
23+ use Symfony \Component \Security \Http \RememberMe \RememberMeServicesInterface ;
24+ use Symfony \Component \Security \Http \Session \SessionAuthenticationStrategyInterface ;
1725
1826class LoginManagerTest extends TestCase
1927{
@@ -23,66 +31,79 @@ public function testLogInUserWithRequestStack()
2331 $ loginManager ->logInUser ('main ' , $ this ->mockUser ());
2432 }
2533
26- public function testLogInUserWithRememberMeAndRequestStack ()
34+ public function testLogInUserWithRememberMeHandler ()
2735 {
28- $ response = $ this ->getMockBuilder ('Symfony\Component\HttpFoundation\Response ' )->getMock ();
36+ if (!interface_exists (RememberMeHandlerInterface::class)) {
37+ $ this ->markTestSkipped ('This test requires Symfony 5.3+. ' );
38+ }
2939
30- $ loginManager = $ this ->createLoginManager ('main ' , $ response );
31- $ loginManager ->logInUser ('main ' , $ this ->mockUser (), $ response );
40+ $ response = new Response ();
41+ $ user = $ this ->mockUser ();
42+
43+ $ rememberMeHandler = $ this ->createMock (RememberMeHandlerInterface::class);
44+ $ rememberMeHandler ->expects ($ this ->once ())
45+ ->method ('createRememberMeCookie ' )
46+ ->with ($ user );
47+
48+ $ loginManager = $ this ->createLoginManager ('main ' , $ rememberMeHandler );
49+ $ loginManager ->logInUser ('main ' , $ user , $ response );
3250 }
3351
3452 /**
35- * @param string $firewallName
36- *
37- * @return LoginManager
53+ * @group legacy
3854 */
39- private function createLoginManager ( $ firewallName , Response $ response = null )
55+ public function testLogInUserWithRememberMeService ( )
4056 {
41- $ tokenStorage = $ this ->getMockBuilder ('Symfony\Component\Security\Core\Authentication\Token\Storage\TokenStorageInterface ' )->getMock ();
57+ if (!interface_exists (RememberMeServicesInterface::class)) {
58+ $ this ->markTestSkipped ('This test does not support Symfony 6+. ' );
59+ }
60+
61+ $ response = new Response ();
62+
63+ $ rememberMeService = $ this ->createMock (RememberMeServicesInterface::class);
64+ $ rememberMeService
65+ ->expects ($ this ->once ())
66+ ->method ('loginSuccess ' )
67+ ->with ($ this ->isInstanceOf (Request::class), $ response , $ this ->isInstanceOf (TokenInterface::class));
68+
69+ $ loginManager = $ this ->createLoginManager ('main ' , $ rememberMeService );
70+ $ loginManager ->logInUser ('main ' , $ this ->mockUser (), $ response );
71+ }
4272
73+ /**
74+ * @param RememberMeHandlerInterface|RememberMeServicesInterface|null $rememberMeHandler
75+ */
76+ private function createLoginManager (string $ firewallName , $ rememberMeHandler = null ): LoginManager
77+ {
78+ $ tokenStorage = $ this ->getMockBuilder (TokenStorageInterface::class)->getMock ();
4379 $ tokenStorage
4480 ->expects ($ this ->once ())
4581 ->method ('setToken ' )
46- ->with ($ this ->isInstanceOf (' Symfony\Component\Security\Core\Authentication\Token\ TokenInterface' ));
82+ ->with ($ this ->isInstanceOf (TokenInterface::class ));
4783
4884 $ userChecker = $ this ->getMockBuilder ('Symfony\Component\Security\Core\User\UserCheckerInterface ' )->getMock ();
4985 $ userChecker
5086 ->expects ($ this ->once ())
5187 ->method ('checkPreAuth ' )
52- ->with ($ this ->isInstanceOf (' FOS\UserBundle\Model\ UserInterface' ));
88+ ->with ($ this ->isInstanceOf (UserInterface::class ));
5389
54- $ request = $ this -> getMockBuilder ( ' Symfony\Component\HttpFoundation\ Request' )-> getMock ();
90+ $ request = new Request ();
5591
56- $ sessionStrategy = $ this ->getMockBuilder (' Symfony\Component\Security\Http\Session\ SessionAuthenticationStrategyInterface' )->getMock ();
92+ $ sessionStrategy = $ this ->getMockBuilder (SessionAuthenticationStrategyInterface::class )->getMock ();
5793 $ sessionStrategy
5894 ->expects ($ this ->once ())
5995 ->method ('onAuthentication ' )
60- ->with ($ request , $ this ->isInstanceOf (' Symfony\Component\Security\Core\Authentication\Token\ TokenInterface' ));
96+ ->with ($ request , $ this ->isInstanceOf (TokenInterface::class ));
6197
62- $ requestStack = $ this ->getMockBuilder ('Symfony\Component\HttpFoundation\RequestStack ' )->getMock ();
63- $ requestStack
64- ->expects ($ this ->once ())
65- ->method ('getCurrentRequest ' )
66- ->will ($ this ->returnValue ($ request ));
67-
68- $ rememberMe = null ;
69- if (null !== $ response ) {
70- $ rememberMe = $ this ->getMockBuilder ('Symfony\Component\Security\Http\RememberMe\RememberMeServicesInterface ' )->getMock ();
71- $ rememberMe
72- ->expects ($ this ->once ())
73- ->method ('loginSuccess ' )
74- ->with ($ request , $ response , $ this ->isInstanceOf ('Symfony\Component\Security\Core\Authentication\Token\TokenInterface ' ));
75- }
98+ $ requestStack = new RequestStack ();
99+ $ requestStack ->push ($ request );
76100
77- return new LoginManager ($ tokenStorage , $ userChecker , $ sessionStrategy , $ requestStack , $ rememberMe );
101+ return new LoginManager ($ tokenStorage , $ userChecker , $ sessionStrategy , $ requestStack , $ rememberMeHandler );
78102 }
79103
80- /**
81- * @return mixed
82- */
83- private function mockUser ()
104+ private function mockUser (): UserInterface
84105 {
85- $ user = $ this ->getMockBuilder (' FOS\UserBundle\Model\ UserInterface' )->getMock ();
106+ $ user = $ this ->getMockBuilder (UserInterface::class )->getMock ();
86107 $ user
87108 ->expects ($ this ->once ())
88109 ->method ('getRoles ' )
0 commit comments