= 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; } }