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(); }); });