Пример #1
0
 /**
  * Tests validation rules for the model.
  */
 public function testLoginFormValidationRules()
 {
     $form = Yii::createObject(LoginForm::className());
     $this->specify('login is required', function () use($form) {
         $form->setAttributes(['login' => '']);
         verify($form->validate())->false();
         verify($form->getErrors('login'))->contains('Login cannot be blank.');
     });
     $this->specify('password is required', function () use($form) {
         $form->setAttributes(['password' => '']);
         verify($form->validate())->false();
         verify($form->getErrors('password'))->contains('Password cannot be blank.');
     });
     $this->specify('user should exist in database', function () use($form) {
         $finder = test::double(Finder::className(), ['findUserByUsernameOrEmail' => null]);
         $form->setAttributes(['login' => 'tester', 'password' => 'qwerty']);
         verify($form->validate())->false();
         verify($form->getErrors('password'))->contains('Invalid login or password');
         $finder->verifyInvoked('findUserByUsernameOrEmail');
     });
     $this->specify('password should be valid', function () use($form) {
         test::double(Finder::className(), ['findUserByUsernameOrEmail' => \Yii::createObject(User::className())]);
         test::double(Security::className(), ['validatePassword' => false]);
         $form->setAttributes(['password' => 'qwerty']);
         verify($form->validate(['password']))->false();
         verify($form->getErrors('password'))->contains('Invalid login or password');
         test::double(Security::className(), ['validatePassword' => true]);
         verify($form->validate(['password']))->true();
     });
     $this->specify('user may not be confirmed when enableUnconfirmedLogin is true', function () use($form) {
         \Yii::$app->getModule('user')->enableUnconfirmedLogin = true;
         $user = \Yii::createObject(User::className());
         test::double($user, ['getIsConfirmed' => true]);
         test::double(Finder::className(), ['findUserByUsernameOrEmail' => $user]);
         verify($form->validate())->true();
         test::double($user, ['getIsConfirmed' => false]);
         verify($form->validate())->true();
     });
     $this->specify('user should be confirmed when enableUnconfirmedLogin is true', function () use($form) {
         \Yii::$app->getModule('user')->enableUnconfirmedLogin = false;
         verify($form->validate())->false();
         verify($form->getErrors('login'))->contains('You need to confirm your email address');
         $user = \Yii::createObject(User::className());
         test::double($user, ['getIsConfirmed' => true]);
         test::double(Finder::className(), ['findUserByUsernameOrEmail' => $user]);
         verify($form->validate())->true();
     });
     $this->specify('user should not be blocked', function () use($form) {
         $user = \Yii::createObject(User::className());
         test::double($user, ['getIsBlocked' => true]);
         test::double(Finder::className(), ['findUserByUsernameOrEmail' => $user]);
         verify($form->validate())->false();
         verify($form->getErrors('login'))->contains('Your account has been blocked');
     });
 }
 /**
  * @inheritdoc
  */
 public function init()
 {
     parent::init();
     if (is_string($this->security)) {
         $component = $this->security;
         $this->security = Yii::$app->{$component};
     } elseif (is_array($this->security)) {
         $this->security = Yii::createObject(array_merge(['class' => Security::className()], $this->security));
     }
     if (!$this->security instanceof Security) {
         throw new InvalidConfigException('The `security` attribute must extend `yii\\base\\Security`.');
     }
 }
Пример #3
0
 /**
  * Generates token with given length
  * @return string
  */
 public function generate()
 {
     $this->security = Instance::ensure($this->security, Security::className());
     return $this->security->generateRandomString($this->length);
 }