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.
88 lines
2.7 KiB
88 lines
2.7 KiB
<?php |
|
|
|
namespace yiiunit\framework\validators; |
|
|
|
|
|
use yii\validators\UniqueValidator; |
|
use Yii; |
|
use yiiunit\data\ar\ActiveRecord; |
|
use yiiunit\data\validators\models\FakedValidationModel; |
|
use yiiunit\data\validators\models\ValidatorTestMainModel; |
|
use yiiunit\data\validators\models\ValidatorTestRefModel; |
|
use yiiunit\framework\db\DatabaseTestCase; |
|
|
|
class UniqueValidatorTest extends DatabaseTestCase |
|
{ |
|
protected $driverName = 'mysql'; |
|
|
|
public function setUp() |
|
{ |
|
parent::setUp(); |
|
$this->mockApplication(); |
|
ActiveRecord::$db = $this->getConnection(); |
|
} |
|
|
|
public function testAssureMessageSetOnInit() |
|
{ |
|
$val = new UniqueValidator(); |
|
$this->assertTrue(is_string($val->message)); |
|
} |
|
|
|
public function testValidateAttributeDefault() |
|
{ |
|
$val = new UniqueValidator(); |
|
$m = ValidatorTestMainModel::find()->one(); |
|
$val->validateAttribute($m, 'id'); |
|
$this->assertFalse($m->hasErrors('id')); |
|
$m = ValidatorTestRefModel::find(1); |
|
$val->validateAttribute($m, 'ref'); |
|
$this->assertTrue($m->hasErrors('ref')); |
|
// new record: |
|
$m = new ValidatorTestRefModel(); |
|
$m->ref = 5; |
|
$val->validateAttribute($m, 'ref'); |
|
$this->assertTrue($m->hasErrors('ref')); |
|
$m = new ValidatorTestRefModel(); |
|
$m->id = 7; |
|
$m->ref = 12121; |
|
$val->validateAttribute($m, 'ref'); |
|
$this->assertFalse($m->hasErrors('ref')); |
|
$m->save(false); |
|
$val->validateAttribute($m, 'ref'); |
|
$this->assertFalse($m->hasErrors('ref')); |
|
// array error |
|
$m = FakedValidationModel::createWithAttributes(['attr_arr' => ['a', 'b']]); |
|
$val->validateAttribute($m, 'attr_arr'); |
|
$this->assertTrue($m->hasErrors('attr_arr')); |
|
} |
|
|
|
public function testValidateAttributeOfNonARModel() |
|
{ |
|
$val = new UniqueValidator(['className' => ValidatorTestRefModel::className(), 'attributeName' => 'ref']); |
|
$m = FakedValidationModel::createWithAttributes(['attr_1' => 5, 'attr_2' => 1313]); |
|
$val->validateAttribute($m, 'attr_1'); |
|
$this->assertTrue($m->hasErrors('attr_1')); |
|
$val->validateAttribute($m, 'attr_2'); |
|
$this->assertFalse($m->hasErrors('attr_2')); |
|
} |
|
|
|
public function testValidateNonDatabaseAttribute() |
|
{ |
|
$val = new UniqueValidator(['className' => ValidatorTestRefModel::className(), 'attributeName' => 'ref']); |
|
$m = ValidatorTestMainModel::find(1); |
|
$val->validateAttribute($m, 'testMainVal'); |
|
$this->assertFalse($m->hasErrors('testMainVal')); |
|
$m = ValidatorTestMainModel::find(1); |
|
$m->testMainVal = 4; |
|
$val->validateAttribute($m, 'testMainVal'); |
|
$this->assertTrue($m->hasErrors('testMainVal')); |
|
} |
|
|
|
public function testValidateAttributeAttributeNotInTableException() |
|
{ |
|
$this->setExpectedException('yii\base\InvalidConfigException'); |
|
$val = new UniqueValidator(); |
|
$m = new ValidatorTestMainModel(); |
|
$val->validateAttribute($m, 'testMainVal'); |
|
} |
|
} |