ldc-mesbr-app/tests/Unit/Shared/ValueObjects/Pagination/PageSizeTest.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');
});
});