ldc-arcadia-genesis-php-client/tests/Unit/Lib/Pagination/PageNumberTest.php

86 lines
2.4 KiB
PHP

<?php
declare(strict_types=1);
namespace Tests\Unit\Lib\Pagination;
use InvalidArgumentException;
use PHPUnit\Framework\TestCase;
use Uwil\ArcadiaApiPhpClient\Lib\Pagination\PageNumber;
covers(PageNumber::class);
uses(TestCase::class);
describe('PageNumber Value Object', function (): void {
it('creates a valid page number with default value', function (): void {
// GIVEN / WHEN
$page = new PageNumber();
// THEN
expect($page->value)->toBe(1)
->and($page->value())->toBe(1)
->and((string) $page)->toBe('1')
->and(json_encode($page))->toBe('1');
});
it('creates a valid page number with specific value', function (): void {
// GIVEN
$value = 5;
// WHEN
$page = new PageNumber($value);
// THEN
expect($page->value)->toBe(5)
->and($page->value())->toBe(5)
->and((string) $page)->toBe('5');
});
it('creates a page number using of() factory', function (): void {
// GIVEN
$value = 10;
// WHEN
$page = PageNumber::of($value);
// THEN
expect($page->value)->toBe(10);
});
it('creates a page number using default() factory', function (): void {
// GIVEN / WHEN
$page = PageNumber::default();
// THEN
expect($page->value)->toBe(1);
});
it('throws an exception when page number is zero', function (): void {
// GIVEN / WHEN
expect(fn () => new PageNumber(0))
// THEN
->toThrow(InvalidArgumentException::class, 'Page number must be greater than 0');
});
it('throws an exception when page number is negative', function (): void {
// GIVEN / WHEN
expect(fn () => new PageNumber(-5))
// THEN
->toThrow(InvalidArgumentException::class, 'Page number must be greater than 0');
});
it('compares equality with another PageNumber', function (): void {
// GIVEN
$page1 = new PageNumber(2);
$page2 = new PageNumber(2);
$page3 = new PageNumber(3);
// THEN
expect($page1->equals($page2))->toBeTrue()
->and($page1->equals($page3))->toBeFalse()
->and($page1->equals(2))->toBeFalse()
->and($page1->equals(null))->toBeFalse()
->and($page1->equals('2'))->toBeFalse();
});
});