toBeInstanceOf(Code::class) ->and($vo->value)->toBe($value); })->with([ 'legacy code length 8' => 'ABCDEFGH', 'length 9' => '123456789', 'standard length 10' => 'ABCDEFGH12', ]); it('throws exception if code is empty', function () { // GIVEN $value = ' '; // WHEN $action = fn () => new Code($value); // THEN expect($action)->toThrow(\DomainException::class); }); it('throws exception if code length is invalid', function (string $value) { // GIVEN // WHEN $action = fn () => new Code($value); // THEN expect($action)->toThrow(\DomainException::class); })->with([ 'too short (7)' => '1234567', 'too long (11)' => '12345678911', ]); it('throws exception if code contains invalid chars', function () { // GIVEN $value = 'EHMfaUpN'; // WHEN $action = fn () => new Code($value); // THEN expect($action)->toThrow(\DomainException::class); }); }); describe('Code methods', function (): void { it('can be cast to string', function (): void { // GIVEN $vo = new Code('ABCDEFGH12'); // WHEN $str = (string) $vo; // THEN expect($str)->toBe('ABCDEFGH12'); }); it('can equate', function (): void { // GIVEN $vo1 = new Code('ABCDEFGH12'); $vo2 = new Code('ABCDEFGH12'); $vo3 = new Code('1234567891'); // WHEN $eq1 = $vo1->equals($vo2); $eq2 = $vo1->equals($vo3); $eq3 = $vo1->equals('ABCDEFGH12'); // THEN expect($eq1)->toBeTrue() ->and($eq2)->toBeFalse() ->and($eq3)->toBeFalse(); }); });