Testing
Testing your validation code with WPZylos Validation.
Unit Testing
Testing Validation Rules
use PHPUnit\Framework\TestCase;
use WPZylos\Framework\Validation\Validator;
class ValidatorTest extends TestCase
{
public function testRequiredRuleFails(): void
{
$validator = new Validator([], [
'email' => ['required'],
]);
$this->assertTrue($validator->fails());
$this->assertTrue($validator->errors()->has('email'));
}
public function testRequiredRulePasses(): void
{
$validator = new Validator(['email' => '[email protected]'], [
'email' => ['required'],
]);
$this->assertFalse($validator->fails());
}
public function testEmailRuleValidation(): void
{
$validator = new Validator(['email' => 'invalid'], [
'email' => ['email'],
]);
$this->assertTrue($validator->fails());
$validator = new Validator(['email' => '[email protected]'], [
'email' => ['email'],
]);
$this->assertFalse($validator->fails());
}
public function testMinRuleValidation(): void
{
$validator = new Validator(['name' => 'ab'], [
'name' => ['min:3'],
]);
$this->assertTrue($validator->fails());
$validator = new Validator(['name' => 'abc'], [
'name' => ['min:3'],
]);
$this->assertFalse($validator->fails());
}
}
Testing Custom Rules
class CustomRuleTest extends TestCase
{
public function testSlugRulePasses(): void
{
$rule = new SlugRule();
$this->assertTrue($rule->passes('slug', 'valid-slug'));
$this->assertTrue($rule->passes('slug', 'valid-slug-123'));
}
public function testSlugRuleFails(): void
{
$rule = new SlugRule();
$this->assertFalse($rule->passes('slug', 'Invalid Slug'));
$this->assertFalse($rule->passes('slug', 'invalid_slug'));
}
}
Testing Form Validation
class UserRegistrationValidatorTest extends TestCase
{
private UserRegistrationValidator $validator;
protected function setUp(): void
{
$this->validator = new UserRegistrationValidator();
}
public function testValidRegistration(): void
{
$data = [
'username' => 'john_doe',
'email' => '[email protected]',
'password' => 'securepass123',
'password_confirmation' => 'securepass123',
'terms' => true,
];
$result = $this->validator->validate($data);
$this->assertArrayHasKey('username', $result);
$this->assertArrayHasKey('email', $result);
}
public function testPasswordMismatch(): void
{
$data = [
'username' => 'john_doe',
'email' => '[email protected]',
'password' => 'securepass123',
'password_confirmation' => 'different',
'terms' => true,
];
$this->expectException(ValidationException::class);
$this->validator->validate($data);
}
}
Running Tests
composer run test