ldc-arcadia-api/tests/Unit/Shared/Pagination/PageSizeTest.php

83 lines
2.3 KiB
PHP

<?php
declare(strict_types=1);
namespace Tests\Unit\Shared\Pagination;
use InvalidArgumentException;
use Shared\Pagination\PageSize;
covers(PageSize::class);
describe('PageSize Value Object Unit Tests', function (): void {
it('creates a valid page size with default value', function (): void {
// GIVEN / WHEN
$size = new PageSize();
// THEN
expect($size->value)->toBe(25)
->and($size->value())->toBe(25)
->and((string) $size)->toBe('25')
->and(json_encode($size))->toBe('25');
});
it('creates a valid page size with specific value', function (): void {
// GIVEN
$value = 50;
// WHEN
$size = new PageSize($value);
// THEN
expect($size->value)->toBe(50)
->and($size->value())->toBe(50)
->and((string) $size)->toBe('50');
});
it('creates a page size using of() factory', function (): void {
// GIVEN
$value = 100;
// WHEN
$size = PageSize::of($value);
// THEN
expect($size->value)->toBe(100);
});
it('creates a page size using default() factory', function (): void {
// GIVEN / WHEN
$size = PageSize::default();
// THEN
expect($size->value)->toBe(25);
});
it('rejects invalid page sizes below 1', function (int $invalid): void {
// GIVEN / WHEN
expect(fn () => new PageSize($invalid))
// THEN
->toThrow(InvalidArgumentException::class, 'Page size must be greater than 0');
})->with([0, -1, -10, -100]);
it('rejects page size exceeding max allowed', function (): void {
// GIVEN / WHEN
expect(fn () => new PageSize(10001))
// THEN
->toThrow(InvalidArgumentException::class, 'Page size must be less than or equal to 10000');
});
it('correctly checks equality with another instance', function (): void {
// GIVEN
$size1 = new PageSize(20);
$size2 = new PageSize(20);
$size3 = new PageSize(50);
// THEN
expect($size1->equals($size2))->toBeTrue()
->and($size1->equals($size3))->toBeFalse()
->and($size1->equals(20))->toBeFalse()
->and($size1->equals(null))->toBeFalse()
->and($size1->equals('20'))->toBeFalse();
});
});