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