value)->toBe(1) ->and($page->value())->toBe(1) ->and((string) $page)->toBe('1') ->and(json_encode($page))->toBe('1'); }); it('creates a valid page number with specific value', function (): void { // GIVEN $value = 5; // WHEN $page = new PageNumber($value); // THEN expect($page->value)->toBe(5) ->and($page->value())->toBe(5) ->and((string) $page)->toBe('5'); }); it('creates a page number using of() factory', function (): void { // GIVEN $value = 10; // WHEN $page = PageNumber::of($value); // THEN expect($page->value)->toBe(10); }); it('creates a page number using default() factory', function (): void { // GIVEN / WHEN $page = PageNumber::default(); // THEN expect($page->value)->toBe(1); }); it('throws an exception when page number is zero', function (): void { // GIVEN / WHEN expect(fn () => new PageNumber(0)) // THEN ->toThrow(InvalidArgumentException::class, 'Page number must be greater than 0'); }); it('throws an exception when page number is negative', function (): void { // GIVEN / WHEN expect(fn () => new PageNumber(-5)) // THEN ->toThrow(InvalidArgumentException::class, 'Page number must be greater than 0'); }); it('compares equality with another PageNumber', function (): void { // GIVEN $page1 = new PageNumber(2); $page2 = new PageNumber(2); $page3 = new PageNumber(3); // THEN expect($page1->equals($page2))->toBeTrue() ->and($page1->equals($page3))->toBeFalse() ->and($page1->equals(2))->toBeFalse() ->and($page1->equals(null))->toBeFalse() ->and($page1->equals('2'))->toBeFalse(); }); });