mirror of
https://github.com/Respect/Validation.git
synced 2026-03-15 23:05:45 +01:00
The Formatted validator decorates another validator to transform how input values appear in error messages, while still validating the original unmodified input. This is useful for improving the readability of error messages by displaying values in a user-friendly formatd. The validator accepts any Respect\StringFormatter\Formatter implementation, allowing direct use of StringFormatter's fluent builder. As StringFormatter expands with more formatters in future releases, users will automatically benefit from the full range of formatting options. Assisted-by: Claude Code (Opus 4.5)
66 lines
2 KiB
PHP
66 lines
2 KiB
PHP
<?php
|
|
|
|
/*
|
|
* SPDX-License-Identifier: MIT
|
|
* SPDX-FileCopyrightText: (c) Respect Project Contributors
|
|
* SPDX-FileContributor: Henrique Moody <henriquemoody@gmail.com>
|
|
*/
|
|
|
|
declare(strict_types=1);
|
|
|
|
namespace Respect\Validation\Validators;
|
|
|
|
use PHPUnit\Framework\Attributes\CoversClass;
|
|
use PHPUnit\Framework\Attributes\DataProvider;
|
|
use PHPUnit\Framework\Attributes\Test;
|
|
use Respect\Validation\Test\Formatters\FormatterStub;
|
|
use Respect\Validation\Test\TestCase;
|
|
use Respect\Validation\Test\Validators\Stub;
|
|
|
|
#[CoversClass(Formatted::class)]
|
|
final class FormattedTest extends TestCase
|
|
{
|
|
#[Test]
|
|
#[DataProvider('providerForNonStringValues')]
|
|
public function shouldNotValidateWhenInputIsNotStringValue(mixed $input): void
|
|
{
|
|
$this->assertInvalidInput(new Formatted(new FormatterStub('any'), Stub::any(1)), $input);
|
|
}
|
|
|
|
#[Test]
|
|
#[DataProvider('providerForStringValues')]
|
|
public function shouldFormatTheInputWhenInputIsStringValue(mixed $input): void
|
|
{
|
|
$formattedValue = 'formatted-value';
|
|
$formatter = new FormatterStub($formattedValue);
|
|
|
|
$stub = Stub::pass(2);
|
|
$comparableResult = $stub->evaluate($input);
|
|
|
|
$validator = new Formatted($formatter, $stub);
|
|
|
|
$result = $validator->evaluate($input);
|
|
|
|
self::assertSame($formattedValue, $result->input);
|
|
self::assertSame($comparableResult->hasPassed, $result->hasPassed);
|
|
self::assertSame($comparableResult->validator, $result->validator);
|
|
}
|
|
|
|
#[Test]
|
|
public function shouldPassValidationWhenInnerValidatorPasses(): void
|
|
{
|
|
$formatter = new FormatterStub('formatted');
|
|
$validator = new Formatted($formatter, Stub::pass(1));
|
|
|
|
$this->assertValidInput($validator, 'any-string');
|
|
}
|
|
|
|
#[Test]
|
|
public function shouldFailValidationWhenInnerValidatorFails(): void
|
|
{
|
|
$formatter = new FormatterStub('formatted');
|
|
$validator = new Formatted($formatter, Stub::fail(1));
|
|
|
|
$this->assertInvalidInput($validator, 'any-string');
|
|
}
|
|
}
|