/**
  * Sends recovery message.
  *
  * @return bool
  */
 public function sendRecoveryMessage()
 {
     if ($this->validate()) {
         $this->_user->sendRecoveryMessage();
         return true;
     }
     return false;
 }
 /**
  * Resets user's password.
  *
  * @return bool
  */
 public function resetPassword()
 {
     if ($this->validate()) {
         $this->_user->resetPassword($this->password);
         return true;
     }
     return false;
 }
 /**
  * @param $params
  * @return ActiveDataProvider
  */
 public function search($params)
 {
     $query = User::find();
     $dataProvider = new ActiveDataProvider(['query' => $query]);
     if (!($this->load($params) && $this->validate())) {
         return $dataProvider;
     }
     $this->addCondition($query, 'username', true);
     $this->addCondition($query, 'email', true);
     $this->addCondition($query, 'created_at');
     $this->addCondition($query, 'registered_from');
     return $dataProvider;
 }
 public function testRecoverable()
 {
     $this->user = User::findOne(1);
     $this->user->sendRecoveryMessage();
     $this->specify('correct user confirmation url should be returned', function () {
         $needle = \Yii::$app->getUrlManager()->createAbsoluteUrl(['/user/recovery/reset', 'id' => $this->user->id, 'token' => $this->user->recovery_token]);
         verify($this->user->getRecoveryUrl())->contains($needle);
     });
     $this->specify('confirmation token should become invalid after specified time', function () {
         \Yii::$app->getModule('user')->recoverWithin = $expirationTime = 86400;
         $user = new User(['recovery_token' => 'NNWJf_CoV8ocX3AsYK38CoOGkXUcpQK4', 'recovery_sent_at' => time()]);
         verify($user->getIsRecoveryPeriodExpired())->false();
         $user = new User(['recovery_token' => 'NNWJf_CoV8ocX3AsYK38CoOGkXUcpQK4', 'recovery_sent_at' => time() - $expirationTime - 1]);
         verify($user->getIsRecoveryPeriodExpired())->true();
     });
 }
use hipstercreative\user\tests\_pages\LoginPage;
use yii\helpers\Html;
use yii\helpers\Url;
use hipstercreative\user\models\User;
$I = new TestGuy($scenario);
$I->wantTo('ensure that password recovery works');
$page = RecoveryPage::openBy($I);
$I->amGoingTo('try to request recovery token for unconfirmed account');
$user = $I->getFixture('user')->getModel('unconfirmed');
$page->recover($user->email);
$I->see('You need to confirm your email address');
$I->amGoingTo('try to request recovery token');
$user = $I->getFixture('user')->getModel('user');
$page->recover($user->email);
$I->see('You have been sent an email with instructions on how to reset your password.');
$user = $I->grabRecord(User::className(), ['email' => $user->email]);
$I->seeInEmail(Html::encode($user->getRecoveryUrl()));
$I->seeInEmailRecipients($user->email);
$I->amGoingTo('reset password with invalid token');
$user = $I->getFixture('user')->getModel('user_with_expired_recovery_token');
$I->amOnPage(Url::toRoute(['/user/recovery/reset', 'id' => $user->id, 'token' => $user->recovery_token]));
$I->see('Recovery token is invalid');
$I->amGoingTo('reset password');
$user = $I->getFixture('user')->getModel('user_with_recovery_token');
$I->amOnPage(Url::toRoute(['/user/recovery/reset', 'id' => $user->id, 'token' => $user->recovery_token]));
$I->fillField('#recovery-form-password', 'newpass');
$I->click('Finish');
$I->see('Password recovery finished');
$page = LoginPage::openBy($I);
$page->login($user->email, 'qwerty');
$I->see('Invalid login or password');
<?php

use hipstercreative\user\tests\_pages\ResendPage;
use hipstercreative\user\models\User;
$I = new TestGuy($scenario);
$I->wantTo('ensure that resending of confirmation tokens works');
$page = ResendPage::openBy($I);
$I->amGoingTo('try to resend token to non-existent user');
$page->resend('*****@*****.**');
$I->see('Email is invalid');
$I->amGoingTo('try to resend token to already confirmed user');
$user = $I->getFixture('user')->getModel('user');
$page->resend($user->email);
$I->see('This account has already been confirmed');
$I->amGoingTo('try to resend token to unconfirmed user');
$user = $I->getFixture('user')->getModel('unconfirmed');
$I->seeRecord(User::className(), ['confirmation_token' => $user->confirmation_token]);
$page->resend($user->email);
$I->see('Awesome, almost there! We need to confirm your email address');
$I->dontSeeRecord(User::className(), ['confirmation_token' => $user->confirmation_token]);
use hipstercreative\user\tests\_pages\LoginPage;
use hipstercreative\user\models\User;
use yii\helpers\Html;
$I = new TestGuy($scenario);
$I->wantTo('ensure that email settings works');
$loginPage = LoginPage::openBy($I);
$user = $I->getFixture('user')->getModel('user');
$loginPage->login($user->email, 'qwerty');
$I->amGoingTo('update email');
$page = EmailSettingsPage::openBy($I);
$page->updateEmail('wrong', '*****@*****.**');
$I->see('Current password is not valid');
$page->updateEmail('qwerty', '*****@*****.**');
$I->see('Before your email will be changed we need you to confirm your new email address');
$I->seeRecord(User::className(), ['id' => $user->id, 'email' => '*****@*****.**', 'unconfirmed_email' => '*****@*****.**']);
$user = $I->grabRecord(User::className(), ['id' => $user->id]);
$I->seeInEmail(Html::encode($user->getConfirmationUrl()));
$I->seeInEmailRecipients($user->unconfirmed_email);
Yii::$app->getUser()->logout();
$I->amGoingTo('login with new email');
$loginPage = LoginPage::openBy($I);
$loginPage->login('*****@*****.**', 'qwerty');
$I->see('Invalid login or password');
$user->confirm(false);
$loginPage = LoginPage::openBy($I);
$loginPage->login('*****@*****.**', 'qwerty');
$I->see('Invalid login or password');
$loginPage->login('*****@*****.**', 'qwerty');
$I->see('Logout');
$I->seeRecord(User::className(), ['id' => 1, 'email' => '*****@*****.**', 'unconfirmed_email' => null]);
<?php

use yii\helpers\Url;
use hipstercreative\user\models\User;
$I = new TestGuy($scenario);
$I->wantTo('ensure that confirmation works');
$I->amGoingTo('check that error is showed when token expired');
$user = $I->getFixture('user')->getModel('unconfirmed_with_expired_token');
$I->amOnPage(Url::toRoute(['/user/registration/confirm', 'id' => $user->id, 'token' => $user->confirmation_token]));
$I->see('Confirmation token is invalid');
$I->amGoingTo('check that user get confirmed');
$user = $I->getFixture('user')->getModel('unconfirmed');
$I->amOnPage(Url::toRoute(['/user/registration/confirm', 'id' => $user->id, 'token' => $user->confirmation_token]));
$I->see('Your account has been confirmed');
$I->seeRecord(User::className(), ['id' => $user->id, 'confirmation_token' => null, 'confirmation_sent_at' => null]);
<?php

use hipstercreative\user\tests\_pages\RegisterPage;
use yii\helpers\Html;
use hipstercreative\user\models\User;
$I = new TestGuy($scenario);
$I->wantTo('ensure that registration works');
$page = RegisterPage::openBy($I);
$I->amGoingTo('try to register with empty credentials');
$page->register('', '', '');
$I->see('Username cannot be blank');
$I->see('Email cannot be blank');
$I->see('Password cannot be blank');
$I->amGoingTo('try to register with already used email and username');
$page->register('user', '*****@*****.**', 'qwerty');
$I->see(Html::encode('Username "user" has already been taken'));
$I->see(Html::encode('Email "*****@*****.**" has already been taken'));
$I->amGoingTo('try to register with enabled confirmation');
$page->register('tester', '*****@*****.**', 'tester');
$I->see('Awesome, almost there! We need to confirm your email address');
$user = $I->grabRecord(User::className(), ['email' => '*****@*****.**']);
$I->seeInEmail(Html::encode($user->getConfirmationUrl()));