77 lines
2.1 KiB
PHP
77 lines
2.1 KiB
PHP
|
|
<?php
|
||
|
|
|
||
|
|
declare(strict_types=1);
|
||
|
|
|
||
|
|
namespace Tests\Unit\Shared\Pagination;
|
||
|
|
|
||
|
|
use InvalidArgumentException;
|
||
|
|
use Shared\Pagination\PageNumber;
|
||
|
|
|
||
|
|
covers(PageNumber::class);
|
||
|
|
|
||
|
|
describe('PageNumber Value Object Unit Tests', function (): void {
|
||
|
|
it('creates a valid page number with default value', function (): void {
|
||
|
|
// GIVEN / WHEN
|
||
|
|
$page = new PageNumber();
|
||
|
|
|
||
|
|
// THEN
|
||
|
|
expect($page->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();
|
||
|
|
});
|
||
|
|
});
|