value)->toBe(25) ->and($size->value())->toBe(25) ->and((string) $size)->toBe('25') ->and(json_encode($size))->toBe('25'); }); it('creates a valid page size with specific value', function (): void { // GIVEN $value = 50; // WHEN $size = new PageSize($value); // THEN expect($size->value)->toBe(50) ->and($size->value())->toBe(50) ->and((string) $size)->toBe('50'); }); it('creates a page size using of() factory', function (): void { // GIVEN $value = 100; // WHEN $size = PageSize::of($value); // THEN expect($size->value)->toBe(100); }); it('creates a page size using default() factory', function (): void { // GIVEN / WHEN $size = PageSize::default(); // THEN expect($size->value)->toBe(25); }); it('rejects invalid page sizes below 1', function (int $invalid): void { // GIVEN / WHEN expect(fn () => new PageSize($invalid)) // THEN ->toThrow(InvalidArgumentException::class, 'Page size must be greater than 0'); })->with([0, -1, -10, -100]); it('rejects page size exceeding max allowed', function (): void { // GIVEN / WHEN expect(fn () => new PageSize(10001)) // THEN ->toThrow(InvalidArgumentException::class, 'Page size must be less than or equal to 10000'); }); it('correctly checks equality with another instance', function (): void { // GIVEN $size1 = new PageSize(20); $size2 = new PageSize(20); $size3 = new PageSize(50); // THEN expect($size1->equals($size2))->toBeTrue() ->and($size1->equals($size3))->toBeFalse() ->and($size1->equals(20))->toBeFalse() ->and($size1->equals(null))->toBeFalse() ->and($size1->equals('20'))->toBeFalse(); }); });