mirror of
				https://github.com/elyby/accounts.git
				synced 2025-05-31 14:11:46 +05:30 
			
		
		
		
	Добавлена логика HasJoined для сервера авторизации Minecraft
Исправлена ошибка в JoinForm Добавлено базовое API для общения с сервером системы скинов
This commit is contained in:
		@@ -18,4 +18,14 @@ class SessionServerRoute extends BasePage {
 | 
			
		||||
        $this->actor->sendGET($this->getUrl(), $params);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function hasJoined(array $params) {
 | 
			
		||||
        $this->route = ['sessionserver/session/has-joined'];
 | 
			
		||||
        $this->actor->sendGET($this->getUrl(), $params);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function hasJoinedLegacy(array $params) {
 | 
			
		||||
        $this->route = ['sessionserver/session/has-joined-legacy'];
 | 
			
		||||
        $this->actor->sendGET($this->getUrl(), $params);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -6,6 +6,7 @@ modules:
 | 
			
		||||
        - tests\codeception\common\_support\FixtureHelper
 | 
			
		||||
        - Redis
 | 
			
		||||
        - AMQP
 | 
			
		||||
        - Asserts
 | 
			
		||||
        - REST:
 | 
			
		||||
            depends: Yii2
 | 
			
		||||
    config:
 | 
			
		||||
 
 | 
			
		||||
@@ -0,0 +1,38 @@
 | 
			
		||||
<?php
 | 
			
		||||
namespace tests\codeception\api\functional\_steps;
 | 
			
		||||
 | 
			
		||||
use common\models\OauthScope as S;
 | 
			
		||||
use Faker\Provider\Uuid;
 | 
			
		||||
use tests\codeception\api\_pages\SessionServerRoute;
 | 
			
		||||
 | 
			
		||||
class SessionServerSteps extends \tests\codeception\api\FunctionalTester {
 | 
			
		||||
 | 
			
		||||
    public function amJoined($byLegacy = false) {
 | 
			
		||||
        $oauthSteps = new OauthSteps($this->scenario);
 | 
			
		||||
        $accessToken = $oauthSteps->getAccessToken([S::MINECRAFT_SERVER_SESSION]);
 | 
			
		||||
        $route = new SessionServerRoute($this);
 | 
			
		||||
        $serverId = Uuid::uuid();
 | 
			
		||||
        $username = 'Admin';
 | 
			
		||||
 | 
			
		||||
        if ($byLegacy) {
 | 
			
		||||
            $route->joinLegacy([
 | 
			
		||||
                'sessionId' => 'token:' . $accessToken . ':' . 'df936908-b2e1-544d-96f8-2977ec213022',
 | 
			
		||||
                'user' => $username,
 | 
			
		||||
                'serverId' => $serverId,
 | 
			
		||||
            ]);
 | 
			
		||||
 | 
			
		||||
            $this->canSeeResponseEquals('OK');
 | 
			
		||||
        } else {
 | 
			
		||||
            $route->join([
 | 
			
		||||
                'accessToken' => $accessToken,
 | 
			
		||||
                'selectedProfile' => 'df936908-b2e1-544d-96f8-2977ec213022',
 | 
			
		||||
                'serverId' => $serverId,
 | 
			
		||||
            ]);
 | 
			
		||||
 | 
			
		||||
            $this->canSeeResponseContainsJson(['id' => 'OK']);
 | 
			
		||||
        }
 | 
			
		||||
 | 
			
		||||
        return [$username, $serverId];
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,83 @@
 | 
			
		||||
<?php
 | 
			
		||||
namespace tests\codeception\api\functional\sessionserver;
 | 
			
		||||
 | 
			
		||||
use Faker\Provider\Uuid;
 | 
			
		||||
use tests\codeception\api\_pages\SessionServerRoute;
 | 
			
		||||
use tests\codeception\api\functional\_steps\SessionServerSteps;
 | 
			
		||||
use tests\codeception\api\FunctionalTester;
 | 
			
		||||
 | 
			
		||||
class HasJoinedCest {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var SessionServerRoute
 | 
			
		||||
     */
 | 
			
		||||
    private $route;
 | 
			
		||||
 | 
			
		||||
    public function _before(FunctionalTester $I) {
 | 
			
		||||
        $this->route = new SessionServerRoute($I);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function hasJoined(SessionServerSteps $I) {
 | 
			
		||||
        $I->wantTo('check hasJoined user to some server');
 | 
			
		||||
        list($username, $serverId) = $I->amJoined();
 | 
			
		||||
 | 
			
		||||
        $this->route->hasJoined([
 | 
			
		||||
            'username' => $username,
 | 
			
		||||
            'serverId' => $serverId,
 | 
			
		||||
        ]);
 | 
			
		||||
        $I->seeResponseCodeIs(200);
 | 
			
		||||
        $I->seeResponseIsJson();
 | 
			
		||||
        $I->canSeeResponseContainsJson([
 | 
			
		||||
            'name' => $username,
 | 
			
		||||
            'id' => 'df936908b2e1544d96f82977ec213022',
 | 
			
		||||
            'ely' => true,
 | 
			
		||||
            'properties' => [
 | 
			
		||||
                [
 | 
			
		||||
                    'name' => 'textures',
 | 
			
		||||
                    'signature' => 'Cg==',
 | 
			
		||||
                ],
 | 
			
		||||
            ],
 | 
			
		||||
        ]);
 | 
			
		||||
        $I->canSeeResponseJsonMatchesJsonPath('$.properties[0].value');
 | 
			
		||||
        $value = json_decode($I->grabResponse(), true)['properties'][0]['value'];
 | 
			
		||||
        $decoded = json_decode(base64_decode($value), true);
 | 
			
		||||
        $I->assertArrayHasKey('timestamp', $decoded);
 | 
			
		||||
        $I->assertArrayHasKey('textures', $decoded);
 | 
			
		||||
        $I->assertEquals('df936908b2e1544d96f82977ec213022', $decoded['profileId']);
 | 
			
		||||
        $I->assertEquals('Admin', $decoded['profileName']);
 | 
			
		||||
        $I->assertTrue($decoded['ely']);
 | 
			
		||||
        $textures = $decoded['textures'];
 | 
			
		||||
        $I->assertArrayHasKey('SKIN', $textures);
 | 
			
		||||
        $skinTextures = $textures['SKIN'];
 | 
			
		||||
        $I->assertArrayHasKey('url', $skinTextures);
 | 
			
		||||
        $I->assertArrayHasKey('hash', $skinTextures);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function wrongArguments(FunctionalTester $I) {
 | 
			
		||||
        $I->wantTo('get error on wrong amount of arguments');
 | 
			
		||||
        $this->route->hasJoined([
 | 
			
		||||
            'wrong' => 'argument',
 | 
			
		||||
        ]);
 | 
			
		||||
        $I->canSeeResponseCodeIs(400);
 | 
			
		||||
        $I->canSeeResponseIsJson();
 | 
			
		||||
        $I->canSeeResponseContainsJson([
 | 
			
		||||
            'error' => 'IllegalArgumentException',
 | 
			
		||||
            'errorMessage' => 'credentials can not be null.',
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function hasJoinedWithNoJoinOperation(FunctionalTester $I) {
 | 
			
		||||
        $I->wantTo('hasJoined to some server without join call');
 | 
			
		||||
        $this->route->hasJoined([
 | 
			
		||||
            'username' => 'some-username',
 | 
			
		||||
            'serverId' => Uuid::uuid(),
 | 
			
		||||
        ]);
 | 
			
		||||
        $I->seeResponseCodeIs(401);
 | 
			
		||||
        $I->seeResponseIsJson();
 | 
			
		||||
        $I->canSeeResponseContainsJson([
 | 
			
		||||
            'error' => 'ForbiddenOperationException',
 | 
			
		||||
            'errorMessage' => 'Invalid token.',
 | 
			
		||||
        ]);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
@@ -0,0 +1,51 @@
 | 
			
		||||
<?php
 | 
			
		||||
namespace tests\codeception\api\functional\sessionserver;
 | 
			
		||||
 | 
			
		||||
use Faker\Provider\Uuid;
 | 
			
		||||
use tests\codeception\api\_pages\SessionServerRoute;
 | 
			
		||||
use tests\codeception\api\functional\_steps\SessionServerSteps;
 | 
			
		||||
use tests\codeception\api\FunctionalTester;
 | 
			
		||||
 | 
			
		||||
class HasJoinedLegacyCest {
 | 
			
		||||
 | 
			
		||||
    /**
 | 
			
		||||
     * @var SessionServerRoute
 | 
			
		||||
     */
 | 
			
		||||
    private $route;
 | 
			
		||||
 | 
			
		||||
    public function _before(FunctionalTester $I) {
 | 
			
		||||
        $this->route = new SessionServerRoute($I);
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function hasJoined(SessionServerSteps $I) {
 | 
			
		||||
        $I->wantTo('test hasJoined user to some server by legacy version');
 | 
			
		||||
        list($username, $serverId) = $I->amJoined(true);
 | 
			
		||||
 | 
			
		||||
        $this->route->hasJoinedLegacy([
 | 
			
		||||
            'user' => $username,
 | 
			
		||||
            'serverId' => $serverId,
 | 
			
		||||
        ]);
 | 
			
		||||
        $I->seeResponseCodeIs(200);
 | 
			
		||||
        $I->canSeeResponseEquals('YES');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function wrongArguments(FunctionalTester $I) {
 | 
			
		||||
        $I->wantTo('get error on wrong amount of arguments');
 | 
			
		||||
        $this->route->hasJoinedLegacy([
 | 
			
		||||
            'wrong' => 'argument',
 | 
			
		||||
        ]);
 | 
			
		||||
        $I->canSeeResponseCodeIs(400);
 | 
			
		||||
        $I->canSeeResponseEquals('credentials can not be null.');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
    public function hasJoinedWithNoJoinOperation(FunctionalTester $I) {
 | 
			
		||||
        $I->wantTo('hasJoined by legacy version to some server without join call');
 | 
			
		||||
        $this->route->hasJoinedLegacy([
 | 
			
		||||
            'user' => 'random-username',
 | 
			
		||||
            'serverId' => Uuid::uuid(),
 | 
			
		||||
        ]);
 | 
			
		||||
        $I->seeResponseCodeIs(401);
 | 
			
		||||
        $I->canSeeResponseEquals('NO');
 | 
			
		||||
    }
 | 
			
		||||
 | 
			
		||||
}
 | 
			
		||||
		Reference in New Issue
	
	Block a user