respect-validation/tests/unit/Rules/PropertyTest.php

90 lines
2.5 KiB
PHP
Raw Normal View History

2010-09-27 23:02:30 +02:00
<?php
2015-06-08 16:47:14 +02:00
/*
* Copyright (c) Alexandre Gomes Gaigalas <alganet@gmail.com>
* SPDX-License-Identifier: MIT
*/
declare(strict_types=1);
2010-09-27 23:02:30 +02:00
namespace Respect\Validation\Rules;
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\Stub;
use Respect\Validation\Test\TestCase;
use stdClass;
2017-11-04 11:21:40 +01:00
#[Group('rule')]
#[CoversClass(Property::class)]
final class PropertyTest extends TestCase
2010-09-27 23:02:30 +02:00
{
#[Test]
#[DataProvider('providerForScalarValues')]
public function itShouldAlwaysInvalidateNonObjectValues(mixed $input): void
{
self::assertInvalidInput(new Property('foo', Stub::daze()), $input);
}
#[Test]
#[DataProvider('providerForObjectsWithMissingProperties')]
public function itShouldAlwaysInvalidateMissingProperties(string $propertyName, object $object): void
2015-10-07 05:54:14 +02:00
{
self::assertInvalidInput(new Property($propertyName, Stub::fail(1)), $object);
}
#[Test]
#[DataProvider('providerForObjectsWithExistingProperties')]
public function itShouldValidateExistingPropertiesWithWrappedRule(string $propertyName, object $object): void
{
self::assertValidInput(new Property($propertyName, Stub::pass(1)), $object);
}
#[Test]
#[DataProvider('providerForObjectsWithExistingProperties')]
public function itShouldInvalidateExistingPropertiesWithWrappedRule(string $propertyName, object $object): void
{
self::assertInvalidInput(new Property($propertyName, Stub::fail(1)), $object);
}
#[Test]
public function itShouldValidatePropertyWithTheWrappedRule(): void
{
$object = new stdClass();
$object->foo = 'bar';
$wrapped = Stub::pass(1);
$rule = new Property('foo', $wrapped);
$rule->evaluate($object);
self::assertEquals([$object->foo], $wrapped->inputs);
}
#[Test]
public function itShouldUpdateWrappedRuleNameWithTheGivenName(): void
{
$property = 'foo';
$wrapped = Stub::daze();
new Property($property, $wrapped);
self::assertEquals($property, $wrapped->getName());
}
#[Test]
public function itShouldNotUpdateWrappedRuleNameWithTheGivenNameWhenRuleAlreadyHasName(): void
{
$name = 'bar';
$wrapped = Stub::daze();
$wrapped->setName($name);
new Property('foo', $wrapped);
self::assertEquals($name, $wrapped->getName());
}
}