<?php
namespace codeception\common\unit\components\Mojang;

use common\components\Mojang\Api;
use common\components\Mojang\response\UsernameToUUIDResponse;
use GuzzleHttp\Client as GuzzleClient;
use GuzzleHttp\Handler\MockHandler;
use GuzzleHttp\HandlerStack;
use GuzzleHttp\Psr7\Response;
use tests\codeception\common\unit\TestCase;
use Yii;

class ApiTest extends TestCase {

    /**
     * @var MockHandler
     */
    private $handler;

    public function _before() {
        parent::_before();

        $this->handler = new MockHandler();
        $handler = HandlerStack::create($this->handler);
        Yii::$app->set('guzzle', new GuzzleClient([
            'handler' => $handler,
        ]));
    }

    public function testUsernameToUUID() {
        $this->handler->append(new Response(200, [], '{"id": "7125ba8b1c864508b92bb5c042ccfe2b","name": "KrisJelbring"}'));
        $response = (new Api())->usernameToUUID('KrisJelbring');
        $this->assertInstanceOf(UsernameToUUIDResponse::class, $response);
        $this->assertEquals('7125ba8b1c864508b92bb5c042ccfe2b', $response->id);
        $this->assertEquals('KrisJelbring', $response->name);
    }

    /**
     * @expectedException \common\components\Mojang\exceptions\NoContentException
     */
    public function testUsernameToUUIDNoContent() {
        $this->handler->append(new Response(204));
        (new Api())->usernameToUUID('some-non-exists-user');
    }

    /**
     * @expectedException \GuzzleHttp\Exception\RequestException
     */
    public function testUsernameToUUID404() {
        $this->handler->append(new Response(404, [], '{"error":"Not Found","errorMessage":"The server has not found anything matching the request URI"}'));
        (new Api())->usernameToUUID('#hashedNickname');
    }

}