You can not select more than 25 topics
			Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
		
		
		
		
		
			
		
			
				
					
					
						
							175 lines
						
					
					
						
							5.0 KiB
						
					
					
				
			
		
		
	
	
							175 lines
						
					
					
						
							5.0 KiB
						
					
					
				| <?php | |
| namespace yiiunit\framework\validators; | |
|  | |
| use yii\base\InvalidConfigException; | |
| use yii\validators\CompareValidator; | |
| use yiiunit\data\validators\models\FakedValidationModel; | |
| use yiiunit\TestCase; | |
|  | |
|  | |
|  | |
| class CompareValidatorTest extends TestCase | |
| { | |
| 	protected function setUp() | |
| 	{ | |
| 		parent::setUp(); | |
| 		$this->mockApplication(); | |
| 	} | |
|  | |
| 	public function testValidateValueException() | |
| 	{ | |
| 		$this->setExpectedException('yii\base\InvalidConfigException'); | |
| 		$val = new CompareValidator; | |
| 		$val->validate('val'); | |
| 	} | |
|  | |
| 	public function testValidateValue() | |
| 	{ | |
| 		$value = 18449; | |
| 		// default config | |
| 		$val = new CompareValidator(['compareValue' => $value]); | |
| 		$this->assertTrue($val->validate($value)); | |
| 		$this->assertTrue($val->validate((string)$value)); | |
| 		$this->assertFalse($val->validate($value + 1)); | |
| 		foreach ($this->getOperationTestData($value) as $op => $tests) { | |
| 			$val = new CompareValidator(['compareValue' => $value]); | |
| 			$val->operator = $op; | |
| 			foreach ($tests as $test) { | |
| 				$this->assertEquals($test[1], $val->validate($test[0])); | |
| 			} | |
| 		} | |
| 	} | |
|  | |
| 	protected function getOperationTestData($value) | |
| 	{ | |
| 		return [ | |
| 			'===' => [ | |
| 				[$value, true], | |
| 				[(string)$value, false], | |
| 				[(float)$value, false], | |
| 				[$value + 1, false], | |
| 			], | |
| 			'!=' => [ | |
| 				[$value, false], | |
| 				[(string)$value, false], | |
| 				[(float)$value, false], | |
| 				[$value + 0.00001, true], | |
| 				[false, true], | |
| 			], | |
| 			'!==' => [ | |
| 				[$value, false], | |
| 				[(string)$value, true], | |
| 				[(float)$value, true], | |
| 				[false, true], | |
| 			], | |
| 			'>' => [ | |
| 				[$value, false], | |
| 				[$value + 1, true], | |
| 				[$value - 1, false], | |
| 			], | |
| 			'>=' => [ | |
| 				[$value, true], | |
| 				[$value + 1, true], | |
| 				[$value - 1, false], | |
| 			], | |
| 			'<' => [ | |
| 				[$value, false], | |
| 				[$value + 1, false], | |
| 				[$value - 1, true], | |
| 			], | |
| 			'<=' => [ | |
| 				[$value, true], | |
| 				[$value + 1, false], | |
| 				[$value - 1, true], | |
| 			], | |
| 			//'non-op' => [ | |
| 			//	[$value, false], | |
| 			//	[$value + 1, false], | |
| 			//	[$value - 1, false], | |
| 			//], | |
| 		]; | |
| 	} | |
|  | |
| 	public function testValidateAttribute() | |
| 	{ | |
| 		// invalid-array | |
| 		$val = new CompareValidator; | |
| 		$model = new FakedValidationModel; | |
| 		$model->attr = ['test_val']; | |
| 		$val->validateAttribute($model, 'attr'); | |
| 		$this->assertTrue($model->hasErrors('attr')); | |
| 		$val = new CompareValidator(['compareValue' => 'test-string']); | |
| 		$model = new FakedValidationModel; | |
| 		$model->attr_test = 'test-string'; | |
| 		$val->validateAttribute($model, 'attr_test'); | |
| 		$this->assertFalse($model->hasErrors('attr_test')); | |
| 		$val = new CompareValidator(['compareAttribute' => 'attr_test_val']); | |
| 		$model = new FakedValidationModel; | |
| 		$model->attr_test = 'test-string'; | |
| 		$model->attr_test_val = 'test-string'; | |
| 		$val->validateAttribute($model, 'attr_test'); | |
| 		$this->assertFalse($model->hasErrors('attr_test')); | |
| 		$this->assertFalse($model->hasErrors('attr_test_val')); | |
| 		$val = new CompareValidator(['compareAttribute' => 'attr_test_val']); | |
| 		$model = new FakedValidationModel; | |
| 		$model->attr_test = 'test-string'; | |
| 		$model->attr_test_val = 'test-string-false'; | |
| 		$val->validateAttribute($model, 'attr_test'); | |
| 		$this->assertTrue($model->hasErrors('attr_test')); | |
| 		$this->assertFalse($model->hasErrors('attr_test_val')); | |
| 		// assume: _repeat | |
| 		$val = new CompareValidator; | |
| 		$model = new FakedValidationModel; | |
| 		$model->attr_test = 'test-string'; | |
| 		$model->attr_test_repeat = 'test-string'; | |
| 		$val->validateAttribute($model, 'attr_test'); | |
| 		$this->assertFalse($model->hasErrors('attr_test')); | |
| 		$this->assertFalse($model->hasErrors('attr_test_repeat')); | |
| 		$val = new CompareValidator; | |
| 		$model = new FakedValidationModel; | |
| 		$model->attr_test = 'test-string'; | |
| 		$model->attr_test_repeat = 'test-string2'; | |
| 		$val->validateAttribute($model, 'attr_test'); | |
| 		$this->assertTrue($model->hasErrors('attr_test')); | |
| 		$this->assertFalse($model->hasErrors('attr_test_repeat')); | |
| 		// not existing op | |
| 		$val = new CompareValidator(); | |
| 		$val->operator = '<>'; | |
| 		$model = FakedValidationModel::createWithAttributes(['attr_o' => 5, 'attr_o_repeat' => 5]); | |
| 		$val->validateAttribute($model, 'attr_o'); | |
| 		$this->assertTrue($model->hasErrors('attr_o')); | |
| 	} | |
|  | |
| 	public function testValidateAttributeOperators() | |
| 	{ | |
| 		$value = 55; | |
| 		foreach ($this->getOperationTestData($value) as $operator => $tests) { | |
| 			$val = new CompareValidator(['operator' => $operator, 'compareValue' => $value]); | |
| 			foreach ($tests as $test) { | |
| 				$model = new FakedValidationModel; | |
| 				$model->attr_test = $test[0]; | |
| 				$val->validateAttribute($model, 'attr_test'); | |
| 				$this->assertEquals($test[1], !$model->hasErrors('attr_test')); | |
| 			} | |
|  | |
| 		} | |
| 	} | |
|  | |
| 	public function testEnsureMessageSetOnInit() | |
| 	{ | |
| 		foreach ($this->getOperationTestData(1337) as $operator => $tests) { | |
| 			$val = new CompareValidator(['operator' => $operator]); | |
| 			$this->assertTrue(strlen($val->message) > 1); | |
| 		} | |
| 		try { | |
| 			$val = new CompareValidator(['operator' => '<>']); | |
| 		} catch (InvalidConfigException $e) { | |
| 			return; | |
| 		} | |
| 		catch (\Exception $e) { | |
| 			$this->fail('InvalidConfigException expected' . get_class($e) . 'received'); | |
| 			return; | |
| 		} | |
| 		$this->fail('InvalidConfigException expected none received'); | |
| 	} | |
| }
 | |
| 
 |