withShuffler(new FisherYatesShuffler()) ->withSeed(12345); $service = new CodeGenerationService($builder); $matricule = new Matricule('0100759'); // WHEN $code = $service->generateFrom($matricule); // THEN expect($code)->toBeInstanceOf(Code::class) ->and(strlen($code->value))->toBe(Code::LENGTH) ->and(preg_match('/^[' . Code::ALLOWED_CHARACTERS . ']+$/', $code->value))->toBe(1); }); it('generates deterministic codes for the same matricule', function (): void { // GIVEN $builder = (new SerialCasterBuilder(new NativeBaseConverter())) ->withShuffler(new FisherYatesShuffler()) ->withSeed(12345); $service = new CodeGenerationService($builder); $matricule = new Matricule('0100759'); // WHEN $code1 = $service->generateFrom($matricule); $code2 = $service->generateFrom($matricule); // THEN expect($code1->value)->toBe($code2->value); }); it('generates different codes for different matricules', function (): void { // GIVEN $builder = (new SerialCasterBuilder(new NativeBaseConverter())) ->withShuffler(new FisherYatesShuffler()) ->withSeed(12345); $service = new CodeGenerationService($builder); // WHEN $code1 = $service->generateFrom(new Matricule('0100759')); $code2 = $service->generateFrom(new Matricule('0100760')); // THEN expect($code1->value)->not->toBe($code2->value); }); });