mirror of
https://github.com/elyby/accounts.git
synced 2024-12-27 15:40:21 +05:30
Обновлена версия Codeception (там поправили баг с анонимными классами)
Переписаны тесты для базовой формы с кодовым доступом В базовую форму кодового доступа добавлена проверка на истечение кода
This commit is contained in:
parent
15922ba02e
commit
ebf4947c37
@ -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
|
||||
*/
|
||||
|
@ -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": "*"
|
||||
},
|
||||
|
@ -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();
|
||||
});
|
||||
}
|
||||
|
||||
|
Loading…
Reference in New Issue
Block a user