ldc-arcadia-api/tests/Unit/Infra/Adapters/Services/ClientCredentialGeneratorImplTest.php

55 lines
1.8 KiB
PHP

<?php
declare(strict_types=1);
namespace Tests\Unit\Infra\Adapters\Services;
use Application\Security\Models\ValueObjects\ClientIdentifier;
use Application\Security\Models\ValueObjects\ClientSecret;
use Infra\Adapters\Services\ClientCredentialGeneratorImpl;
covers(ClientCredentialGeneratorImpl::class);
describe('ClientCredentialGeneratorImpl Unit Tests', function (): void {
it('generates a valid client identifier', function (): void {
// GIVEN
$generator = new ClientCredentialGeneratorImpl();
// WHEN
$identifier = $generator->generateIdentifier();
// THEN
expect($identifier)->toBeInstanceOf(ClientIdentifier::class)
->and($identifier->value)->toStartWith('arcadia_id_')
->and(strlen($identifier->value))->toBe(43);
});
it('generates a valid client secret', function (): void {
// GIVEN
$generator = new ClientCredentialGeneratorImpl();
// WHEN
$secret = $generator->generateSecret();
// THEN
expect($secret)->toBeInstanceOf(ClientSecret::class)
->and($secret->value)->toStartWith('arcadia_sec_')
->and(strlen($secret->value))->toBeGreaterThanOrEqual(86)
->and(strlen($secret->value))->toBeLessThanOrEqual(120);
});
it('generates unique credentials on subsequent calls', function (): void {
// GIVEN
$generator = new ClientCredentialGeneratorImpl();
// WHEN
$id1 = $generator->generateIdentifier();
$id2 = $generator->generateIdentifier();
$sec1 = $generator->generateSecret();
$sec2 = $generator->generateSecret();
// THEN
expect($id1->value)->not->toBe($id2->value)
->and($sec1->value)->not->toBe($sec2->value);
});
});