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('rejects invalid page numbers', function (int $invalid): void { // GIVEN / WHEN expect(fn () => new PageNumber($invalid)) // THEN ->toThrow(InvalidArgumentException::class, 'Page number must be greater than 0'); })->with([0, -1, -5, -100]); it('correctly checks equality with another instance', 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(); }); });