144 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
			
		
		
	
	
			144 lines
		
	
	
		
			4.4 KiB
		
	
	
	
		
			PHP
		
	
| <?php
 | |
| 
 | |
| require_once dirname(__DIR__, 3) . '/app/classes/validator.php';
 | |
| 
 | |
| use PHPUnit\Framework\TestCase;
 | |
| 
 | |
| class ValidatorTest extends TestCase
 | |
| {
 | |
|     public function testRequired()
 | |
|     {
 | |
|         // Test valid data
 | |
|         $data = ['name' => 'John'];
 | |
|         $validator = new Validator($data);
 | |
|         $rules = ['name' => ['required' => true]];
 | |
| 
 | |
|         $this->assertTrue($validator->validate($rules));
 | |
|         $this->assertEmpty($validator->getErrors());
 | |
| 
 | |
|         // Test invalid data
 | |
|         $data = ['name' => ''];
 | |
|         $validator = new Validator($data);
 | |
|         $this->assertFalse($validator->validate($rules));
 | |
|         $this->assertNotEmpty($validator->getErrors());
 | |
|     }
 | |
| 
 | |
|     public function testEmail()
 | |
|     {
 | |
|         // Test valid email
 | |
|         $data = ['email' => 'test@example.com'];
 | |
|         $validator = new Validator($data);
 | |
|         $rules = ['email' => ['email' => true]];
 | |
| 
 | |
|         $this->assertTrue($validator->validate($rules));
 | |
|         $this->assertEmpty($validator->getErrors());
 | |
| 
 | |
|         // Test invalid email
 | |
|         $data = ['email' => 'invalid-email'];
 | |
|         $validator = new Validator($data);
 | |
|         $this->assertFalse($validator->validate($rules));
 | |
|         $this->assertNotEmpty($validator->getErrors());
 | |
|     }
 | |
| 
 | |
|     public function testMinLength()
 | |
|     {
 | |
|         // Test valid length
 | |
|         $data = ['password' => '123456'];
 | |
|         $validator = new Validator($data);
 | |
|         $rules = ['password' => ['min' => 6]];
 | |
| 
 | |
|         $this->assertTrue($validator->validate($rules));
 | |
|         $this->assertEmpty($validator->getErrors());
 | |
| 
 | |
|         // Test invalid length
 | |
|         $data = ['password' => '12345'];
 | |
|         $validator = new Validator($data);
 | |
|         $this->assertFalse($validator->validate($rules));
 | |
|         $this->assertNotEmpty($validator->getErrors());
 | |
|     }
 | |
| 
 | |
|     public function testMaxLength()
 | |
|     {
 | |
|         // Test valid length
 | |
|         $data = ['username' => '12345'];
 | |
|         $validator = new Validator($data);
 | |
|         $rules = ['username' => ['max' => 5]];
 | |
| 
 | |
|         $this->assertTrue($validator->validate($rules));
 | |
|         $this->assertEmpty($validator->getErrors());
 | |
| 
 | |
|         // Test invalid length
 | |
|         $data = ['username' => '123456'];
 | |
|         $validator = new Validator($data);
 | |
|         $this->assertFalse($validator->validate($rules));
 | |
|         $this->assertNotEmpty($validator->getErrors());
 | |
|     }
 | |
| 
 | |
|     public function testNumeric()
 | |
|     {
 | |
|         // Test valid number
 | |
|         $data = ['age' => '25'];
 | |
|         $validator = new Validator($data);
 | |
|         $rules = ['age' => ['numeric' => true]];
 | |
| 
 | |
|         $this->assertTrue($validator->validate($rules));
 | |
|         $this->assertEmpty($validator->getErrors());
 | |
| 
 | |
|         // Test invalid number
 | |
|         $data = ['age' => 'twenty-five'];
 | |
|         $validator = new Validator($data);
 | |
|         $this->assertFalse($validator->validate($rules));
 | |
|         $this->assertNotEmpty($validator->getErrors());
 | |
|     }
 | |
| 
 | |
|     public function testUrl()
 | |
|     {
 | |
|         // Test valid URL
 | |
|         $data = ['website' => 'https://example.com'];
 | |
|         $validator = new Validator($data);
 | |
|         $rules = ['website' => ['url' => true]];
 | |
| 
 | |
|         $this->assertTrue($validator->validate($rules));
 | |
|         $this->assertEmpty($validator->getErrors());
 | |
| 
 | |
|         // Test invalid URL
 | |
|         $data = ['website' => 'not-a-url'];
 | |
|         $validator = new Validator($data);
 | |
|         $this->assertFalse($validator->validate($rules));
 | |
|         $this->assertNotEmpty($validator->getErrors());
 | |
|     }
 | |
| 
 | |
|     public function testMultipleRules()
 | |
|     {
 | |
|         // Test valid data
 | |
|         $data = ['email' => 'test@example.com'];
 | |
|         $validator = new Validator($data);
 | |
|         $rules = ['email' => [
 | |
|             'required' => true,
 | |
|             'email' => true,
 | |
|             'max' => 50
 | |
|         ]];
 | |
| 
 | |
|         $this->assertTrue($validator->validate($rules));
 | |
|         $this->assertEmpty($validator->getErrors());
 | |
| 
 | |
|         // Test invalid data
 | |
|         $data = ['email' => str_repeat('a', 51) . '@example.com'];
 | |
|         $validator = new Validator($data);
 | |
|         $this->assertFalse($validator->validate($rules));
 | |
|         $this->assertNotEmpty($validator->getErrors());
 | |
|     }
 | |
| 
 | |
|     public function testCustomErrorMessages()
 | |
|     {
 | |
|         $data = ['age' => 'not-a-number'];
 | |
|         $validator = new Validator($data);
 | |
|         $rules = ['age' => ['numeric' => true]];
 | |
| 
 | |
|         $this->assertFalse($validator->validate($rules));
 | |
|         $errors = $validator->getErrors();
 | |
|         $this->assertNotEmpty($errors);
 | |
|         $this->assertEquals('Must be a number', $errors['age'][0]);
 | |
|     }
 | |
| }
 |