import { expect } from 'chai' import JWT from '../../src/Crypto/JWT.js' import { foreignToken, privateKey } from '../Test.utils.js' describe('Creates token', () => { const provider = new JWT(privateKey, '7d') test('Creates token without explicity expiration', () => { const token = provider.createToken({ userID: 123 }) expect(token).to.be.a('string') expect(token).is.not.null }) test('Creates token with explicity expiration', () => { const token = provider.createToken({ userID: 123 }, '7d') expect(token).to.be.a('string') expect(token).is.not.null }) test('Creates token with explicity token override', () => { const token = provider.createToken({ userID: 123 }, '7d', privateKey) expect(token).to.be.a('string') expect(token).is.not.null }) test('Creates token with explicity token options', () => { const token = provider.createToken({ userID: 123 }, undefined, undefined, { expiresIn: '7d', }) expect(token).to.be.a('string') expect(token).is.not.null }) test('Creates token with no expiration', () => { const localProvider = new JWT(privateKey) const token = localProvider.createToken({ userID: 123 }) expect(token).to.be.a('string') expect(token).is.not.null }) }) describe('Validates token', () => { const provider = new JWT(privateKey, '7d') test('Succeed to validate just created token', () => { // Creates token const token = provider.createToken({ userID: 123 }, '7d', privateKey) expect(token).to.be.a('string') expect(token).is.not.null // Validates token const validationResp = provider.validateToken(token) expect(validationResp).is.not.null expect(validationResp.isValid).is.true expect(validationResp['isExpired']).is.undefined expect(validationResp['decodedToken']).is.not.null expect(validationResp['decodedToken'].userID).to.be.equals(123) expect(validationResp['decodedToken'].exp).to.be.a('number') expect(validationResp['decodedToken'].exp).to.be.above(Date.now() / 1000) }) test('Fails to validate invalid token', () => { // Creates token const token = provider.createToken({ userID: 123 }, '7d', privateKey) // Validates token const validationResp = provider.validateToken(token + '123') expect(validationResp).is.not.null expect(validationResp.isValid).is.false expect(validationResp['isExpired']).is.undefined expect(validationResp['decodedToken']).to.undefined }) test('Fails to validate expired token', () => { // Creates token const token = provider.createToken({ userID: 123 }, '-7d', privateKey) // Validates token const validationResp = provider.validateToken(token) expect(validationResp).is.not.null expect(validationResp.isValid).is.false expect(validationResp['isExpired']).is.true expect(validationResp['decodedToken']).to.undefined }) test('Fails to validate foreign token', () => { // Validates token const validationResp = provider.validateToken(foreignToken) expect(validationResp).is.not.null expect(validationResp.isValid).is.false expect(validationResp['isExpired']).is.undefined expect(validationResp['decodedToken']).to.undefined }) }) export {}