93 lines
2.6 KiB
PHP
93 lines
2.6 KiB
PHP
<?php
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Tests\Unit\Lib\Pagination;
|
|
|
|
use InvalidArgumentException;
|
|
use PHPUnit\Framework\TestCase;
|
|
use Uwil\ArcadiaApiPhpClient\Lib\Pagination\PageSize;
|
|
|
|
covers(PageSize::class);
|
|
|
|
uses(TestCase::class);
|
|
|
|
describe('PageSize Value Object', function (): void {
|
|
it('creates a valid page size with default value', function (): void {
|
|
// GIVEN / WHEN
|
|
$size = new PageSize();
|
|
|
|
// THEN
|
|
expect($size->value)->toBe(50)
|
|
->and($size->value())->toBe(50)
|
|
->and((string) $size)->toBe('50')
|
|
->and(json_encode($size))->toBe('50');
|
|
});
|
|
|
|
it('creates a valid page size with specific value', function (): void {
|
|
// GIVEN
|
|
$value = 25;
|
|
|
|
// WHEN
|
|
$size = new PageSize($value);
|
|
|
|
// THEN
|
|
expect($size->value)->toBe(25)
|
|
->and($size->value())->toBe(25)
|
|
->and((string) $size)->toBe('25');
|
|
});
|
|
|
|
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(50);
|
|
});
|
|
|
|
it('throws an exception when page size is zero', function (): void {
|
|
// GIVEN / WHEN
|
|
expect(fn () => new PageSize(0))
|
|
// THEN
|
|
->toThrow(InvalidArgumentException::class, 'Page size must be greater than 0');
|
|
});
|
|
|
|
it('throws an exception when page size is negative', function (): void {
|
|
// GIVEN / WHEN
|
|
expect(fn () => new PageSize(-10))
|
|
// THEN
|
|
->toThrow(InvalidArgumentException::class, 'Page size must be greater than 0');
|
|
});
|
|
|
|
it('throws an exception when page size exceeds 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('compares equality with another PageSize', 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();
|
|
});
|
|
});
|