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.
		
		
		
		
		
			
		
			
				
					
					
						
							170 lines
						
					
					
						
							4.9 KiB
						
					
					
				
			
		
		
	
	
							170 lines
						
					
					
						
							4.9 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 | 
						|
{ | 
						|
 | 
						|
	public function testValidateValueException() | 
						|
	{ | 
						|
		$this->setExpectedException('yii\base\InvalidConfigException'); | 
						|
		$val = new CompareValidator; | 
						|
		$val->validateValue('val'); | 
						|
	} | 
						|
 | 
						|
	public function testValidateValue() | 
						|
	{ | 
						|
		$value = 18449; | 
						|
		// default config | 
						|
		$val = new CompareValidator(['compareValue' => $value]); | 
						|
		$this->assertTrue($val->validateValue($value)); | 
						|
		$this->assertTrue($val->validateValue((string)$value)); | 
						|
		$this->assertFalse($val->validateValue($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->validateValue($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'); | 
						|
	} | 
						|
} |