Skip to content

Commit 48c703c

Browse files
author
Florian Kraemer
committed
CC-26461 Backporting tests
1 parent 894f396 commit 48c703c

File tree

2 files changed

+145
-3
lines changed

2 files changed

+145
-3
lines changed

tests/SprykerTest/Zed/UserPasswordReset/Business/UserPasswordResetFacadeTest.php

Lines changed: 124 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -50,6 +50,27 @@ class UserPasswordResetFacadeTest extends Unit
5050
*/
5151
protected const USER_STATUS_ACTIVE = 'active';
5252

53+
/**
54+
* @uses \Orm\Zed\UserPasswordReset\Persistence\Map\SpyResetPasswordTableMap::COL_STATUS_EXPIRED
55+
*
56+
* @var string
57+
*/
58+
protected const PASSWORD_RESET_STATUS_EXPIRED = 'expired';
59+
60+
/**
61+
* @uses \Orm\Zed\UserPasswordReset\Persistence\Map\SpyResetPasswordTableMap::COL_STATUS_ACTIVE
62+
*
63+
* @var string
64+
*/
65+
protected const PASSWORD_RESET_STATUS_ACTIVE = 'active';
66+
67+
/**
68+
* @uses \Orm\Zed\UserPasswordReset\Persistence\Map\SpyResetPasswordTableMap::COL_STATUS_USED
69+
*
70+
* @var string
71+
*/
72+
protected const PASSWORD_RESET_STATUS_USED = 'used';
73+
5374
/**
5475
* @var \SprykerTest\Zed\UserPasswordReset\UserPasswordResetBusinessTester
5576
*/
@@ -129,7 +150,7 @@ public function testResetPasswordResetsPasswordAndResetPasswordCode(): void
129150
/**
130151
* @return void
131152
*/
132-
public function testIsValidPasswordResetTokenReturnsTrueFotValidToken(): void
153+
public function testIsValidPasswordResetTokenReturnsTrueForValidToken(): void
133154
{
134155
// Arrange
135156
$userTransfer = $this->tester->haveUser([
@@ -151,7 +172,7 @@ public function testIsValidPasswordResetTokenReturnsTrueFotValidToken(): void
151172
/**
152173
* @return void
153174
*/
154-
public function testIsValidPasswordResetTokenReturnsFalseFotInvalidToken(): void
175+
public function testIsValidPasswordResetTokenReturnsFalseForInvalidToken(): void
155176
{
156177
// Arrange
157178
$userTransfer = $this->tester->haveUser([
@@ -199,4 +220,105 @@ public function testRequestPasswordResetReturnsFalseForNonActiveUser(): void
199220
// Assert
200221
$this->assertFalse($isPasswordResetSuccessfully, 'It is not possible to request restore password for non active user');
201222
}
223+
224+
/**
225+
* @return void
226+
*/
227+
public function testRequestPasswordResetReturnsFalseForUsedToken(): void
228+
{
229+
// Arrange
230+
$userTransfer = $this->tester->haveUser([
231+
UserTransfer::USERNAME => static::TEST_MAIL,
232+
]);
233+
234+
$this->tester->getUserPasswordReset()->requestPasswordReset(
235+
(new UserPasswordResetRequestTransfer())
236+
->setEmail($userTransfer->getUsername()),
237+
);
238+
239+
$resetPasswordTransfer = $this->tester->findResetPasswordTransferByIdUser($userTransfer->getIdUser())
240+
->setCreatedAt((new DateTime('-1 minute'))->format('Y-m-d H:i:s'))
241+
->setStatus(static::PASSWORD_RESET_STATUS_USED);
242+
243+
$this->tester->updateResetPasswordByIdAuthResetPassword(
244+
$resetPasswordTransfer->getIdResetPassword(),
245+
$resetPasswordTransfer,
246+
);
247+
248+
// Act
249+
$isValidUsedPasswordResetToken = $this->tester->getUserPasswordReset()->isValidPasswordResetToken($resetPasswordTransfer->getCode());
250+
251+
// Assert
252+
$this->assertFalse($isValidUsedPasswordResetToken);
253+
}
254+
255+
/**
256+
* @return void
257+
*/
258+
public function testRequestPasswordResetReturnsFalseForExpiredToken(): void
259+
{
260+
// Arrange
261+
$userTransfer = $this->tester->haveUser([
262+
UserTransfer::USERNAME => static::TEST_MAIL,
263+
]);
264+
265+
$this->tester->getUserPasswordReset()->requestPasswordReset(
266+
(new UserPasswordResetRequestTransfer())
267+
->setEmail($userTransfer->getUsername()),
268+
);
269+
270+
$resetPasswordTransfer = $this->tester->findResetPasswordTransferByIdUser($userTransfer->getIdUser())
271+
->setCreatedAt((new DateTime('-1 minute'))->format('Y-m-d H:i:s'))
272+
->setStatus(static::PASSWORD_RESET_STATUS_EXPIRED);
273+
274+
$this->tester->updateResetPasswordByIdAuthResetPassword(
275+
$resetPasswordTransfer->getIdResetPassword(),
276+
$resetPasswordTransfer,
277+
);
278+
279+
// Act
280+
$isValidUsedPasswordResetToken = $this->tester->getUserPasswordReset()->isValidPasswordResetToken($resetPasswordTransfer->getCode());
281+
282+
// Assert
283+
$this->assertFalse($isValidUsedPasswordResetToken);
284+
}
285+
286+
/**
287+
* @return void
288+
*/
289+
public function testRequestPasswordResetWillInvalidatePreviousResetsWhenANewResetIsRequested(): void
290+
{
291+
// Arrange
292+
$userTransfer = $this->tester->haveUser([
293+
UserTransfer::USERNAME => static::TEST_MAIL,
294+
]);
295+
296+
$this->tester->getUserPasswordReset()->requestPasswordReset(
297+
(new UserPasswordResetRequestTransfer())
298+
->setEmail($userTransfer->getUsername()),
299+
);
300+
301+
$resetPasswordTransfer = $this->tester->findResetPasswordTransferByIdUser($userTransfer->getIdUser())
302+
->setCreatedAt((new DateTime('-2 minutes'))->format('Y-m-d H:i:s'))
303+
->setStatus(static::PASSWORD_RESET_STATUS_ACTIVE);
304+
305+
$this->tester->updateResetPasswordByIdAuthResetPassword(
306+
$resetPasswordTransfer->getIdResetPassword(),
307+
$resetPasswordTransfer,
308+
);
309+
310+
// Act
311+
$isPasswordResetRequestSuccessfully = $this->tester->getUserPasswordReset()->requestPasswordReset(
312+
(new UserPasswordResetRequestTransfer())
313+
->setEmail($userTransfer->getUsername()),
314+
);
315+
316+
$invalidatedResetPasswordTransfer = $this->tester->findResetPasswordTransferByIdAuthResetPassword(
317+
$resetPasswordTransfer->getIdResetPassword(),
318+
);
319+
320+
// Assert
321+
$this->assertTrue($isPasswordResetRequestSuccessfully, 'It is not possible to request restore password for non active user');
322+
$this->assertEquals(static::PASSWORD_RESET_STATUS_EXPIRED, $invalidatedResetPasswordTransfer->getStatus());
323+
}
202324
}

tests/SprykerTest/Zed/UserPasswordReset/_support/UserPasswordResetBusinessTester.php

Lines changed: 21 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -26,7 +26,7 @@
2626
* @method void comment($description)
2727
* @method void pause()
2828
*
29-
* @SuppressWarnings(PHPMD)
29+
* @SuppressWarnings(\PHPMD)
3030
*/
3131
class UserPasswordResetBusinessTester extends Actor
3232
{
@@ -40,6 +40,26 @@ public function getUserPasswordReset(): UserPasswordResetFacadeInterface
4040
return $this->getLocator()->userPasswordReset()->facade();
4141
}
4242

43+
/**
44+
* @param int $idAuthResetPassword
45+
*
46+
* @return \Generated\Shared\Transfer\ResetPasswordTransfer|null
47+
*/
48+
public function findResetPasswordTransferByIdAuthResetPassword(int $idAuthResetPassword): ?ResetPasswordTransfer
49+
{
50+
$resetPasswordEntity = $this->createResetPasswordPropelQuery()
51+
->filterByIdAuthResetPassword($idAuthResetPassword)
52+
->findOne();
53+
54+
if (!$resetPasswordEntity) {
55+
return null;
56+
}
57+
58+
return (new ResetPasswordTransfer())->fromArray($resetPasswordEntity->toArray(), true)
59+
->setIdResetPassword($resetPasswordEntity->getIdAuthResetPassword())
60+
->setFkUserId($resetPasswordEntity->getFkUser());
61+
}
62+
4363
/**
4464
* @param int $idUser
4565
*

0 commit comments

Comments
 (0)