<?php

namespace OAuth2\Storage;

use OAuth2\Encryption\Jwt;

class jwtAccessTokenTest extends BaseTest
{
    /** @dataProvider provideStorage */
    public function testSetAccessToken($storage)
    {
        if (!$storage instanceof PublicKey) {
            // incompatible storage
            return;
        }

        $crypto = new jwtAccessToken($storage);

        $publicKeyStorage = Bootstrap::getInstance()->getMemoryStorage();
        $encryptionUtil = new Jwt();

        $jwtAccessToken = array(
            'access_token' => rand(),
            'expires' => time() + 100,
            'scope'   => 'foo',
        );

        $token = $encryptionUtil->encode($jwtAccessToken, $storage->getPrivateKey(), $storage->getEncryptionAlgorithm());

        $this->assertNotNull($token);

        $tokenData = $crypto->getAccessToken($token);

        $this->assertTrue(is_array($tokenData));

        /* assert the decoded token is the same */
        $this->assertEquals($tokenData['access_token'], $jwtAccessToken['access_token']);
        $this->assertEquals($tokenData['expires'], $jwtAccessToken['expires']);
        $this->assertEquals($tokenData['scope'], $jwtAccessToken['scope']);
    }
}
