84 lines
3 KiB
PHP
84 lines
3 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Tests\Unit\Application\Security\Usecases\FindAllClients;
|
|
|
|
use Application\Security\Models\Entities\Client;
|
|
use Application\Security\Models\ValueObjects\ClientIdentifier;
|
|
use Application\Security\Models\ValueObjects\ClientName;
|
|
use Application\Security\Models\ValueObjects\ClientSecret;
|
|
use Application\Security\Models\ValueObjects\Entities\ClientId;
|
|
use Application\Security\Usecases\FindAllClients\FindAllClients;
|
|
use Application\Security\Usecases\FindAllClients\Input;
|
|
use Application\Security\Usecases\FindAllClients\Output;
|
|
use Application\Security\Usecases\FindAllClients\PaginatedClient;
|
|
use Infra\Adapters\Repositories\InMemoryClientRepository;
|
|
use Ramsey\Uuid\Uuid;
|
|
use Shared\Pagination;
|
|
|
|
covers(
|
|
FindAllClients::class,
|
|
Input::class,
|
|
Output::class,
|
|
PaginatedClient::class,
|
|
);
|
|
|
|
describe('FindAllClients Usecase Unit Tests', function (): void {
|
|
$repository = new InMemoryClientRepository();
|
|
|
|
beforeEach(function () use ($repository): void {
|
|
$repository->clear();
|
|
});
|
|
|
|
function createTestClient(string $identifierSuffix, string $nameStr): Client
|
|
{
|
|
return Client::hydrate(
|
|
id: new ClientId(Uuid::uuid7()),
|
|
name: new ClientName($nameStr),
|
|
identifier: new ClientIdentifier('arcadia_id_' . str_repeat($identifierSuffix, 32)),
|
|
secret: new ClientSecret('arcadia_sec_' . str_repeat('a', 86)),
|
|
isActive: true,
|
|
updatedAt: new \DateTimeImmutable('2024-01-01'),
|
|
);
|
|
}
|
|
|
|
it('retrieves paginated clients list correctly', function () use ($repository): void {
|
|
// GIVEN
|
|
$client1 = createTestClient('1', 'Client Alpha');
|
|
$client2 = createTestClient('2', 'Client Beta');
|
|
$repository->add($client1, $client2);
|
|
|
|
$usecase = new FindAllClients($repository);
|
|
$pagination = Pagination::ofPage(1, 10);
|
|
$input = new Input($pagination);
|
|
|
|
// WHEN
|
|
$result = $usecase->execute($input);
|
|
|
|
// THEN
|
|
expect($result)->toBeInstanceOf(Output::class)
|
|
->and($result->total)->toBe(2)
|
|
->and($result->page)->toBe(1)
|
|
->and($result->perPage)->toBe(10)
|
|
->and($result->clients)->toHaveCount(2)
|
|
->and($result->clients[0])->toBeInstanceOf(PaginatedClient::class)
|
|
->and($result->clients[0]->name->value)->toBe('Client Alpha')
|
|
->and($result->clients[1]->name->value)->toBe('Client Beta');
|
|
});
|
|
|
|
it('returns empty clients list when repository is empty', function () use ($repository): void {
|
|
// GIVEN
|
|
$usecase = new FindAllClients($repository);
|
|
$pagination = Pagination::ofPage(1, 10);
|
|
$input = new Input($pagination);
|
|
|
|
// WHEN
|
|
$result = $usecase->execute($input);
|
|
|
|
// THEN
|
|
expect($result)->toBeInstanceOf(Output::class)
|
|
->and($result->total)->toBe(0)
|
|
->and($result->clients)->toBeEmpty();
|
|
});
|
|
});
|