Обновлена версия Codeception (там поправили баг с анонимными классами)

Переписаны тесты для базовой формы с кодовым доступом
В базовую форму кодового доступа добавлена проверка на истечение кода
This commit is contained in:
ErickSkrauch 2016-05-12 01:08:40 +03:00
parent 15922ba02e
commit ebf4947c37
3 changed files with 79 additions and 29 deletions

View File

@ -14,6 +14,7 @@ class KeyConfirmationForm extends ApiForm {
// TODO: нужно провалидировать количество попыток ввода кода для определённого IP адреса и в случае чего запросить капчу
['key', 'required', 'message' => 'error.key_is_required'],
['key', 'validateKey'],
['key', 'validateKeyExpiration'],
];
}
@ -25,6 +26,14 @@ class KeyConfirmationForm extends ApiForm {
}
}
public function validateKeyExpiration($attribute) {
if (!$this->hasErrors()) {
if ($this->getActivationCodeModel()->isExpired()) {
$this->addError($attribute, "error.{$attribute}_expire");
}
}
}
/**
* @return EmailActivation|null
*/

View File

@ -32,7 +32,7 @@
"yiisoft/yii2-gii": "*",
"yiisoft/yii2-faker": "*",
"flow/jsonpath": "^0.3.1",
"codeception/codeception": "2.1.*",
"codeception/codeception": "dev-master#5584c75a85b8217bbf6b0a77f2349aef82e94a15",
"codeception/specify": "*",
"codeception/verify": "*"
},

View File

@ -3,12 +3,14 @@ namespace tests\codeception\api\models\base;
use api\models\base\KeyConfirmationForm;
use Codeception\Specify;
use common\models\confirmations\ForgotPassword;
use common\models\EmailActivation;
use tests\codeception\api\unit\DbTestCase;
use tests\codeception\common\fixtures\EmailActivationFixture;
use Yii;
/**
* @property array $emailActivations
* @property EmailActivationFixture $emailActivations
*/
class KeyConfirmationFormTest extends DbTestCase {
use Specify;
@ -22,40 +24,79 @@ class KeyConfirmationFormTest extends DbTestCase {
];
}
protected function createModel($key = null) {
return new KeyConfirmationForm([
'key' => $key,
]);
}
public function testEmptyKey() {
$model = $this->createModel();
$this->specify('get error.key_is_required with validating empty key field', function () use ($model) {
expect('model should don\'t pass validation', $model->validate())->false();
expect('error messages should be set', $model->errors)->equals([
'key' => [
'error.key_is_required',
],
]);
});
}
public function testIncorrectKey() {
$model = $this->createModel('not-exists-key');
$this->specify('get error.key_not_exists with validation wrong key', function () use ($model) {
expect('model should don\'t pass validation', $model->validate())->false();
expect('error messages should be set', $model->errors)->equals([
public function testValidateKey() {
$this->specify('get error.key_not_exists with validation wrong key', function () {
/** @var KeyConfirmationForm $model */
$model = new class extends KeyConfirmationForm {
public function getActivationCodeModel() {
return null;
}
};
$model->validateKey('key');
expect($model->errors)->equals([
'key' => [
'error.key_not_exists',
],
]);
});
$this->specify('no errors, if model exists', function () {
/** @var KeyConfirmationForm $model */
$model = new class extends KeyConfirmationForm {
public function getActivationCodeModel() {
return new EmailActivation();
}
};
$model->validateKey('key');
expect($model->errors)->isEmpty();
});
}
public function testCorrectKey() {
$model = $this->createModel($this->emailActivations['freshRegistrationConfirmation']['key']);
$this->specify('no errors if key exists', function () use ($model) {
expect('model should pass validation', $model->validate())->true();
public function testValidateKeyExpiration() {
$this->specify('get error.key_expire if we use old key', function () {
/** @var KeyConfirmationForm $model */
$model = new class extends KeyConfirmationForm {
public function getActivationCodeModel() {
$codeModel = new ForgotPassword();
$codeModel->created_at = time() - $codeModel->expirationTimeout - 10;
return $codeModel;
}
};
$model->validateKeyExpiration('key');
expect($model->errors)->equals([
'key' => [
'error.key_expire',
],
]);
});
$this->specify('no errors if key is not yet expired', function () {
/** @var KeyConfirmationForm $model */
$model = new class extends KeyConfirmationForm {
public function getActivationCodeModel() {
$codeModel = new ForgotPassword();
$codeModel->created_at = time() - $codeModel->expirationTimeout + 10;
return $codeModel;
}
};
$model->validateKeyExpiration('key');
expect($model->errors)->isEmpty();
});
}
public function testGetActivationCodeModel() {
$this->specify('should return model, based on passed key', function() {
$model = new KeyConfirmationForm();
$model->key = array_values($this->emailActivations->data)[0]['key'];
expect($model->getActivationCodeModel())->isInstanceOf(EmailActivation::class);
});
$this->specify('should return null, if passed key is invalid', function() {
$model = new KeyConfirmationForm();
$model->key = 'this-is-invalid-key';
expect($model->getActivationCodeModel())->null();
});
}