Home Reference Source Test Repository

unit/model/access-token.js

import chai from 'chai';
import AccessToken from '../../../src/model/access-token';
import { ACCESS_TOKEN_RESPONSE } from '../../test-data';


const should = chai.should();


/** @test {AccessToken} */
describe('AccessToken', () => {
    /** @type AccessToken */
    let accessToken;
    let responseClone;


    beforeEach(() => {
        responseClone = JSON.parse(JSON.stringify(ACCESS_TOKEN_RESPONSE));
        accessToken = new AccessToken(responseClone);
    });


    /** @test {AccessToken#constructor} */
    describe('constructor', () => {
        it('should not set an expiry date if expires_in is NaN', () => {
            responseClone = JSON.parse(JSON.stringify(ACCESS_TOKEN_RESPONSE));
            responseClone.expires_in = 'bad_value';
            const noExpiryAccessToken = new AccessToken(responseClone);

            chai.expect(noExpiryAccessToken._expiryDate).to.be.null;
        });
    });


    /** @test {AccessToken#validate} */
    describe('validate', () => {
        it('should not throw an error on valid input', () => {
            should.not.exist(accessToken.validate());
        });
    });


    /** @test {AccessToken#isExpired} */
    describe('isExpired', () => {
        it('should not be expired for test data token', () => {
            accessToken.isExpired().should.be.false;
        });

        it('should be expired if the expires_in time is in the past', () => {
            responseClone = JSON.parse(JSON.stringify(ACCESS_TOKEN_RESPONSE));
            responseClone.expires_in = 0;
            const expiredAccessToken = new AccessToken(responseClone);

            expiredAccessToken.isExpired().should.be.true;
        });
    });


    /** @test {AccessToken.token} */
    describe('token', () => {
        it('should match the "access_token" value from the API response', () => {
            accessToken.token.should.equal(responseClone.access_token);
        });
    });


    /** @test {AccessToken.ttl} */
    describe('ttl', () => {
        it('should convert the "expires_in" value from the API response (which is in seconds) to milliseconds', () => {
            accessToken.ttl.should.equal(responseClone.expires_in * 1000);
        });
    });


    /** @test {AccessToken#toString} */
    describe('toString', () => {
        it('should match the "access_token" value from the API response', () => {
            accessToken.toString().should.equal(responseClone.access_token);
        });
    });
});