ldc-arcadia-genesis-php-client/tests/Unit/Lib/Pagination/PageSizeTest.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();
});
});