|
12 | 12 | namespace Symfony\Component\Security\Core\Tests\Encoder;
|
13 | 13 |
|
14 | 14 | use PHPUnit\Framework\TestCase;
|
| 15 | +use Symfony\Component\Security\Core\Encoder\EncoderFactoryInterface; |
| 16 | +use Symfony\Component\Security\Core\Encoder\NativePasswordEncoder; |
15 | 17 | use Symfony\Component\Security\Core\Encoder\UserPasswordEncoder;
|
| 18 | +use Symfony\Component\Security\Core\User\User; |
16 | 19 |
|
17 | 20 | class UserPasswordEncoderTest extends TestCase
|
18 | 21 | {
|
@@ -68,4 +71,23 @@ public function testIsPasswordValid()
|
68 | 71 | $isValid = $passwordEncoder->isPasswordValid($userMock, 'plainPassword');
|
69 | 72 | $this->assertTrue($isValid);
|
70 | 73 | }
|
| 74 | + |
| 75 | + public function testNeedsRehash() |
| 76 | + { |
| 77 | + $user = new User('username', null); |
| 78 | + $encoder = new NativePasswordEncoder(4, 20000, 4); |
| 79 | + |
| 80 | + $mockEncoderFactory = $this->getMockBuilder(EncoderFactoryInterface::class)->getMock(); |
| 81 | + $mockEncoderFactory->expects($this->any()) |
| 82 | + ->method('getEncoder') |
| 83 | + ->with($user) |
| 84 | + ->will($this->onConsecutiveCalls($encoder, $encoder, new NativePasswordEncoder(5, 20000, 5), $encoder)); |
| 85 | + |
| 86 | + $passwordEncoder = new UserPasswordEncoder($mockEncoderFactory); |
| 87 | + |
| 88 | + $hash = $passwordEncoder->encodePassword($user, 'foo', 'salt'); |
| 89 | + $this->assertFalse($passwordEncoder->needsRehash($user, $hash)); |
| 90 | + $this->assertTrue($passwordEncoder->needsRehash($user, $hash)); |
| 91 | + $this->assertFalse($passwordEncoder->needsRehash($user, $hash)); |
| 92 | + } |
71 | 93 | }
|
0 commit comments