. */ namespace SP\Tests\Services\Crypt; use Defuse\Crypto\Exception\CryptoException; use DI\DependencyException; use DI\NotFoundException; use PHPUnit\Framework\TestCase; use SP\Core\Context\ContextException; use SP\Core\Context\ContextInterface; use SP\Repositories\NoSuchItemException; use SP\Services\Crypt\TemporaryMasterPassService; use SP\Services\ServiceException; use function SP\Tests\setupContext; /** * Class TemporaryMasterPassServiceTest * * @package SP\Tests\Services\Crypt */ class TemporaryMasterPassServiceTest extends TestCase { /** * @var ContextInterface */ private $context; /** * @var TemporaryMasterPassService */ private $service; /** * @throws NotFoundException * @throws ContextException * @throws DependencyException */ public function setUp(): void { $dic = setupContext(); // Inicializar el repositorio $this->service = $dic->get(TemporaryMasterPassService::class); $this->context = $dic->get(ContextInterface::class); } /** * @throws ServiceException */ public function testCreate() { $key = $this->service->create(); $this->assertNotEmpty($key); $this->assertEquals($this->context->getTrasientKey('_tempmasterpass'), $key); return $key; } /** * @depends testCreate * * @param $key * * @throws CryptoException * @throws NoSuchItemException * @throws ServiceException */ public function testGetUsingKey($key) { $this->assertEquals('12345678900', $this->service->getUsingKey($key)); $this->expectException(CryptoException::class); $this->service->getUsingKey('test123'); } /** * @depends testCreate * * @param $key * * @throws ServiceException */ public function testCheckTempMasterPass($key) { $this->assertTrue($this->service->checkTempMasterPass($key)); for ($i = 1; $i <= 50; $i++) { $this->assertFalse($this->service->checkTempMasterPass('test123')); } // The 50's attempt should fails $this->assertFalse($this->service->checkTempMasterPass($key)); } /** * @throws ServiceException */ public function testExpiredKey() { $key = $this->service->create(10); print 'Sleeping for 12 seconds'; sleep(12); $this->assertFalse($this->service->checkTempMasterPass($key)); } }