mirror of
https://github.com/elyby/accounts.git
synced 2024-11-27 01:02:06 +05:30
Добавлены экшены в контроллер и 1 тест (больше не успел)
This commit is contained in:
parent
50439fdaeb
commit
f99b281f30
@ -1,3 +1,6 @@
|
|||||||
<?php
|
<?php
|
||||||
return [
|
return [
|
||||||
|
'/accounts/change-email/initialize' => 'accounts/change-email-initialize',
|
||||||
|
'/accounts/change-email/submit-new-email' => 'accounts/change-email-submit-new-email',
|
||||||
|
'/accounts/change-email/confirm-new-email' => 'accounts/change-email-confirm-new-email',
|
||||||
];
|
];
|
||||||
|
@ -1,6 +1,9 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace api\controllers;
|
namespace api\controllers;
|
||||||
|
|
||||||
|
use api\models\profile\ChangeEmail\ConfirmNewEmailForm;
|
||||||
|
use api\models\profile\ChangeEmail\InitStateForm;
|
||||||
|
use api\models\profile\ChangeEmail\NewEmailForm;
|
||||||
use api\models\profile\ChangePasswordForm;
|
use api\models\profile\ChangePasswordForm;
|
||||||
use api\models\profile\ChangeUsernameForm;
|
use api\models\profile\ChangeUsernameForm;
|
||||||
use common\models\Account;
|
use common\models\Account;
|
||||||
@ -21,7 +24,13 @@ class AccountsController extends Controller {
|
|||||||
'roles' => ['@'],
|
'roles' => ['@'],
|
||||||
],
|
],
|
||||||
[
|
[
|
||||||
'actions' => ['change-password', 'change-username'],
|
'actions' => [
|
||||||
|
'change-password',
|
||||||
|
'change-username',
|
||||||
|
'change-email-initialize',
|
||||||
|
'change-email-submit-new-email',
|
||||||
|
'change-email-confirm-new-email',
|
||||||
|
],
|
||||||
'allow' => true,
|
'allow' => true,
|
||||||
'roles' => ['@'],
|
'roles' => ['@'],
|
||||||
'matchCallback' => function() {
|
'matchCallback' => function() {
|
||||||
@ -40,6 +49,9 @@ class AccountsController extends Controller {
|
|||||||
'current' => ['GET'],
|
'current' => ['GET'],
|
||||||
'change-password' => ['POST'],
|
'change-password' => ['POST'],
|
||||||
'change-username' => ['POST'],
|
'change-username' => ['POST'],
|
||||||
|
'change-email-initialize' => ['POST'],
|
||||||
|
'change-email-submit-new-email' => ['POST'],
|
||||||
|
'change-email-confirm-new-email' => ['POST'],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
@ -92,4 +104,57 @@ class AccountsController extends Controller {
|
|||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function actionChangeEmailInitialize() {
|
||||||
|
/** @var Account $account */
|
||||||
|
$account = Yii::$app->user->identity;
|
||||||
|
$model = new InitStateForm($account);
|
||||||
|
if (!$model->sendCurrentEmailConfirmation()) {
|
||||||
|
return [
|
||||||
|
'success' => false,
|
||||||
|
'errors' => $this->normalizeModelErrors($model->getErrors()),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'success' => true,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function actionChangeEmailSubmitNewEmail() {
|
||||||
|
/** @var Account $account */
|
||||||
|
$account = Yii::$app->user->identity;
|
||||||
|
$model = new NewEmailForm($account);
|
||||||
|
$model->load(Yii::$app->request->post());
|
||||||
|
if (!$model->sendNewEmailConfirmation()) {
|
||||||
|
return [
|
||||||
|
'success' => false,
|
||||||
|
'errors' => $this->normalizeModelErrors($model->getErrors()),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'success' => true,
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
public function actionChangeEmailConfirmNewEmail() {
|
||||||
|
/** @var Account $account */
|
||||||
|
$account = Yii::$app->user->identity;
|
||||||
|
$model = new ConfirmNewEmailForm($account);
|
||||||
|
$model->load(Yii::$app->request->post());
|
||||||
|
if (!$model->changeEmail()) {
|
||||||
|
return [
|
||||||
|
'success' => false,
|
||||||
|
'errors' => $this->normalizeModelErrors($model->getErrors()),
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
|
return [
|
||||||
|
'success' => true,
|
||||||
|
'data' => [
|
||||||
|
'email' => $account->email,
|
||||||
|
],
|
||||||
|
];
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -28,7 +28,7 @@ class InitStateForm extends ApiForm {
|
|||||||
public function rules() {
|
public function rules() {
|
||||||
// TODO: поверить наличие уже отправленных подтверждений смены E-mail
|
// TODO: поверить наличие уже отправленных подтверждений смены E-mail
|
||||||
return [
|
return [
|
||||||
['!email', 'validateAccountPasswordHashStrategy'],
|
['!email', 'validateAccountPasswordHashStrategy', 'skipOnEmpty' => false],
|
||||||
];
|
];
|
||||||
}
|
}
|
||||||
|
|
||||||
|
@ -30,4 +30,9 @@ class AccountsRoute extends BasePage {
|
|||||||
]);
|
]);
|
||||||
}
|
}
|
||||||
|
|
||||||
|
public function changeEmailInitialize() {
|
||||||
|
$this->route = ['accounts/change-email-initialize'];
|
||||||
|
$this->actor->sendPOST($this->getUrl());
|
||||||
|
}
|
||||||
|
|
||||||
}
|
}
|
||||||
|
@ -1,6 +1,8 @@
|
|||||||
<?php
|
<?php
|
||||||
namespace tests\codeception\api;
|
namespace tests\codeception\api;
|
||||||
|
|
||||||
|
use Codeception\Actor;
|
||||||
|
use InvalidArgumentException;
|
||||||
use tests\codeception\api\_pages\AuthenticationRoute;
|
use tests\codeception\api\_pages\AuthenticationRoute;
|
||||||
|
|
||||||
/**
|
/**
|
||||||
@ -18,17 +20,23 @@ use tests\codeception\api\_pages\AuthenticationRoute;
|
|||||||
*
|
*
|
||||||
* @SuppressWarnings(PHPMD)
|
* @SuppressWarnings(PHPMD)
|
||||||
*/
|
*/
|
||||||
class FunctionalTester extends \Codeception\Actor {
|
class FunctionalTester extends Actor {
|
||||||
use _generated\FunctionalTesterActions;
|
use _generated\FunctionalTesterActions;
|
||||||
|
|
||||||
public function loggedInAsActiveAccount() {
|
public function loggedInAsActiveAccount($login = null, $password = null) {
|
||||||
$I = $this;
|
$route = new AuthenticationRoute($this);
|
||||||
$route = new AuthenticationRoute($I);
|
if ($login === null) {
|
||||||
$route->login('Admin', 'password_0');
|
$route->login('Admin', 'password_0');
|
||||||
$I->canSeeResponseIsJson();
|
} elseif ($login !== null && $password !== null) {
|
||||||
$I->canSeeResponseJsonMatchesJsonPath('$.jwt');
|
$route->login($login, $password);
|
||||||
$jwt = $I->grabDataFromResponseByJsonPath('$.jwt')[0];
|
} else {
|
||||||
$I->amBearerAuthenticated($jwt);
|
throw new InvalidArgumentException('login and password should be presented both.');
|
||||||
|
}
|
||||||
|
|
||||||
|
$this->canSeeResponseIsJson();
|
||||||
|
$this->canSeeResponseJsonMatchesJsonPath('$.jwt');
|
||||||
|
$jwt = $this->grabDataFromResponseByJsonPath('$.jwt')[0];
|
||||||
|
$this->amBearerAuthenticated($jwt);
|
||||||
}
|
}
|
||||||
|
|
||||||
public function notLoggedIn() {
|
public function notLoggedIn() {
|
||||||
|
@ -0,0 +1,46 @@
|
|||||||
|
<?php
|
||||||
|
namespace tests\codeception\api\functional;
|
||||||
|
|
||||||
|
use Codeception\Specify;
|
||||||
|
use tests\codeception\api\_pages\AccountsRoute;
|
||||||
|
use tests\codeception\api\FunctionalTester;
|
||||||
|
|
||||||
|
class AccountsChangeEmailInitializeCest {
|
||||||
|
|
||||||
|
/**
|
||||||
|
* @var AccountsRoute
|
||||||
|
*/
|
||||||
|
private $route;
|
||||||
|
|
||||||
|
public function _before(FunctionalTester $I) {
|
||||||
|
$this->route = new AccountsRoute($I);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testChangeEmailInitialize(FunctionalTester $I) {
|
||||||
|
$I->wantTo('send current email confirmation');
|
||||||
|
$I->loggedInAsActiveAccount();
|
||||||
|
|
||||||
|
$this->route->changeEmailInitialize();
|
||||||
|
$I->canSeeResponseCodeIs(200);
|
||||||
|
$I->canSeeResponseIsJson();
|
||||||
|
$I->canSeeResponseContainsJson([
|
||||||
|
'success' => true,
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
public function testChangeEmailWithOldPasswordStrategy(FunctionalTester $I) {
|
||||||
|
$I->wantTo('see, that account use old account password hash strategy');
|
||||||
|
$I->loggedInAsActiveAccount('AccWithOldPassword', '12345678');
|
||||||
|
|
||||||
|
$this->route->changeEmailInitialize();
|
||||||
|
$I->canSeeResponseCodeIs(200);
|
||||||
|
$I->canSeeResponseIsJson();
|
||||||
|
$I->canSeeResponseContainsJson([
|
||||||
|
'success' => false,
|
||||||
|
'errors' => [
|
||||||
|
'email' => 'error.old_hash_strategy',
|
||||||
|
],
|
||||||
|
]);
|
||||||
|
}
|
||||||
|
|
||||||
|
}
|
Loading…
Reference in New Issue
Block a user