respect-validation/tests/unit/Rules/Core/FilteredNonEmptyArrayTest.php
Henrique Moody fe68eab37d
Allow to validate ArrayObject in key-related values
Because of that, I also updated some data providers to distinguish
between "values" and "types", similar to some of the rules we already
have.

Signed-off-by: Henrique Moody <henriquemoody@gmail.com>
2024-03-08 21:36:49 +01:00

74 lines
2 KiB
PHP

<?php
/*
* Copyright (c) Alexandre Gomes Gaigalas <alganet@gmail.com>
* SPDX-License-Identifier: MIT
*/
declare(strict_types=1);
namespace Respect\Validation\Rules\Core;
use PHPUnit\Framework\Attributes\CoversClass;
use PHPUnit\Framework\Attributes\DataProvider;
use PHPUnit\Framework\Attributes\Group;
use PHPUnit\Framework\Attributes\Test;
use Respect\Validation\Test\Rules\Core\ConcreteFilteredNonEmptyArray;
use Respect\Validation\Test\Rules\Stub;
use Respect\Validation\Test\TestCase;
#[Group('core')]
#[CoversClass(FilteredNonEmptyArray::class)]
final class FilteredNonEmptyArrayTest extends TestCase
{
#[Test]
#[DataProvider('providerForNonIterableTypes')]
public function itShouldInvalidateNonIterableValues(mixed $input): void
{
$sut = new ConcreteFilteredNonEmptyArray(Stub::daze());
self::assertInvalidInput($sut, $input);
}
/** @param iterable<mixed> $input */
#[Test]
#[DataProvider('providerForEmptyIterableValues')]
public function itShouldInvalidateEmptyIterableValues(iterable $input): void
{
$sut = new ConcreteFilteredNonEmptyArray(Stub::daze());
self::assertInvalidInput($sut, $input);
}
#[Test]
public function itShouldEvaluateNonEmptyIterables(): void
{
$rule = Stub::pass(1);
$input = [1, 2, 3];
$sut = new ConcreteFilteredNonEmptyArray($rule);
$sut->evaluate($input);
self::assertSame([$input], $rule->inputs);
}
#[Test]
public function itShouldKeepRuleIdWhenInvalidatingNonIterableValues(): void
{
$sut = new ConcreteFilteredNonEmptyArray(Stub::daze());
$result = $sut->evaluate(null);
self::assertEquals('concreteFilteredNonEmptyArray', $result->id);
}
#[Test]
public function itShouldKeepRuleIdWhenInvalidatingEmptyIterableValues(): void
{
$sut = new ConcreteFilteredNonEmptyArray(Stub::daze());
$result = $sut->evaluate([]);
self::assertEquals('concreteFilteredNonEmptyArray', $result->id);
}
}