Skip to content

Commit 9087b33

Browse files
authored
Merge branch 'master' into ci
2 parents 216e1b1 + a03d8ea commit 9087b33

File tree

5 files changed

+43
-55
lines changed

5 files changed

+43
-55
lines changed

.github/workflows/ci.yml

Lines changed: 3 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -14,6 +14,9 @@ jobs:
1414
- name: Checkout
1515
uses: actions/checkout@v2.0.0
1616

17+
- name: Validate Composer
18+
run: composer validate --no-check-lock
19+
1720
- name: Install dependencies
1821
run: composer install --prefer-dist --no-progress --no-suggest
1922

composer.json

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,4 +1,6 @@
11
{
2+
"name": "symfonycasts/reset-password-bundle",
3+
"description": "Symfony bundle that adds password reset functionality.",
24
"type": "symfony-bundle",
35
"license": "MIT",
46
"minimum-stability": "dev",

src/ResetPasswordHelper.php

Lines changed: 3 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -29,16 +29,8 @@ class ResetPasswordHelper implements ResetPasswordHelperInterface
2929
*/
3030
private const SELECTOR_LENGTH = 20;
3131

32-
/**
33-
* @var ResetPasswordTokenGenerator
34-
*/
3532
private $tokenGenerator;
36-
3733
private $resetPasswordCleaner;
38-
39-
/**
40-
* @var ResetPasswordRequestRepositoryInterface
41-
*/
4234
private $repository;
4335

4436
/**
@@ -61,7 +53,7 @@ public function __construct(ResetPasswordTokenGenerator $generator, ResetPasswor
6153
}
6254

6355
/**
64-
* Generates a new password reset token, persists it & returns the token that can be emailed to the user.
56+
* {@inheritdoc}
6557
*
6658
* Some of the cryptographic strategies were taken from
6759
* https://paragonie.com/blog/2017/02/split-tokens-token-based-authentication-protocols-without-side-channels
@@ -97,9 +89,7 @@ public function generateResetToken(object $user): ResetPasswordToken
9789
}
9890

9991
/**
100-
* Validate a PasswordResetRequest and fetch user from persistence.
101-
*
102-
* @param string $fullToken selector + non-hashed verifier token
92+
* {@inheritdoc}
10393
*
10494
* @throws ExpiredResetPasswordTokenException
10595
* @throws InvalidResetPasswordTokenException
@@ -138,9 +128,7 @@ public function validateTokenAndFetchUser(string $fullToken): object
138128
}
139129

140130
/**
141-
* Remove a single PasswordResetRequest object from persistence.
142-
*
143-
* @param string $fullToken selector + non-hashed verifier token
131+
* {@inheritdoc}
144132
*
145133
* @throws InvalidResetPasswordTokenException
146134
*/

tests/UnitTests/Generator/ResetPasswordTokenGeneratorTest.php

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
namespace SymfonyCasts\Bundle\ResetPassword\Tests\UnitTests\Generator;
1111

12+
use PHPUnit\Framework\MockObject\MockObject;
1213
use PHPUnit\Framework\TestCase;
1314
use SymfonyCasts\Bundle\ResetPassword\Generator\ResetPasswordRandomGenerator;
1415
use SymfonyCasts\Bundle\ResetPassword\Generator\ResetPasswordTokenGenerator;
@@ -20,12 +21,12 @@
2021
class ResetPasswordTokenGeneratorTest extends TestCase
2122
{
2223
/**
23-
* @var \PHPUnit\Framework\MockObject\MockObject|ResetPasswordRandomGenerator
24+
* @var MockObject|ResetPasswordRandomGenerator
2425
*/
2526
private $mockRandomGenerator;
2627

2728
/**
28-
* @var \PHPUnit\Framework\MockObject\MockObject|\DateTimeImmutable
29+
* @var MockObject|\DateTimeImmutable
2930
*/
3031
private $mockExpiresAt;
3132

@@ -109,9 +110,6 @@ public function testHashedTokenIsCreatedUsingOptionVerifierParam(): void
109110

110111
private function getTokenGenerator(): ResetPasswordTokenGenerator
111112
{
112-
return new ResetPasswordTokenGenerator(
113-
'key',
114-
$this->mockRandomGenerator
115-
);
113+
return new ResetPasswordTokenGenerator('key', $this->mockRandomGenerator);
116114
}
117115
}

tests/UnitTests/ResetPasswordHelperTest.php

Lines changed: 31 additions & 34 deletions
Original file line numberDiff line numberDiff line change
@@ -9,6 +9,7 @@
99

1010
namespace SymfonyCasts\Bundle\ResetPassword\Tests\UnitTests;
1111

12+
use PHPUnit\Framework\MockObject\MockObject;
1213
use PHPUnit\Framework\TestCase;
1314
use SymfonyCasts\Bundle\ResetPassword\Exception\ExpiredResetPasswordTokenException;
1415
use SymfonyCasts\Bundle\ResetPassword\Exception\InvalidResetPasswordTokenException;
@@ -27,22 +28,22 @@
2728
class ResetPasswordHelperTest extends TestCase
2829
{
2930
/**
30-
* @var \PHPUnit\Framework\MockObject\MockObject|ResetPasswordRequestRepositoryInterface
31+
* @var MockObject|ResetPasswordRequestRepositoryInterface
3132
*/
3233
private $mockRepo;
3334

3435
/**
35-
* @var \PHPUnit\Framework\MockObject\MockObject|ResetPasswordTokenGenerator
36+
* @var MockObject|ResetPasswordTokenGenerator
3637
*/
3738
private $mockTokenGenerator;
3839

3940
/**
40-
* @var \PHPUnit\Framework\MockObject\MockObject|ResetPasswordRequestInterface
41+
* @var MockObject|ResetPasswordRequestInterface
4142
*/
4243
private $mockResetRequest;
4344

4445
/**
45-
* @var \PHPUnit\Framework\MockObject\MockObject|ResetPasswordCleaner
46+
* @var MockObject|ResetPasswordCleaner
4647
*/
4748
private $mockCleaner;
4849

@@ -51,11 +52,6 @@ class ResetPasswordHelperTest extends TestCase
5152
*/
5253
private $randomToken;
5354

54-
/**
55-
* @var object
56-
*/
57-
private $mockUser;
58-
5955
/**
6056
* {@inheritdoc}
6157
*/
@@ -66,18 +62,6 @@ protected function setUp(): void
6662
$this->mockCleaner = $this->createMock(ResetPasswordCleaner::class);
6763
$this->mockResetRequest = $this->createMock(ResetPasswordRequestInterface::class);
6864
$this->randomToken = \bin2hex(\random_bytes(20));
69-
$this->mockUser = new class() {};
70-
}
71-
72-
private function getPasswordResetHelper(): ResetPasswordHelper
73-
{
74-
return new ResetPasswordHelper(
75-
$this->mockTokenGenerator,
76-
$this->mockCleaner,
77-
$this->mockRepo,
78-
99999999,
79-
99999999
80-
);
8165
}
8266

8367
/**
@@ -98,12 +82,13 @@ public function testHasUserThrottlingReturnsFalseWithNoLastRequestDate(): void
9882
;
9983

10084
$this->mockRepo
85+
->expects($this->once())
10186
->method('createResetPasswordRequest')
10287
->willReturn(new ResetPasswordTestFixtureRequest())
10388
;
10489

10590
$helper = $this->getPasswordResetHelper();
106-
$helper->generateResetToken($this->mockUser);
91+
$helper->generateResetToken(new \stdClass());
10792
}
10893

10994
/**
@@ -131,12 +116,13 @@ public function testHasUserThrottlingReturnsFalseIfNotBeforeThrottleTime(): void
131116
;
132117

133118
$this->mockRepo
119+
->expects($this->once())
134120
->method('createResetPasswordRequest')
135121
->willReturn(new ResetPasswordTestFixtureRequest())
136122
;
137123

138124
$helper = $this->getPasswordResetHelper();
139-
$helper->generateResetToken($this->mockUser);
125+
$helper->generateResetToken(new \stdClass());
140126
}
141127

142128
public function testExceptionThrownIfRequestBeforeThrottleLimit(): void
@@ -157,7 +143,7 @@ public function testExceptionThrownIfRequestBeforeThrottleLimit(): void
157143
$this->expectException(TooManyPasswordRequestsException::class);
158144

159145
$helper = $this->getPasswordResetHelper();
160-
$helper->generateResetToken($this->mockUser);
146+
$helper->generateResetToken(new \stdClass());
161147
}
162148

163149
public function testRemoveResetRequestThrowsExceptionWithEmptyToken(): void
@@ -184,6 +170,7 @@ public function testRemoveResetRequestRetrievesTokenFromRepository(): void
184170
public function testRemoveResetRequestCallsRepositoryToRemoveResetRequestObject(): void
185171
{
186172
$this->mockRepo
173+
->expects($this->once())
187174
->method('findResetPasswordRequest')
188175
->willReturn($this->mockResetRequest)
189176
;
@@ -252,7 +239,7 @@ public function testValidateTokenFetchesUserIfTokenNotExpired(): void
252239
$this->mockResetRequest
253240
->expects($this->once())
254241
->method('getUser')
255-
->willReturn($this->mockUser)
242+
->willReturn(new \stdClass())
256243
;
257244

258245
$this->mockResetRequest
@@ -283,7 +270,7 @@ public function testValidateTokenThrowsExceptionIfTokenAndVerifierDoNotMatch():
283270
$this->mockResetRequest
284271
->expects($this->once())
285272
->method('getUser')
286-
->willReturn($this->mockUser)
273+
->willReturn(new \stdClass())
287274
;
288275

289276
$this->mockResetRequest
@@ -306,26 +293,36 @@ public function testValidateTokenThrowsExceptionIfTokenAndVerifierDoNotMatch():
306293

307294
public function testGenerateResetTokenCallsGarbageCollector(): void
308295
{
309-
$this->setMockCleanerExpectations();
296+
$this->mockCleaner
297+
->expects($this->once())
298+
->method('handleGarbageCollection')
299+
;
310300

311301
$helper = $this->getPasswordResetHelper();
312-
$helper->generateResetToken($this->mockUser);
302+
$helper->generateResetToken(new \stdClass());
313303
}
314304

315305
public function testGarbageCollectorCalledDuringValidation(): void
316306
{
317-
$this->setMockCleanerExpectations();
307+
$this->mockCleaner
308+
->expects($this->once())
309+
->method('handleGarbageCollection')
310+
;
311+
318312
$this->expectException(InvalidResetPasswordTokenException::class);
319313

320314
$helper = $this->getPasswordResetHelper();
321315
$helper->validateTokenAndFetchUser($this->randomToken);
322316
}
323317

324-
private function setMockCleanerExpectations(): void
318+
private function getPasswordResetHelper(): ResetPasswordHelper
325319
{
326-
$this->mockCleaner
327-
->expects($this->once())
328-
->method('handleGarbageCollection')
329-
;
320+
return new ResetPasswordHelper(
321+
$this->mockTokenGenerator,
322+
$this->mockCleaner,
323+
$this->mockRepo,
324+
99999999,
325+
99999999
326+
);
330327
}
331328
}

0 commit comments

Comments
 (0)