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