mirror of
				https://github.com/elyby/accounts.git
				synced 2025-05-31 14:11:46 +05:30 
			
		
		
		
	Рефакторинг common unit тестов
This commit is contained in:
		@@ -8,4 +8,6 @@ class MojangUsernameFixture extends ActiveFixture {
 | 
			
		||||
 | 
			
		||||
    public $modelClass = MojangUsername::class;
 | 
			
		||||
 | 
			
		||||
    public $dataFile = '@tests/codeception/common/fixtures/data/mojang-usernames.php';
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -8,6 +8,8 @@ class OauthClientFixture extends ActiveFixture {
 | 
			
		||||
 | 
			
		||||
    public $modelClass = OauthClient::class;
 | 
			
		||||
 | 
			
		||||
    public $dataFile = '@tests/codeception/common/fixtures/data/oauth-clients.php';
 | 
			
		||||
 | 
			
		||||
    public $depends = [
 | 
			
		||||
        AccountFixture::class,
 | 
			
		||||
    ];
 | 
			
		||||
 
 | 
			
		||||
@@ -9,6 +9,8 @@ class OauthSessionFixture extends ActiveFixture {
 | 
			
		||||
 | 
			
		||||
    public $modelClass = OauthSession::class;
 | 
			
		||||
 | 
			
		||||
    public $dataFile = '@tests/codeception/common/fixtures/data/oauth-sessions.php';
 | 
			
		||||
 | 
			
		||||
    public $depends = [
 | 
			
		||||
        OauthClientFixture::class,
 | 
			
		||||
        AccountFixture::class,
 | 
			
		||||
 
 | 
			
		||||
@@ -1,6 +1,8 @@
 | 
			
		||||
# Codeception Test Suite Configuration
 | 
			
		||||
 | 
			
		||||
# suite for unit (internal) tests.
 | 
			
		||||
# RUN `build` COMMAND AFTER ADDING/REMOVING MODULES.
 | 
			
		||||
 | 
			
		||||
class_name: UnitTester
 | 
			
		||||
modules:
 | 
			
		||||
    enabled:
 | 
			
		||||
        - Yii2:
 | 
			
		||||
            part: [orm, email, fixtures]
 | 
			
		||||
    config:
 | 
			
		||||
        Yii2:
 | 
			
		||||
            configFile: '../config/api/unit.php'
 | 
			
		||||
 
 | 
			
		||||
@@ -1,11 +0,0 @@
 | 
			
		||||
<?php
 | 
			
		||||
 | 
			
		||||
namespace tests\codeception\common\unit;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @inheritdoc
 | 
			
		||||
 */
 | 
			
		||||
class DbTestCase extends \yii\codeception\DbTestCase
 | 
			
		||||
{
 | 
			
		||||
    public $appConfig = '@tests/codeception/config/common/unit.php';
 | 
			
		||||
}
 | 
			
		||||
@@ -1,8 +1,22 @@
 | 
			
		||||
<?php
 | 
			
		||||
namespace tests\codeception\common\unit;
 | 
			
		||||
 | 
			
		||||
class TestCase extends \yii\codeception\TestCase {
 | 
			
		||||
class TestCase extends \Codeception\Test\Unit  {
 | 
			
		||||
 | 
			
		||||
    public $appConfig = '@tests/codeception/config/common/unit.php';
 | 
			
		||||
    /**
 | 
			
		||||
     * @var \tests\codeception\common\UnitTester
 | 
			
		||||
     */
 | 
			
		||||
    protected $tester;
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * Список фикстур, что будут загружены перед тестом, но после зачистки базы данных
 | 
			
		||||
     *
 | 
			
		||||
     * @url http://codeception.com/docs/modules/Yii2#fixtures
 | 
			
		||||
     *
 | 
			
		||||
     * @return array
 | 
			
		||||
     */
 | 
			
		||||
    public function _fixtures() {
 | 
			
		||||
        return [];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -13,23 +13,19 @@ class DataBehaviorTest extends TestCase {
 | 
			
		||||
    use ProtectedCaller;
 | 
			
		||||
 | 
			
		||||
    public function testSetKey() {
 | 
			
		||||
        $this->specify('setting value should change model data field', function() {
 | 
			
		||||
            $model = $this->createModel();
 | 
			
		||||
            /** @var DataBehavior $behavior */
 | 
			
		||||
            $behavior = $model->behaviors['dataBehavior'];
 | 
			
		||||
            $this->callProtected($behavior, 'setKey', 'my-key', 'my-value');
 | 
			
		||||
            expect($model->_data)->equals(serialize(['my-key' => 'my-value']));
 | 
			
		||||
        });
 | 
			
		||||
        $model = $this->createModel();
 | 
			
		||||
        /** @var DataBehavior $behavior */
 | 
			
		||||
        $behavior = $model->behaviors['dataBehavior'];
 | 
			
		||||
        $this->callProtected($behavior, 'setKey', 'my-key', 'my-value');
 | 
			
		||||
        $this->assertEquals(serialize(['my-key' => 'my-value']), $model->_data);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function testGetKey() {
 | 
			
		||||
        $this->specify('getting value from exists data should work', function() {
 | 
			
		||||
            $model = $this->createModel();
 | 
			
		||||
            $model->_data = serialize(['some-key' => 'some-value']);
 | 
			
		||||
            /** @var DataBehavior $behavior */
 | 
			
		||||
            $behavior = $model->behaviors['dataBehavior'];
 | 
			
		||||
            expect($this->callProtected($behavior, 'getKey', 'some-key'))->equals('some-value');
 | 
			
		||||
        });
 | 
			
		||||
        $model = $this->createModel();
 | 
			
		||||
        $model->_data = serialize(['some-key' => 'some-value']);
 | 
			
		||||
        /** @var DataBehavior $behavior */
 | 
			
		||||
        $behavior = $model->behaviors['dataBehavior'];
 | 
			
		||||
        $this->assertEquals('some-value', $this->callProtected($behavior, 'getKey', 'some-key'));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function testGetData() {
 | 
			
		||||
 
 | 
			
		||||
@@ -12,12 +12,10 @@ class EmailActivationExpirationBehaviorTest extends TestCase {
 | 
			
		||||
    use ProtectedCaller;
 | 
			
		||||
 | 
			
		||||
    public function testCalculateTime() {
 | 
			
		||||
        $this->specify('just use create_time and plus passed time', function() {
 | 
			
		||||
            $behavior = $this->createBehavior();
 | 
			
		||||
            $time = time();
 | 
			
		||||
            $behavior->owner->created_at = $time;
 | 
			
		||||
            expect($this->callProtected($behavior, 'calculateTime', 10))->equals($time + 10);
 | 
			
		||||
        });
 | 
			
		||||
        $behavior = $this->createBehavior();
 | 
			
		||||
        $time = time();
 | 
			
		||||
        $behavior->owner->created_at = $time;
 | 
			
		||||
        $this->assertEquals($time + 10, $this->callProtected($behavior, 'calculateTime', 10));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function testCompareTime() {
 | 
			
		||||
 
 | 
			
		||||
@@ -1,35 +1,27 @@
 | 
			
		||||
<?php
 | 
			
		||||
namespace codeception\common\unit\models;
 | 
			
		||||
 | 
			
		||||
use Codeception\Specify;
 | 
			
		||||
use common\models\AccountSession;
 | 
			
		||||
use tests\codeception\common\unit\TestCase;
 | 
			
		||||
 | 
			
		||||
class AccountSessionTest extends TestCase {
 | 
			
		||||
    use Specify;
 | 
			
		||||
 | 
			
		||||
    public function testGenerateRefreshToken() {
 | 
			
		||||
        $this->specify('method call will set refresh_token value', function() {
 | 
			
		||||
            $model = new AccountSession();
 | 
			
		||||
            $model->generateRefreshToken();
 | 
			
		||||
            expect($model->refresh_token)->notNull();
 | 
			
		||||
        });
 | 
			
		||||
        $model = new AccountSession();
 | 
			
		||||
        $model->generateRefreshToken();
 | 
			
		||||
        $this->assertNotNull($model->refresh_token, 'method call will set refresh_token value');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function testSetIp() {
 | 
			
		||||
        $this->specify('method should convert passed ip string to long', function() {
 | 
			
		||||
            $model = new AccountSession();
 | 
			
		||||
            $model->setIp('127.0.0.1');
 | 
			
		||||
            expect($model->last_used_ip)->equals(2130706433);
 | 
			
		||||
        });
 | 
			
		||||
        $model = new AccountSession();
 | 
			
		||||
        $model->setIp('127.0.0.1');
 | 
			
		||||
        $this->assertEquals(2130706433, $model->last_used_ip, 'method should convert passed ip string to long');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function testGetReadableIp() {
 | 
			
		||||
        $this->specify('method should convert stored ip long into readable ip string', function() {
 | 
			
		||||
            $model = new AccountSession();
 | 
			
		||||
            $model->last_used_ip = 2130706433;
 | 
			
		||||
            expect($model->getReadableIp())->equals('127.0.0.1');
 | 
			
		||||
        });
 | 
			
		||||
        $model = new AccountSession();
 | 
			
		||||
        $model->last_used_ip = 2130706433;
 | 
			
		||||
        $this->assertEquals('127.0.0.1', $model->getReadableIp(), 'method should convert stored long into readable ip');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,27 +6,17 @@ use common\components\UserPass;
 | 
			
		||||
use common\models\Account;
 | 
			
		||||
use tests\codeception\common\fixtures\AccountFixture;
 | 
			
		||||
use tests\codeception\common\fixtures\MojangUsernameFixture;
 | 
			
		||||
use tests\codeception\common\unit\DbTestCase;
 | 
			
		||||
use tests\codeception\common\unit\TestCase;
 | 
			
		||||
use Yii;
 | 
			
		||||
use const common\LATEST_RULES_VERSION;
 | 
			
		||||
 | 
			
		||||
/**
 | 
			
		||||
 * @property array $accounts
 | 
			
		||||
 * @property array $mojangAccounts
 | 
			
		||||
 */
 | 
			
		||||
class AccountTest extends DbTestCase {
 | 
			
		||||
class AccountTest extends TestCase {
 | 
			
		||||
    use Specify;
 | 
			
		||||
 | 
			
		||||
    public function fixtures() {
 | 
			
		||||
    public function _fixtures() {
 | 
			
		||||
        return [
 | 
			
		||||
            'accounts' => [
 | 
			
		||||
                'class' => AccountFixture::class,
 | 
			
		||||
                'dataFile' => '@tests/codeception/common/fixtures/data/accounts.php',
 | 
			
		||||
            ],
 | 
			
		||||
            'mojangAccounts' => [
 | 
			
		||||
                'class' => MojangUsernameFixture::class,
 | 
			
		||||
                'dataFile' => '@tests/codeception/common/fixtures/data/mojang-usernames.php',
 | 
			
		||||
            ],
 | 
			
		||||
            'accounts' => AccountFixture::class,
 | 
			
		||||
            'mojangAccounts' => MojangUsernameFixture::class,
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
@@ -73,7 +63,8 @@ class AccountTest extends DbTestCase {
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        $this->specify('username should be unique', function() {
 | 
			
		||||
            $model = new Account(['username' => $this->accounts['admin']['username']]);
 | 
			
		||||
            $model = new Account();
 | 
			
		||||
            $model->username = $this->tester->grabFixture('accounts', 'admin')['username'];
 | 
			
		||||
            expect($model->validate('username'))->false();
 | 
			
		||||
            expect($model->getErrors('username'))->equals(['error.username_not_available']);
 | 
			
		||||
        });
 | 
			
		||||
@@ -111,7 +102,7 @@ class AccountTest extends DbTestCase {
 | 
			
		||||
        });
 | 
			
		||||
 | 
			
		||||
        $this->specify('email should be unique', function() {
 | 
			
		||||
            $model = new Account(['email' => $this->accounts['admin']['email']]);
 | 
			
		||||
            $model = new Account(['email' => $this->tester->grabFixture('accounts', 'admin')['email']]);
 | 
			
		||||
            expect($model->validate('email'))->false();
 | 
			
		||||
            expect($model->getErrors('email'))->equals(['error.email_not_available']);
 | 
			
		||||
        });
 | 
			
		||||
 
 | 
			
		||||
@@ -1,31 +1,35 @@
 | 
			
		||||
<?php
 | 
			
		||||
namespace codeception\common\unit\models;
 | 
			
		||||
 | 
			
		||||
use Codeception\Specify;
 | 
			
		||||
use common\models\confirmations\ForgotPassword;
 | 
			
		||||
use common\models\confirmations\RegistrationConfirmation;
 | 
			
		||||
use common\models\confirmations;
 | 
			
		||||
use common\models\EmailActivation;
 | 
			
		||||
use tests\codeception\common\fixtures\EmailActivationFixture;
 | 
			
		||||
use tests\codeception\common\unit\DbTestCase;
 | 
			
		||||
use tests\codeception\common\unit\TestCase;
 | 
			
		||||
 | 
			
		||||
class EmailActivationTest extends DbTestCase {
 | 
			
		||||
    use Specify;
 | 
			
		||||
class EmailActivationTest extends TestCase {
 | 
			
		||||
 | 
			
		||||
    public function fixtures() {
 | 
			
		||||
    public function _fixtures() {
 | 
			
		||||
        return [
 | 
			
		||||
            'emailActivations' => EmailActivationFixture::class,
 | 
			
		||||
        ];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function testInstantiate() {
 | 
			
		||||
        $this->specify('return valid model type', function() {
 | 
			
		||||
            expect(EmailActivation::findOne([
 | 
			
		||||
                'type' => EmailActivation::TYPE_REGISTRATION_EMAIL_CONFIRMATION,
 | 
			
		||||
            ]))->isInstanceOf(RegistrationConfirmation::class);
 | 
			
		||||
            expect(EmailActivation::findOne([
 | 
			
		||||
                'type' => EmailActivation::TYPE_FORGOT_PASSWORD_KEY,
 | 
			
		||||
            ]))->isInstanceOf(ForgotPassword::class);
 | 
			
		||||
        });
 | 
			
		||||
        $this->assertInstanceOf(confirmations\RegistrationConfirmation::class, EmailActivation::findOne([
 | 
			
		||||
            'type' => EmailActivation::TYPE_REGISTRATION_EMAIL_CONFIRMATION,
 | 
			
		||||
        ]));
 | 
			
		||||
 | 
			
		||||
        $this->assertInstanceOf(confirmations\ForgotPassword::class, EmailActivation::findOne([
 | 
			
		||||
            'type' => EmailActivation::TYPE_FORGOT_PASSWORD_KEY,
 | 
			
		||||
        ]));
 | 
			
		||||
 | 
			
		||||
        $this->assertInstanceOf(confirmations\CurrentEmailConfirmation::class, EmailActivation::findOne([
 | 
			
		||||
            'type' => EmailActivation::TYPE_CURRENT_EMAIL_CONFIRMATION,
 | 
			
		||||
        ]));
 | 
			
		||||
 | 
			
		||||
        $this->assertInstanceOf(confirmations\NewEmailConfirmation::class, EmailActivation::findOne([
 | 
			
		||||
            'type' => EmailActivation::TYPE_NEW_EMAIL_CONFIRMATION,
 | 
			
		||||
        ]));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -11,25 +11,18 @@ class LanguageValidatorTest extends TestCase {
 | 
			
		||||
    use ProtectedCaller;
 | 
			
		||||
 | 
			
		||||
    public function testGetFilesNames() {
 | 
			
		||||
        $this->specify('get list of 2 languages: ru and en', function() {
 | 
			
		||||
            $model = $this->createModelWithFixturePath();
 | 
			
		||||
            expect($this->callProtected($model, 'getFilesNames'))->equals(['en', 'ru']);
 | 
			
		||||
        });
 | 
			
		||||
        $model = $this->createModelWithFixturePath();
 | 
			
		||||
        $this->assertEquals(['en', 'ru'], $this->callProtected($model, 'getFilesNames'));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function testValidateValue() {
 | 
			
		||||
        $this->specify('get null, because language is supported', function() {
 | 
			
		||||
            $model = $this->createModelWithFixturePath();
 | 
			
		||||
            expect($this->callProtected($model, 'validateValue', 'ru'))->null();
 | 
			
		||||
        });
 | 
			
		||||
    public function testValidateValueSupportedLanguage() {
 | 
			
		||||
        $model = $this->createModelWithFixturePath();
 | 
			
		||||
        $this->assertNull($this->callProtected($model, 'validateValue', 'ru'));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
        $this->specify('get error message, because language is unsupported', function() {
 | 
			
		||||
            $model = $this->createModelWithFixturePath();
 | 
			
		||||
            expect($this->callProtected($model, 'validateValue', 'by'))->equals([
 | 
			
		||||
                $model->message,
 | 
			
		||||
                [],
 | 
			
		||||
            ]);
 | 
			
		||||
        });
 | 
			
		||||
    public function testValidateNotSupportedLanguage() {
 | 
			
		||||
        $model = $this->createModelWithFixturePath();
 | 
			
		||||
        $this->assertEquals([$model->message, []], $this->callProtected($model, 'validateValue', 'by'));
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user