Написан тест для поведения beforeSave модели EmailActivation

This commit is contained in:
ErickSkrauch 2016-07-27 01:58:06 +03:00
parent c25bfeb8bc
commit ed6bc672cb
2 changed files with 40 additions and 6 deletions

View File

@ -64,7 +64,7 @@ class EmailActivation extends ActiveRecord {
public static function instantiate($row) { public static function instantiate($row) {
$type = ArrayHelper::getValue($row, 'type'); $type = ArrayHelper::getValue($row, 'type');
if ($type === null) { if ($type === null) {
return new static; return parent::instantiate($row);
} }
$classMap = self::getClassMap(); $classMap = self::getClassMap();
@ -91,11 +91,19 @@ class EmailActivation extends ActiveRecord {
if ($this->key === null) { if ($this->key === null) {
do { do {
$this->key = UserFriendlyRandomKey::make(); $this->key = $this->generateKey();
} while (EmailActivation::find()->andWhere(['key' => $this->key])->exists()); } while ($this->isKeyExists($this->key));
} }
return true; return true;
} }
protected function generateKey() : string {
return UserFriendlyRandomKey::make();
}
protected function isKeyExists(string $key) : bool {
return self::find()->andWhere(['key' => $key])->exists();
}
} }

View File

@ -28,4 +28,30 @@ class EmailActivationTest extends DbTestCase {
}); });
} }
public function testBeforeSave() {
$this->specify('method should generate value for key field if it empty', function() {
$model = new EmailActivation();
$model->beforeSave(true);
expect($model->key)->notNull();
});
$this->specify('method should repeat code generation if code duplicate with exists', function() {
/** @var EmailActivation|\PHPUnit_Framework_MockObject_MockObject $model */
$model = $this->getMockBuilder(EmailActivation::class)
->setMethods(['generateKey', 'isKeyExists'])
->getMock();
$model->expects($this->exactly(3))
->method('generateKey')
->will($this->onConsecutiveCalls('1', '2', '3'));
$model->expects($this->exactly(3))
->method('isKeyExists')
->will($this->onConsecutiveCalls(true, true, false));
$model->beforeSave(true);
expect($model->key)->equals('3');
});
}
} }