87 lines
2.4 KiB
PHP
87 lines
2.4 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Tests\Unit\Shared\ValueObjects\Pagination;
|
|
|
|
use Shared\ValueObjects\Pagination\PageNumber;
|
|
|
|
covers(PageNumber::class);
|
|
|
|
describe('PageNumber Value Object Unit Tests', function (): void {
|
|
it('creates page number with default value', function (): void {
|
|
// WHEN
|
|
$page = new PageNumber();
|
|
|
|
// THEN
|
|
expect($page->value)->toBe(PageNumber::DEFAULT_PAGE)
|
|
->and($page->value())->toBe(PageNumber::DEFAULT_PAGE);
|
|
});
|
|
|
|
it('creates page number with explicit value', function (): void {
|
|
// WHEN
|
|
$page = new PageNumber(5);
|
|
|
|
// THEN
|
|
expect($page->value)->toBe(5)
|
|
->and($page->value())->toBe(5);
|
|
});
|
|
|
|
it('creates page number via of factory', function (): void {
|
|
// WHEN
|
|
$page = PageNumber::of(3);
|
|
|
|
// THEN
|
|
expect($page->value)->toBe(3)
|
|
->and($page->value())->toBe(3);
|
|
});
|
|
|
|
it('creates page number via default factory', function (): void {
|
|
// WHEN
|
|
$page = PageNumber::default();
|
|
|
|
// THEN
|
|
expect($page->value)->toBe(PageNumber::DEFAULT_PAGE);
|
|
});
|
|
|
|
it('rejects page number less than or equal to zero', function (int $invalidValue): void {
|
|
// WHEN / THEN
|
|
expect(fn () => new PageNumber($invalidValue))
|
|
->toThrow(\InvalidArgumentException::class, 'Page number must be greater than 0');
|
|
})->with([
|
|
'zero' => [0],
|
|
'negative' => [-1],
|
|
'large negative' => [-99],
|
|
]);
|
|
|
|
it('implements equals correctly', 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('2'))->toBeFalse()
|
|
->and($page1->equals(null))->toBeFalse();
|
|
});
|
|
|
|
it('converts to string via __toString', function (): void {
|
|
// GIVEN
|
|
$page = new PageNumber(4);
|
|
|
|
// THEN
|
|
expect((string) $page)->toBe('4');
|
|
});
|
|
|
|
it('serializes to json as integer', function (): void {
|
|
// GIVEN
|
|
$page = new PageNumber(7);
|
|
|
|
// THEN
|
|
expect($page->jsonSerialize())->toBe(7)
|
|
->and(json_encode($page))->toBe('7');
|
|
});
|
|
});
|