Skip to content

Commit c8c3297

Browse files
author
Patrick Elshof
committed
Add and modify tests for custom RememberMeDetails support
1 parent 5dc714d commit c8c3297

File tree

3 files changed

+72
-2
lines changed

3 files changed

+72
-2
lines changed

src/Symfony/Component/Security/Http/Tests/Authenticator/RememberMeAuthenticatorTest.php

Lines changed: 48 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -31,7 +31,11 @@ class RememberMeAuthenticatorTest extends TestCase
3131

3232
protected function setUp(): void
3333
{
34-
$this->rememberMeHandler = $this->createMock(RememberMeHandlerInterface::class);
34+
$this->rememberMeHandler = $this->getMockBuilder(RememberMeHandlerInterface::class)
35+
->onlyMethods(get_class_methods(RememberMeHandlerInterface::class))
36+
->addMethods(['getRememberMeDetails', 'getUserIdentifierForCookie'])
37+
->getMock();
38+
3539
$this->tokenStorage = new TokenStorage();
3640
$this->authenticator = new RememberMeAuthenticator($this->rememberMeHandler, 's3cr3t', $this->tokenStorage, '_remember_me_cookie');
3741
}
@@ -67,6 +71,15 @@ public function testAuthenticate()
6771
{
6872
$rememberMeDetails = new RememberMeDetails(InMemoryUser::class, 'wouter', 1, 'secret');
6973
$request = Request::create('/', 'GET', [], ['_remember_me_cookie' => $rememberMeDetails->toString()]);
74+
75+
$this->rememberMeHandler->expects($this->once())->method('getRememberMeDetails')
76+
->with($rememberMeDetails->toString())
77+
->willReturn($rememberMeDetails);
78+
79+
$this->rememberMeHandler->expects($this->once())->method('getUserIdentifierForCookie')
80+
->with($rememberMeDetails)
81+
->willReturn('wouter');
82+
7083
$passport = $this->authenticator->authenticate($request);
7184

7285
$this->rememberMeHandler->expects($this->once())->method('consumeRememberMeCookie')->with($this->callback(function ($arg) use ($rememberMeDetails) {
@@ -86,7 +99,40 @@ public function testAuthenticateWithoutOldToken()
8699
{
87100
$this->expectException(AuthenticationException::class);
88101

89-
$request = Request::create('/', 'GET', [], ['_remember_me_cookie' => base64_encode('foo:bar')]);
102+
$encodedData = base64_encode('foo:bar');
103+
$request = Request::create('/', 'GET', [], ['_remember_me_cookie' => $encodedData]);
104+
105+
$this->rememberMeHandler->expects($this->once())->method('getRememberMeDetails')->with($encodedData)->willThrowException(new AuthenticationException());
90106
$this->authenticator->authenticate($request);
91107
}
108+
109+
public function testAuthenticateDeprecatedCodePath()
110+
{
111+
$mock = $this->getMockBuilder(RememberMeHandlerInterface::class)
112+
->getMock();
113+
114+
$rememberMeDetails = new RememberMeDetails(InMemoryUser::class, 'wouter', 1, 'secret');
115+
$request = Request::create('/', 'GET', [], ['_remember_me_cookie' => $rememberMeDetails->toString()]);
116+
117+
$authenticator = new RememberMeAuthenticator($mock, 's3cr3t', $this->tokenStorage, '_remember_me_cookie');
118+
$passport = $authenticator->authenticate($request);
119+
120+
$mock->expects($this->once())->method('consumeRememberMeCookie')->with($this->callback(function ($arg) use ($rememberMeDetails) {
121+
return $rememberMeDetails == $arg;
122+
}));
123+
$passport->getUser(); // trigger the user loader
124+
}
125+
126+
public function testAuthenticateWithoutOldTokenDeprecatedCodePath()
127+
{
128+
$mock = $this->getMockBuilder(RememberMeHandlerInterface::class)
129+
->getMock();
130+
131+
$this->expectException(AuthenticationException::class);
132+
133+
$request = Request::create('/', 'GET', [], ['_remember_me_cookie' => base64_encode('foo:bar')]);
134+
135+
$authenticator = new RememberMeAuthenticator($mock, 's3cr3t', $this->tokenStorage, '_remember_me_cookie');
136+
$authenticator->authenticate($request);
137+
}
92138
}

src/Symfony/Component/Security/Http/Tests/RememberMe/PersistentRememberMeHandlerTest.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -130,4 +130,16 @@ public function testConsumeRememberMeCookieExpired()
130130

131131
$this->handler->consumeRememberMeCookie(new RememberMeDetails(InMemoryUser::class, 'wouter', 360, 'series1:tokenvalue'));
132132
}
133+
134+
public function testGetUserIdentifierForCookie()
135+
{
136+
$this->assertEquals('wouter', $this->handler->getUserIdentifierForCookie(new RememberMeDetails(InMemoryUser::class, 'wouter', 360, 'signature')));
137+
}
138+
139+
public function testGetRememberMeDetails()
140+
{
141+
$details = new RememberMeDetails(InMemoryUser::class, 'wouter', 360, 'signature');
142+
143+
$this->assertEquals($details, $this->handler->getRememberMeDetails($details->toString()));
144+
}
133145
}

src/Symfony/Component/Security/Http/Tests/RememberMe/SignatureRememberMeHandlerTest.php

Lines changed: 12 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -122,4 +122,16 @@ public function testConsumeRememberMeCookieExpired()
122122

123123
$this->handler->consumeRememberMeCookie(new RememberMeDetails(InMemoryUser::class, 'wouter', 360, 'signature'));
124124
}
125+
126+
public function testGetUserIdentifierForCookie()
127+
{
128+
$this->assertEquals('wouter', $this->handler->getUserIdentifierForCookie(new RememberMeDetails(InMemoryUser::class, 'wouter', 360, 'signature')));
129+
}
130+
131+
public function testGetRememberMeDetails()
132+
{
133+
$details = new RememberMeDetails(InMemoryUser::class, 'wouter', 360, 'signature');
134+
135+
$this->assertEquals($details, $this->handler->getRememberMeDetails($details->toString()));
136+
}
125137
}

0 commit comments

Comments
 (0)