diff --git a/api/config/main.php b/api/config/main.php index bafec86..45ed653 100644 --- a/api/config/main.php +++ b/api/config/main.php @@ -34,11 +34,14 @@ return [ 'urlManager' => [ 'enablePrettyUrl' => true, 'showScriptName' => false, - 'rules' => [], + 'rules' => require __DIR__ . '/routes.php', ], 'reCaptcha' => [ 'class' => 'api\components\ReCaptcha\Component', ], + 'response' => [ + 'format' => \yii\web\Response::FORMAT_JSON, + ], ], 'params' => $params, ]; diff --git a/api/config/routes.php b/api/config/routes.php new file mode 100644 index 0000000..d0b9c34 --- /dev/null +++ b/api/config/routes.php @@ -0,0 +1,3 @@ +<?php +return [ +]; diff --git a/api/controllers/AuthenticationController.php b/api/controllers/AuthenticationController.php index 307c689..d11f7a2 100644 --- a/api/controllers/AuthenticationController.php +++ b/api/controllers/AuthenticationController.php @@ -10,11 +10,10 @@ class AuthenticationController extends Controller { public function behaviors() { return array_merge(parent::behaviors(), [ 'access' => [ - 'class' => AccessControl::className(), - 'only' => ['login'], + 'class' => AccessControl::class, 'rules' => [ [ - 'actions' => ['login', 'register'], + 'actions' => ['login'], 'allow' => true, 'roles' => ['?'], ], @@ -25,8 +24,7 @@ class AuthenticationController extends Controller { public function verbs() { return [ - 'login' => ['post'], - 'register' => ['post'], + 'login' => ['POST'], ]; } diff --git a/api/controllers/SignupController.php b/api/controllers/SignupController.php index a28c05e..bc0191b 100644 --- a/api/controllers/SignupController.php +++ b/api/controllers/SignupController.php @@ -1,6 +1,7 @@ <?php namespace api\controllers; +use api\models\ConfirmEmailForm; use api\models\RegistrationForm; use Yii; use yii\filters\AccessControl; @@ -10,11 +11,10 @@ class SignupController extends Controller { public function behaviors() { return array_merge(parent::behaviors(), [ 'access' => [ - 'class' => AccessControl::className(), - 'only' => ['register'], + 'class' => AccessControl::class, 'rules' => [ [ - 'actions' => ['register'], + 'actions' => ['register', 'confirm'], 'allow' => true, 'roles' => ['?'], ], @@ -23,6 +23,13 @@ class SignupController extends Controller { ]); } + public function verbs() { + return [ + 'register' => ['POST'], + 'confirm' => ['POST'], + ]; + } + public function actionRegister() { $model = new RegistrationForm(); $model->load(Yii::$app->request->post()); @@ -38,4 +45,24 @@ class SignupController extends Controller { ]; } + public function actionConfirm() { + $model = new ConfirmEmailForm(); + $model->load(Yii::$app->request->post()); + if (!$model->confirm()) { + return [ + 'success' => false, + 'errors' => $this->normalizeModelErrors($model->getErrors()), + ]; + } + + // TODO: не уверен, что логин должен быть здесь + нужно разобраться с параметрами установки куки авторизации и сессии + $activationCode = $model->getActivationCodeModel(); + $account = $activationCode->account; + Yii::$app->user->login($account); + + return [ + 'success' => true, + ]; + } + } diff --git a/api/models/BaseApiForm.php b/api/models/BaseApiForm.php new file mode 100644 index 0000000..342eb26 --- /dev/null +++ b/api/models/BaseApiForm.php @@ -0,0 +1,12 @@ +<?php +namespace api\models; + +use yii\base\Model; + +class BaseApiForm extends Model { + + public function formName() { + return ''; + } + +} diff --git a/api/models/BaseKeyConfirmationForm.php b/api/models/BaseKeyConfirmationForm.php new file mode 100644 index 0000000..7ebac48 --- /dev/null +++ b/api/models/BaseKeyConfirmationForm.php @@ -0,0 +1,38 @@ +<?php +namespace api\models; + +use common\models\EmailActivation; + +class BaseKeyConfirmationForm extends BaseApiForm { + + public $key; + + private $model; + + public function rules() { + return [ + ['key', 'required', 'message' => 'error.key_is_required'], + ['key', 'validateKey'], + ]; + } + + public function validateKey($attribute) { + if (!$this->hasErrors()) { + if ($this->getActivationCodeModel() === null) { + $this->addError($attribute, "error.{$attribute}_not_exists"); + } + } + } + + /** + * @return EmailActivation|null + */ + public function getActivationCodeModel() { + if ($this->model === null) { + $this->model = EmailActivation::findOne($this->key); + } + + return $this->model; + } + +} diff --git a/api/models/ConfirmEmailForm.php b/api/models/ConfirmEmailForm.php new file mode 100644 index 0000000..e62641e --- /dev/null +++ b/api/models/ConfirmEmailForm.php @@ -0,0 +1,44 @@ +<?php +namespace api\models; + +use common\models\Account; +use common\models\EmailActivation; +use Yii; +use yii\base\ErrorException; + +class ConfirmEmailForm extends BaseKeyConfirmationForm { + + public function confirm() { + if (!$this->validate()) { + return false; + } + + $confirmModel = $this->getActivationCodeModel(); + if ($confirmModel->type != EmailActivation::TYPE_REGISTRATION_EMAIL_CONFIRMATION) { + $confirmModel->delete(); + // TODO: вот где-то здесь нужно ещё попутно сгенерировать соответствующую ошибку + return false; + } + + $transaction = Yii::$app->db->beginTransaction(); + try { + $account = $confirmModel->account; + $account->status = Account::STATUS_ACTIVE; + if (!$confirmModel->delete()) { + throw new ErrorException('Unable remove activation key.'); + } + + if (!$account->save()) { + throw new ErrorException('Unable activate user account.'); + } + + $transaction->commit(); + } catch (ErrorException $e) { + $transaction->rollBack(); + throw $e; + } + + return true; + } + +} diff --git a/api/models/LoginForm.php b/api/models/LoginForm.php index 4c42718..e2a794e 100644 --- a/api/models/LoginForm.php +++ b/api/models/LoginForm.php @@ -3,9 +3,8 @@ namespace api\models; use common\models\Account; use Yii; -use yii\base\Model; -class LoginForm extends Model { +class LoginForm extends BaseApiForm { public $login; public $password; @@ -13,10 +12,6 @@ class LoginForm extends Model { private $_account; - public function formName() { - return ''; - } - public function rules() { return [ ['login', 'required', 'message' => 'error.login_required'], diff --git a/api/models/RegistrationForm.php b/api/models/RegistrationForm.php index e5cc3e2..0926189 100644 --- a/api/models/RegistrationForm.php +++ b/api/models/RegistrationForm.php @@ -7,9 +7,8 @@ use common\models\Account; use common\models\EmailActivation; use Yii; use yii\base\ErrorException; -use yii\base\Model; -class RegistrationForm extends Model { +class RegistrationForm extends BaseApiForm { public $username; public $email; @@ -17,10 +16,6 @@ class RegistrationForm extends Model { public $rePassword; public $rulesAgreement; - public function formName() { - return ''; - } - public function rules() { return [ ['rulesAgreement', 'required', 'message' => 'error.you_must_accept_rules'], diff --git a/common/models/EmailActivation.php b/common/models/EmailActivation.php index 31cb255..8b14bbd 100644 --- a/common/models/EmailActivation.php +++ b/common/models/EmailActivation.php @@ -6,9 +6,8 @@ use yii\behaviors\TimestampBehavior; /** * Поля модели: - * @property integer $id - * @property integer $account_id * @property string $key + * @property integer $account_id * @property integer $type * @property integer $created_at * @@ -17,6 +16,10 @@ use yii\behaviors\TimestampBehavior; * * Поведения: * @mixin TimestampBehavior + * + * TODO: у модели могут быть проблемы с уникальностью, т.к. key является первичным и не автоинкрементом + * TODO: мб стоит ловить beforeCreate и именно там генерировать уникальный ключ для модели. + * Но опять же нужно продумать, а как пробросить формат и обеспечить преемлемую уникальность. */ class EmailActivation extends \yii\db\ActiveRecord { diff --git a/console/migrations/m160118_184027_email_activations_code_as_primary_key.php b/console/migrations/m160118_184027_email_activations_code_as_primary_key.php new file mode 100644 index 0000000..1ce1f70 --- /dev/null +++ b/console/migrations/m160118_184027_email_activations_code_as_primary_key.php @@ -0,0 +1,20 @@ +<?php + +use console\db\Migration; + +class m160118_184027_email_activations_code_as_primary_key extends Migration { + + public function safeUp() { + $this->dropColumn('{{%email_activations}}', 'id'); + $this->dropIndex('key', '{{%email_activations}}'); + $this->alterColumn('{{%email_activations}}', 'key', $this->string()->notNull() . ' FIRST'); + $this->addPrimaryKey('key', '{{%email_activations}}', 'key'); + } + + public function safeDown() { + $this->dropPrimaryKey('key', '{{%email_activations}}'); + $this->addColumn('{{%email_activations}}', 'id', $this->primaryKey() . ' FIRST'); + $this->alterColumn('{{%email_activations}}', 'key', $this->string()->unique()->notNull() . ' AFTER `id`'); + } + +} diff --git a/tests/codeception/api/_pages/EmailConfirmRoute.php b/tests/codeception/api/_pages/EmailConfirmRoute.php new file mode 100644 index 0000000..c664907 --- /dev/null +++ b/tests/codeception/api/_pages/EmailConfirmRoute.php @@ -0,0 +1,19 @@ +<?php +namespace tests\codeception\api\_pages; + +use yii\codeception\BasePage; + +/** + * @property \tests\codeception\api\FunctionalTester $actor + */ +class EmailConfirmRoute extends BasePage { + + public $route = ['signup/confirm']; + + public function confirm($key = '') { + $this->actor->sendPOST($this->getUrl(), [ + 'key' => $key, + ]); + } + +} diff --git a/tests/codeception/api/functional/EmailConfirmationCest.php b/tests/codeception/api/functional/EmailConfirmationCest.php new file mode 100644 index 0000000..f503113 --- /dev/null +++ b/tests/codeception/api/functional/EmailConfirmationCest.php @@ -0,0 +1,41 @@ +<?php +namespace tests\codeception\api; + +use tests\codeception\api\_pages\EmailConfirmRoute; + +class EmailConfirmationCest { + + public function testLoginEmailOrUsername(FunctionalTester $I) { + $route = new EmailConfirmRoute($I); + + $I->wantTo('see error.key_is_required expected if key is not set'); + $route->confirm(); + $I->canSeeResponseContainsJson([ + 'success' => false, + 'errors' => [ + 'key' => 'error.key_is_required', + ], + ]); + + $I->wantTo('see error.key_not_exists expected if key not exists in database'); + $route->confirm('not-exists-key'); + $I->canSeeResponseContainsJson([ + 'success' => false, + 'errors' => [ + 'key' => 'error.key_not_exists', + ], + ]); + } + + public function testLoginByEmailCorrect(FunctionalTester $I) { + $route = new EmailConfirmRoute($I); + + $I->wantTo('confirm my email using correct activation key'); + $route->confirm('HABGCABHJ1234HBHVD'); + $I->canSeeResponseContainsJson([ + 'success' => true, + ]); + $I->cantSeeResponseJsonMatchesJsonPath('$.errors'); + } + +} diff --git a/tests/codeception/api/functional/LoginCest.php b/tests/codeception/api/functional/LoginCest.php index 5bb5658..974bcb5 100644 --- a/tests/codeception/api/functional/LoginCest.php +++ b/tests/codeception/api/functional/LoginCest.php @@ -5,14 +5,6 @@ use tests\codeception\api\_pages\LoginRoute; class LoginCest { - public function _before(FunctionalTester $I) { - - } - - public function _after(FunctionalTester $I) { - - } - public function testLoginEmailOrUsername(FunctionalTester $I) { $route = new LoginRoute($I); diff --git a/tests/codeception/api/unit/DbTestCase.php b/tests/codeception/api/unit/DbTestCase.php index d4c0d83..f42013b 100644 --- a/tests/codeception/api/unit/DbTestCase.php +++ b/tests/codeception/api/unit/DbTestCase.php @@ -1,11 +1,9 @@ <?php - namespace tests\codeception\api\unit; -/** - * @inheritdoc - */ -class DbTestCase extends \yii\codeception\DbTestCase -{ + +class DbTestCase extends \yii\codeception\DbTestCase { + public $appConfig = '@tests/codeception/config/api/unit.php'; + } diff --git a/tests/codeception/api/unit/TestCase.php b/tests/codeception/api/unit/TestCase.php index bb27ebe..350b4b3 100644 --- a/tests/codeception/api/unit/TestCase.php +++ b/tests/codeception/api/unit/TestCase.php @@ -1,11 +1,9 @@ <?php - namespace tests\codeception\api\unit; -/** - * @inheritdoc - */ -class TestCase extends \yii\codeception\TestCase -{ + +class TestCase extends \yii\codeception\TestCase { + public $appConfig = '@tests/codeception/config/api/unit.php'; + } diff --git a/tests/codeception/api/unit/fixtures/data/models/user.php b/tests/codeception/api/unit/fixtures/data/models/user.php deleted file mode 100644 index 3670e09..0000000 --- a/tests/codeception/api/unit/fixtures/data/models/user.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php - -return [ - [ - 'username' => 'okirlin', - 'auth_key' => 'iwTNae9t34OmnK6l4vT4IeaTk-YWI2Rv', - 'password_hash' => '$2y$13$CXT0Rkle1EMJ/c1l5bylL.EylfmQ39O5JlHJVFpNn618OUS1HwaIi', - 'password_reset_token' => 't5GU9NwpuGYSfb7FEZMAxqtuz2PkEvv_' . time(), - 'created_at' => '1391885313', - 'updated_at' => '1391885313', - 'email' => 'brady.renner@rutherford.com', - ], - [ - 'username' => 'troy.becker', - 'auth_key' => 'EdKfXrx88weFMV0vIxuTMWKgfK2tS3Lp', - 'password_hash' => '$2y$13$g5nv41Px7VBqhS3hVsVN2.MKfgT3jFdkXEsMC4rQJLfaMa7VaJqL2', - 'password_reset_token' => '4BSNyiZNAuxjs5Mty990c47sVrgllIi_' . time(), - 'created_at' => '1391885313', - 'updated_at' => '1391885313', - 'email' => 'nicolas.dianna@hotmail.com', - 'status' => '0', - ], -]; diff --git a/tests/codeception/api/unit/models/BaseApiFormTest.php b/tests/codeception/api/unit/models/BaseApiFormTest.php new file mode 100644 index 0000000..cb38bc8 --- /dev/null +++ b/tests/codeception/api/unit/models/BaseApiFormTest.php @@ -0,0 +1,31 @@ +<?php +namespace tests\codeception\api\models; + +use api\models\BaseApiForm; +use Codeception\Specify; +use tests\codeception\api\unit\TestCase; + +class BaseApiFormTest extends TestCase { + use Specify; + + public function testLoad() { + $model = new DummyTestModel(); + $this->specify('model should load data without ModelName array scope', function() use ($model) { + expect('model successful load data without prefix', $model->load(['field' => 'test-data']))->true(); + expect('field is set as passed data', $model->field)->equals('test-data'); + }); + } + +} + +class DummyTestModel extends BaseApiForm { + + public $field; + + public function rules() { + return [ + ['field', 'safe'], + ]; + } + +} diff --git a/tests/codeception/api/unit/models/BaseKeyConfirmationFormTest.php b/tests/codeception/api/unit/models/BaseKeyConfirmationFormTest.php new file mode 100644 index 0000000..22807ec --- /dev/null +++ b/tests/codeception/api/unit/models/BaseKeyConfirmationFormTest.php @@ -0,0 +1,62 @@ +<?php +namespace tests\codeception\api\models; + +use api\models\BaseKeyConfirmationForm; +use Codeception\Specify; +use tests\codeception\api\unit\DbTestCase; +use tests\codeception\common\fixtures\EmailActivationFixture; +use Yii; + +/** + * @property array $emailActivations + */ +class BaseKeyConfirmationFormTest extends DbTestCase { + use Specify; + + public function fixtures() { + return [ + 'emailActivations' => [ + 'class' => EmailActivationFixture::class, + 'dataFile' => '@tests/codeception/common/fixtures/data/email-activations.php', + ], + ]; + } + + protected function createModel($key = null) { + return new BaseKeyConfirmationForm([ + '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([ + 'key' => [ + 'error.key_not_exists', + ], + ]); + }); + } + + public function testCorrectKey() { + $model = $this->createModel($this->emailActivations[0]['key']); + $this->specify('no errors if key exists', function () use ($model) { + expect('model should pass validation', $model->validate())->true(); + }); + } + +} diff --git a/tests/codeception/api/unit/models/ConfirmEmailFormTest.php b/tests/codeception/api/unit/models/ConfirmEmailFormTest.php new file mode 100644 index 0000000..e101fdb --- /dev/null +++ b/tests/codeception/api/unit/models/ConfirmEmailFormTest.php @@ -0,0 +1,45 @@ +<?php +namespace tests\codeception\api\models; + +use api\models\ConfirmEmailForm; +use Codeception\Specify; +use common\models\Account; +use common\models\EmailActivation; +use tests\codeception\api\unit\DbTestCase; +use tests\codeception\common\fixtures\EmailActivationFixture; +use Yii; + +/** + * @property array $emailActivations + */ +class ConfirmEmailFormTest extends DbTestCase { + use Specify; + + public function fixtures() { + return [ + 'emailActivations' => [ + 'class' => EmailActivationFixture::class, + 'dataFile' => '@tests/codeception/common/fixtures/data/email-activations.php', + ], + ]; + } + + protected function createModel($key) { + return new ConfirmEmailForm([ + 'key' => $key, + ]); + } + + public function testValidInput() { + $fixture = $this->emailActivations[0]; + $model = $this->createModel($fixture['key']); + $this->specify('expect true result', function() use ($model, $fixture) { + expect('model return successful result', $model->confirm())->true(); + expect('email activation key is not exist', EmailActivation::find()->andWhere(['key' => $fixture['key']])->exists())->false(); + /** @var Account $user */ + $user = Account::findOne($fixture['account_id']); + expect('user status changed to active', $user->status)->equals(Account::STATUS_ACTIVE); + }); + } + +} diff --git a/tests/codeception/api/unit/models/LoginFormTest.php b/tests/codeception/api/unit/models/LoginFormTest.php index f81d46d..d3f313e 100644 --- a/tests/codeception/api/unit/models/LoginFormTest.php +++ b/tests/codeception/api/unit/models/LoginFormTest.php @@ -7,6 +7,9 @@ use tests\codeception\api\unit\DbTestCase; use tests\codeception\common\fixtures\AccountFixture; use Yii; +/** + * @property array $accounts + */ class LoginFormTest extends DbTestCase { use Specify; @@ -17,8 +20,8 @@ class LoginFormTest extends DbTestCase { public function fixtures() { return [ - 'account' => [ - 'class' => AccountFixture::className(), + 'accounts' => [ + 'class' => AccountFixture::class, 'dataFile' => '@tests/codeception/common/fixtures/data/accounts.php', ], ]; diff --git a/tests/codeception/api/unit/models/RegistrationFormTest.php b/tests/codeception/api/unit/models/RegistrationFormTest.php index 2dfa3c1..f6ccdfc 100644 --- a/tests/codeception/api/unit/models/RegistrationFormTest.php +++ b/tests/codeception/api/unit/models/RegistrationFormTest.php @@ -9,6 +9,9 @@ use tests\codeception\api\unit\DbTestCase; use tests\codeception\common\fixtures\AccountFixture; use Yii; +/** + * @property array $accounts + */ class RegistrationFormTest extends DbTestCase { use Specify; @@ -31,8 +34,8 @@ class RegistrationFormTest extends DbTestCase { public function fixtures() { return [ - 'account' => [ - 'class' => AccountFixture::className(), + 'accounts' => [ + 'class' => AccountFixture::class, 'dataFile' => '@tests/codeception/common/fixtures/data/accounts.php', ], ]; diff --git a/tests/codeception/common/_support/FixtureHelper.php b/tests/codeception/common/_support/FixtureHelper.php index ccf9861..7b4bdda 100644 --- a/tests/codeception/common/_support/FixtureHelper.php +++ b/tests/codeception/common/_support/FixtureHelper.php @@ -1,9 +1,9 @@ <?php - namespace tests\codeception\common\_support; use Codeception\Module; use tests\codeception\common\fixtures\AccountFixture; +use tests\codeception\common\fixtures\EmailActivationFixture; use yii\test\FixtureTrait; use yii\test\InitDbFixture; @@ -61,6 +61,10 @@ class FixtureHelper extends Module { 'class' => AccountFixture::class, 'dataFile' => '@tests/codeception/common/fixtures/data/accounts.php', ], + 'emailActivations' => [ + 'class' => EmailActivationFixture::class, + 'dataFile' => '@tests/codeception/common/fixtures/data/email-activations.php', + ], ]; } } diff --git a/tests/codeception/common/fixtures/AccountFixture.php b/tests/codeception/common/fixtures/AccountFixture.php index 0053ca8..9122747 100644 --- a/tests/codeception/common/fixtures/AccountFixture.php +++ b/tests/codeception/common/fixtures/AccountFixture.php @@ -1,5 +1,4 @@ <?php - namespace tests\codeception\common\fixtures; use common\models\Account; diff --git a/tests/codeception/common/fixtures/EmailActivationFixture.php b/tests/codeception/common/fixtures/EmailActivationFixture.php new file mode 100644 index 0000000..b9e0f70 --- /dev/null +++ b/tests/codeception/common/fixtures/EmailActivationFixture.php @@ -0,0 +1,15 @@ +<?php +namespace tests\codeception\common\fixtures; + +use common\models\EmailActivation; +use yii\test\ActiveFixture; + +class EmailActivationFixture extends ActiveFixture { + + public $modelClass = EmailActivation::class; + + public $depends = [ + AccountFixture::class, + ]; + +} diff --git a/tests/codeception/common/fixtures/UserFixture.php b/tests/codeception/common/fixtures/UserFixture.php deleted file mode 100644 index 7153c8c..0000000 --- a/tests/codeception/common/fixtures/UserFixture.php +++ /dev/null @@ -1,13 +0,0 @@ -<?php - -namespace tests\codeception\common\fixtures; - -use yii\test\ActiveFixture; - -/** - * User fixture - */ -class UserFixture extends ActiveFixture -{ - public $modelClass = 'common\models\User'; -} diff --git a/tests/codeception/common/fixtures/data/accounts.php b/tests/codeception/common/fixtures/data/accounts.php index 5215777..eb70aef 100644 --- a/tests/codeception/common/fixtures/data/accounts.php +++ b/tests/codeception/common/fixtures/data/accounts.php @@ -6,10 +6,10 @@ return [ 'username' => 'Admin', 'email' => 'admin@ely.by', 'password_hash' => '$2y$13$CXT0Rkle1EMJ/c1l5bylL.EylfmQ39O5JlHJVFpNn618OUS1HwaIi', # password_0 - 'password_hash_strategy' => 1, - 'password_reset_token' => NULL, + 'password_hash_strategy' => \common\models\Account::PASS_HASH_STRATEGY_YII2, + 'password_reset_token' => null, 'auth_key' => 'iwTNae9t34OmnK6l4vT4IeaTk-YWI2Rv', - 'status' => 10, + 'status' => \common\models\Account::STATUS_ACTIVE, 'created_at' => 1451775316, 'updated_at' => 1451775316, ], @@ -19,11 +19,24 @@ return [ 'username' => 'AccWithOldPassword', 'email' => 'erickskrauch123@yandex.ru', 'password_hash' => '133c00c463cbd3e491c28cb653ce4718', # 12345678 - 'password_hash_strategy' => 0, - 'password_reset_token' => NULL, + 'password_hash_strategy' => \common\models\Account::PASS_HASH_STRATEGY_OLD_ELY, + 'password_reset_token' => null, 'auth_key' => 'ltTNae9t34OmnK6l4vT4IeaTk-YWI2Rv', - 'status' => 10, + 'status' => \common\models\Account::STATUS_ACTIVE, 'created_at' => 1385225069, 'updated_at' => 1385225069, ], + 'not-activated-account' => [ + 'id' => 3, + 'uuid' => '86c6fedb-bffc-37a5-8c0f-62e8fa9a2af7', + 'username' => 'howe.garnett', + 'email' => 'achristiansen@gmail.com', + 'password_hash' => '$2y$13$2rYkap5T6jG8z/mMK8a3Ou6aZxJcmAaTha6FEuujvHEmybSHRzW5e', # password_0 + 'password_hash_strategy' => \common\models\Account::PASS_HASH_STRATEGY_YII2, + 'password_reset_token' => null, + 'auth_key' => '3AGc12Q7U8lU9umIyCWk5iCnpdPvZ8Up', + 'status' => \common\models\Account::STATUS_REGISTERED, + 'created_at' => 1453146616, + 'updated_at' => 1453146616, + ] ]; diff --git a/tests/codeception/common/fixtures/data/email-activations.php b/tests/codeception/common/fixtures/data/email-activations.php new file mode 100644 index 0000000..f0a859c --- /dev/null +++ b/tests/codeception/common/fixtures/data/email-activations.php @@ -0,0 +1,9 @@ +<?php +return [ + [ + 'key' => 'HABGCABHJ1234HBHVD', + 'account_id' => 3, + 'type' => \common\models\EmailActivation::TYPE_REGISTRATION_EMAIL_CONFIRMATION, + 'created_at' => time(), + ], +]; diff --git a/tests/codeception/common/fixtures/data/init_login.php b/tests/codeception/common/fixtures/data/init_login.php deleted file mode 100644 index 841e279..0000000 --- a/tests/codeception/common/fixtures/data/init_login.php +++ /dev/null @@ -1,14 +0,0 @@ -<?php - -return [ - [ - 'username' => 'erau', - 'auth_key' => 'tUu1qHcde0diwUol3xeI-18MuHkkprQI', - // password_0 - 'password_hash' => '$2y$13$nJ1WDlBaGcbCdbNC5.5l4.sgy.OMEKCqtDQOdQ2OWpgiKRWYyzzne', - 'password_reset_token' => 'RkD_Jw0_8HEedzLk7MM-ZKEFfYR7VbMr_1392559490', - 'created_at' => '1392559490', - 'updated_at' => '1392559490', - 'email' => 'sfriesen@jenkins.info', - ], -]; diff --git a/tests/codeception/common/templates/fixtures/user.php b/tests/codeception/common/templates/fixtures/account.php similarity index 65% rename from tests/codeception/common/templates/fixtures/user.php rename to tests/codeception/common/templates/fixtures/account.php index d3f83b5..b3bc951 100644 --- a/tests/codeception/common/templates/fixtures/user.php +++ b/tests/codeception/common/templates/fixtures/account.php @@ -7,11 +7,14 @@ $security = Yii::$app->getSecurity(); return [ + 'uuid' => $faker->uuid, 'username' => $faker->userName, 'email' => $faker->email, - 'auth_key' => $security->generateRandomString(), 'password_hash' => $security->generatePasswordHash('password_' . $index), - 'password_reset_token' => $security->generateRandomString() . '_' . time(), + 'password_hash_strategy' => \common\models\Account::PASS_HASH_STRATEGY_YII2, + 'password_reset_token' => NULL, + 'auth_key' => $security->generateRandomString(), + 'status' => \common\models\Account::STATUS_ACTIVE, 'created_at' => time(), 'updated_at' => time(), ];