Spaces:
No application file
No application file
| declare(strict_types=1); | |
| namespace Mautic\UserBundle\Tests\Model\UserToken; | |
| use Mautic\CoreBundle\Helper\RandomHelper\RandomHelperInterface; | |
| use Mautic\UserBundle\Entity\User; | |
| use Mautic\UserBundle\Entity\UserToken; | |
| use Mautic\UserBundle\Entity\UserTokenRepositoryInterface; | |
| use Mautic\UserBundle\Model\UserToken\UserTokenService; | |
| use PHPUnit\Framework\MockObject\MockObject; | |
| class UserTokenServiceTest extends \PHPUnit\Framework\TestCase | |
| { | |
| /** | |
| * @var MockObject|RandomHelperInterface | |
| */ | |
| private MockObject $randomHelperMock; | |
| /** | |
| * @var MockObject|UserTokenRepositoryInterface | |
| */ | |
| private MockObject $userTokenRepositoryMock; | |
| protected function setUp(): void | |
| { | |
| $this->randomHelperMock = $this->getMockBuilder(RandomHelperInterface::class)->getMock(); | |
| $this->userTokenRepositoryMock = $this->getMockBuilder(UserTokenRepositoryInterface::class)->getMock(); | |
| } | |
| /** | |
| * Tests second attempt for generating secret if not unique secret was generated first time. | |
| */ | |
| public function testGenerateSecret(): void | |
| { | |
| $secretLength = 6; | |
| $randomSecret = 'secret'; | |
| $token = new UserToken(); | |
| $token->setAuthorizator('test-secret'); | |
| $this->randomHelperMock->expects($this->exactly(2)) | |
| ->method('generate') | |
| ->with($secretLength) | |
| ->willReturn($randomSecret); | |
| $this->userTokenRepositoryMock->expects($this->exactly(2)) | |
| ->method('isSecretUnique') | |
| ->with($randomSecret) | |
| ->willReturnOnConsecutiveCalls( | |
| false, // Test second attempt to get unique secret | |
| true // Ok now | |
| ); | |
| $userTokenService = $this->getUserTokenService(); | |
| $secretToken = $userTokenService->generateSecret($token, $secretLength); | |
| $this->assertSame($randomSecret, $secretToken->getSecret()); | |
| $this->assertTrue($secretToken->isOneTimeOnly()); | |
| $this->assertNull($secretToken->getExpiration()); | |
| } | |
| public function testVerify(): void | |
| { | |
| $token = new UserToken(); | |
| $user = new User(); | |
| $authorizator = 'authorizator'; | |
| $token->setUser($user) | |
| ->setOneTimeOnly(true) | |
| ->setExpiration(null) | |
| ->setAuthorizator($authorizator); | |
| $this->userTokenRepositoryMock->expects($this->once()) | |
| ->method('verify') | |
| ->with($token) | |
| ->willReturn(true); | |
| $this->assertTrue($this->getUserTokenService()->verify($token)); | |
| } | |
| private function getUserTokenService(): UserTokenService | |
| { | |
| return new UserTokenService( | |
| $this->randomHelperMock, | |
| $this->userTokenRepositoryMock | |
| ); | |
| } | |
| } | |