<?php
    
    namespace common\tests\unit\models;
    
    use Yii;
    use common\models\LoginForm;
    use common\fixtures\User as UserFixture;
    
    /**
     * Login form test
     */
    class LoginFormTest extends \Codeception\Test\Unit
    {
        /**
         * @var \common\tests\UnitTester
         */
        protected $tester;
        
        public function _before()
        {
            $this->tester->haveFixtures(
                [
                    'user' => [
                        'class'    => UserFixture::className(),
                        'dataFile' => codecept_data_dir() . 'user.php',
                    ],
                ]
            );
        }
        
        public function testLoginNoUser()
        {
            $model = new LoginForm(
                [
                    'username' => 'not_existing_username',
                    'password' => 'not_existing_password',
                ]
            );
            
            expect('model should not login user', $model->login())->false();
            expect('user should not be logged in', Yii::$app->user->isGuest)->true();
        }
        
        public function testLoginWrongPassword()
        {
            $model = new LoginForm(
                [
                    'username' => 'bayer.hudson',
                    'password' => 'wrong_password',
                ]
            );
            
            expect('model should not login user', $model->login())->false();
            expect('error message should be set', $model->errors)->hasKey('password');
            expect('user should not be logged in', Yii::$app->user->isGuest)->true();
        }
        
        public function testLoginCorrect()
        {
            $model = new LoginForm(
                [
                    'username' => 'bayer.hudson',
                    'password' => 'password_0',
                ]
            );
            
            expect('model should login user', $model->login())->true();
            expect('error message should not be set', $model->errors)->hasntKey('password');
            expect('user should be logged in', Yii::$app->user->isGuest)->false();
        }
    }
