83 lines
2.3 KiB
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();
|
|
});
|
|
});
|