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.
		
		
		
		
		
			
		
			
				
					
					
						
							116 lines
						
					
					
						
							4.1 KiB
						
					
					
				
			
		
		
	
	
							116 lines
						
					
					
						
							4.1 KiB
						
					
					
				<?php | 
						|
 | 
						|
namespace yiiunit\framework\validators; | 
						|
 | 
						|
 | 
						|
use yii\validators\StringValidator; | 
						|
use yiiunit\data\validators\models\FakedValidationModel; | 
						|
use yiiunit\TestCase; | 
						|
 | 
						|
class StringValidatorTest extends TestCase | 
						|
{ | 
						|
	public function setUp() | 
						|
	{ | 
						|
		parent::setUp(); | 
						|
		$this->mockApplication(); | 
						|
	} | 
						|
 | 
						|
	public function testValidateValue() | 
						|
	{ | 
						|
		$val = new StringValidator(); | 
						|
		$this->assertFalse($val->validate(['not a string'])); | 
						|
		$this->assertTrue($val->validate('Just some string')); | 
						|
	} | 
						|
 | 
						|
	public function testValidateValueLength() | 
						|
	{ | 
						|
		$val = new StringValidator(['length' => 25]); | 
						|
		$this->assertTrue($val->validate(str_repeat('x', 25))); | 
						|
		$this->assertTrue($val->validate(str_repeat('€', 25))); | 
						|
		$this->assertFalse($val->validate(str_repeat('x', 125))); | 
						|
		$this->assertFalse($val->validate('')); | 
						|
		$val = new StringValidator(['length' => [25]]); | 
						|
		$this->assertTrue($val->validate(str_repeat('x', 25))); | 
						|
		$this->assertTrue($val->validate(str_repeat('x', 1250))); | 
						|
		$this->assertFalse($val->validate(str_repeat('Ä', 24))); | 
						|
		$this->assertFalse($val->validate('')); | 
						|
		$val = new StringValidator(['length' => [10, 20]]); | 
						|
		$this->assertTrue($val->validate(str_repeat('x', 15))); | 
						|
		$this->assertTrue($val->validate(str_repeat('x', 10))); | 
						|
		$this->assertTrue($val->validate(str_repeat('x', 20))); | 
						|
		$this->assertFalse($val->validate(str_repeat('x', 5))); | 
						|
		$this->assertFalse($val->validate(str_repeat('x', 25))); | 
						|
		$this->assertFalse($val->validate('')); | 
						|
		// make sure min/max are overridden | 
						|
		$val = new StringValidator(['length' => [10, 20], 'min' => 25, 'max' => 35]); | 
						|
		$this->assertTrue($val->validate(str_repeat('x', 15))); | 
						|
		$this->assertFalse($val->validate(str_repeat('x', 30))); | 
						|
	} | 
						|
 | 
						|
	public function testValidateValueMinMax() | 
						|
	{ | 
						|
		$val = new StringValidator(['min' => 10]); | 
						|
		$this->assertTrue($val->validate(str_repeat('x', 10))); | 
						|
		$this->assertFalse($val->validate('xxxx')); | 
						|
		$val = new StringValidator(['max' => 10]); | 
						|
		$this->assertTrue($val->validate('xxxx')); | 
						|
		$this->assertFalse($val->validate(str_repeat('y', 20))); | 
						|
		$val = new StringValidator(['min' => 10, 'max' => 20]); | 
						|
		$this->assertTrue($val->validate(str_repeat('y', 15))); | 
						|
		$this->assertFalse($val->validate('abc')); | 
						|
		$this->assertFalse($val->validate(str_repeat('b', 25))); | 
						|
	} | 
						|
 | 
						|
	public function testValidateAttribute() | 
						|
	{ | 
						|
		$val = new StringValidator(); | 
						|
		$model = new FakedValidationModel(); | 
						|
		$model->attr_string = 'a tet string'; | 
						|
		$val->validateAttribute($model, 'attr_string'); | 
						|
		$this->assertFalse($model->hasErrors()); | 
						|
		$val = new StringValidator(['length' => 20]); | 
						|
		$model = new FakedValidationModel(); | 
						|
		$model->attr_string = str_repeat('x', 20); | 
						|
		$val->validateAttribute($model, 'attr_string'); | 
						|
		$this->assertFalse($model->hasErrors()); | 
						|
		$model = new FakedValidationModel(); | 
						|
		$model->attr_string = 'abc'; | 
						|
		$val->validateAttribute($model, 'attr_string'); | 
						|
		$this->assertTrue($model->hasErrors('attr_string')); | 
						|
		$val = new StringValidator(['max' => 2]); | 
						|
		$model = new FakedValidationModel(); | 
						|
		$model->attr_string = 'a'; | 
						|
		$val->validateAttribute($model, 'attr_string'); | 
						|
		$this->assertFalse($model->hasErrors()); | 
						|
		$model = new FakedValidationModel(); | 
						|
		$model->attr_string = 'abc'; | 
						|
		$val->validateAttribute($model, 'attr_string'); | 
						|
		$this->assertTrue($model->hasErrors('attr_string')); | 
						|
		$val = new StringValidator(['max' => 1]); | 
						|
		$model = FakedValidationModel::createWithAttributes(['attr_str' => ['abc']]); | 
						|
		$val->validateAttribute($model, 'attr_str'); | 
						|
		$this->assertTrue($model->hasErrors('attr_str')); | 
						|
	} | 
						|
 | 
						|
	public function testEnsureMessagesOnInit() | 
						|
	{ | 
						|
		$val = new StringValidator(['min' => 1, 'max' => 2]); | 
						|
		$this->assertTrue(is_string($val->message)); | 
						|
		$this->assertTrue(is_string($val->tooLong)); | 
						|
		$this->assertTrue(is_string($val->tooShort)); | 
						|
	} | 
						|
 | 
						|
	public function testCustomErrorMessageInValidateAttribute() | 
						|
	{ | 
						|
		$val = new StringValidator([ | 
						|
			'min' => 5, | 
						|
			'tooShort' => '{attribute} to short. Min is {min}', | 
						|
		]); | 
						|
		$model = new FakedValidationModel(); | 
						|
		$model->attr_string = 'abc'; | 
						|
		$val->validateAttribute($model, 'attr_string'); | 
						|
		$this->assertTrue($model->hasErrors('attr_string')); | 
						|
		$errorMsg = $model->getErrors('attr_string'); | 
						|
		$this->assertEquals('attr_string to short. Min is 5', $errorMsg[0]); | 
						|
	} | 
						|
}
 | 
						|
 |