/**
  * Sends recovery message.
  *
  * @return bool
  */
 public function sendRecoveryMessage()
 {
     if ($this->validate()) {
         $this->_user->sendRecoveryMessage();
         return true;
     }
     return false;
 }
 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();
     });
 }