123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175 |
- <?php
- namespace Illuminate\Tests\Validation;
- use Illuminate\Container\Container;
- use Illuminate\Support\Facades\Facade;
- use Illuminate\Translation\ArrayLoader;
- use Illuminate\Translation\Translator;
- use Illuminate\Validation\Rules\Enum;
- use Illuminate\Validation\Rules\Password;
- use Illuminate\Validation\ValidationServiceProvider;
- use Illuminate\Validation\Validator;
- use PHPUnit\Framework\TestCase;
- if (PHP_VERSION_ID >= 80100) {
- include 'Enums.php';
- }
- /**
- * @requires PHP >= 8.1
- */
- class ValidationEnumRuleTest extends TestCase
- {
- public function testvalidationPassesWhenPassingCorrectEnum()
- {
- $v = new Validator(
- resolve('translator'),
- [
- 'status' => 'pending',
- 'int_status' => 1,
- ],
- [
- 'status' => new Enum(StringStatus::class),
- 'int_status' => new Enum(IntegerStatus::class),
- ]
- );
- $this->assertFalse($v->fails());
- }
- public function testValidationFailsWhenProvidingNoExistingCases()
- {
- $v = new Validator(
- resolve('translator'),
- [
- 'status' => 'finished',
- ],
- [
- 'status' => new Enum(StringStatus::class),
- ]
- );
- $this->assertTrue($v->fails());
- $this->assertEquals(['The selected status is invalid.'], $v->messages()->get('status'));
- }
- public function testValidationFailsWhenProvidingDifferentType()
- {
- $v = new Validator(
- resolve('translator'),
- [
- 'status' => 10,
- ],
- [
- 'status' => new Enum(StringStatus::class),
- ]
- );
- $this->assertTrue($v->fails());
- $this->assertEquals(['The selected status is invalid.'], $v->messages()->get('status'));
- }
- public function testValidationPassesWhenProvidingDifferentTypeThatIsCastableToTheEnumType()
- {
- $v = new Validator(
- resolve('translator'),
- [
- 'status' => '1',
- ],
- [
- 'status' => new Enum(IntegerStatus::class),
- ]
- );
- $this->assertFalse($v->fails());
- }
- public function testValidationFailsWhenProvidingNull()
- {
- $v = new Validator(
- resolve('translator'),
- [
- 'status' => null,
- ],
- [
- 'status' => new Enum(StringStatus::class),
- ]
- );
- $this->assertTrue($v->fails());
- $this->assertEquals(['The selected status is invalid.'], $v->messages()->get('status'));
- }
- public function testValidationPassesWhenProvidingNullButTheFieldIsNullable()
- {
- $v = new Validator(
- resolve('translator'),
- [
- 'status' => null,
- ],
- [
- 'status' => ['nullable', new Enum(StringStatus::class)],
- ]
- );
- $this->assertFalse($v->fails());
- }
- public function testValidationFailsOnPureEnum()
- {
- $v = new Validator(
- resolve('translator'),
- [
- 'status' => 'one',
- ],
- [
- 'status' => ['required', new Enum(PureEnum::class)],
- ]
- );
- $this->assertTrue($v->fails());
- }
- public function testValidationFailsWhenProvidingStringToIntegerType()
- {
- $v = new Validator(
- resolve('translator'),
- [
- 'status' => 'abc',
- ],
- [
- 'status' => new Enum(IntegerStatus::class),
- ]
- );
- $this->assertTrue($v->fails());
- $this->assertEquals(['The selected status is invalid.'], $v->messages()->get('status'));
- }
- protected function setUp(): void
- {
- $container = Container::getInstance();
- $container->bind('translator', function () {
- return new Translator(
- new ArrayLoader, 'en'
- );
- });
- Facade::setFacadeApplication($container);
- (new ValidationServiceProvider($container))->register();
- }
- protected function tearDown(): void
- {
- Container::setInstance(null);
- Facade::clearResolvedInstances();
- Facade::setFacadeApplication(null);
- Password::$defaultCallback = null;
- }
- }
|