* SPDX-FileContributor: Danilo Correa * SPDX-FileContributor: Gabriel Caruso * SPDX-FileContributor: Henrique Moody * SPDX-FileContributor: Mikhail Vyrtsev */ declare(strict_types=1); namespace Respect\Validation\Validators; use PHPUnit\Framework\Attributes\CoversClass; use PHPUnit\Framework\Attributes\Group; use PHPUnit\Framework\Attributes\Test; use Respect\Validation\Exceptions\InvalidValidatorException; use Respect\Validation\Test\RuleTestCase; use stdClass; #[Group('rules')] #[CoversClass(Sorted::class)] final class SortedTest extends RuleTestCase { #[Test] public function itShouldNotAcceptWrongSortingDirection(): void { $this->expectException(InvalidValidatorException::class); $this->expectExceptionMessage('Direction should be either "ASC" or "DESC"'); new Sorted('something'); } /** @return iterable */ public static function providerForValidInput(): iterable { return [ 'empty' => [new Sorted('ASC'), []], 'one item' => [new Sorted('ASC'), [1]], 'one character' => [new Sorted('ASC'), 'z'], 'ASC array-sequence' => [new Sorted('ASC'), [1, 3, 5]], 'ASC sequence in associative array' => [new Sorted('ASC'), ['foo' => 1, 'bar' => 3, 'baz' => 5]], 'ASC string-sequence' => [new Sorted('ASC'), 'ABCD'], 'DESC array-sequence ' => [new Sorted('DESC'), [10, 9, 8]], 'DESC string-sequence ' => [new Sorted('DESC'), 'zyx'], ]; } /** @return iterable */ public static function providerForInvalidInput(): iterable { return [ 'duplicate' => [new Sorted('ASC'), [1, 1, 1]], 'wrong ASC array-sequence' => [new Sorted('ASC'), [1, 3, 2]], 'wrong ASC string-sequence' => [new Sorted('ASC'), 'xzy'], 'wrong DESC array-sequence' => [new Sorted('DESC'), [1, 3, 2]], 'wrong DESC string-sequence' => [new Sorted('DESC'), 'jml'], 'DESC array-sequence with ASC validation' => [new Sorted('ASC'), [3, 2, 1]], 'DESC string-sequence with ASC validation' => [new Sorted('ASC'), '321'], 'ASC array-sequence with DESC validation' => [new Sorted('DESC'), [1, 2, 3]], 'ASC string-sequence with DESC validation' => [new Sorted('DESC'), 'abc'], 'unsupported value (integer)' => [new Sorted('DESC'), 1 ], 'unsupported value (float)' => [new Sorted('DESC'), 1.2 ], 'unsupported value (bool)' => [new Sorted('DESC'), true ], 'unsupported value (object)' => [new Sorted('DESC'), new stdClass() ], ]; } }