101 lines
2.9 KiB
PHP
101 lines
2.9 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Tests\Unit\Shared\ValueObjects\Pagination;
|
|
|
|
use Shared\ValueObjects\Pagination\PageSize;
|
|
|
|
covers(PageSize::class);
|
|
|
|
describe('PageSize Value Object Unit Tests', function (): void {
|
|
it('creates page size with default value', function (): void {
|
|
// WHEN
|
|
$size = new PageSize();
|
|
|
|
// THEN
|
|
expect($size->value)->toBe(PageSize::DEFAULT_SIZE)
|
|
->and($size->value())->toBe(PageSize::DEFAULT_SIZE);
|
|
});
|
|
|
|
it('creates page size with explicit value', function (): void {
|
|
// WHEN
|
|
$size = new PageSize(50);
|
|
|
|
// THEN
|
|
expect($size->value)->toBe(50)
|
|
->and($size->value())->toBe(50);
|
|
});
|
|
|
|
it('creates page size via of factory', function (): void {
|
|
// WHEN
|
|
$size = PageSize::of(10);
|
|
|
|
// THEN
|
|
expect($size->value)->toBe(10)
|
|
->and($size->value())->toBe(10);
|
|
});
|
|
|
|
it('creates page size via default factory', function (): void {
|
|
// WHEN
|
|
$size = PageSize::default();
|
|
|
|
// THEN
|
|
expect($size->value)->toBe(PageSize::DEFAULT_SIZE);
|
|
});
|
|
|
|
it('allows maximum page size', function (): void {
|
|
// WHEN
|
|
$size = new PageSize(PageSize::MAX_PAGE_SIZE);
|
|
|
|
// THEN
|
|
expect($size->value)->toBe(PageSize::MAX_PAGE_SIZE);
|
|
});
|
|
|
|
it('rejects page size less than or equal to zero', function (int $invalidValue): void {
|
|
// WHEN / THEN
|
|
expect(fn () => new PageSize($invalidValue))
|
|
->toThrow(\InvalidArgumentException::class, 'Page size must be greater than 0');
|
|
})->with([
|
|
'zero' => [0],
|
|
'negative' => [-1],
|
|
'large negative' => [-100],
|
|
]);
|
|
|
|
it('rejects page size exceeding maximum page size', function (): void {
|
|
// WHEN / THEN
|
|
expect(fn () => new PageSize(PageSize::MAX_PAGE_SIZE + 1))
|
|
->toThrow(\InvalidArgumentException::class, 'Page size must be less than or equal to 10000');
|
|
});
|
|
|
|
it('implements equals correctly', function (): void {
|
|
// GIVEN
|
|
$size1 = new PageSize(25);
|
|
$size2 = new PageSize(25);
|
|
$size3 = new PageSize(50);
|
|
|
|
// THEN
|
|
expect($size1->equals($size2))->toBeTrue()
|
|
->and($size1->equals($size3))->toBeFalse()
|
|
->and($size1->equals(25))->toBeFalse()
|
|
->and($size1->equals('25'))->toBeFalse()
|
|
->and($size1->equals(null))->toBeFalse();
|
|
});
|
|
|
|
it('converts to string via __toString', function (): void {
|
|
// GIVEN
|
|
$size = new PageSize(15);
|
|
|
|
// THEN
|
|
expect((string) $size)->toBe('15');
|
|
});
|
|
|
|
it('serializes to json as integer', function (): void {
|
|
// GIVEN
|
|
$size = new PageSize(30);
|
|
|
|
// THEN
|
|
expect($size->jsonSerialize())->toBe(30)
|
|
->and(json_encode($size))->toBe('30');
|
|
});
|
|
});
|