var jwt = require('../index'); var expect = require('chai').expect; var fs = require('fs'); var PS_SUPPORTED = require('../lib/psSupported'); describe('schema', function() { describe('sign options', function() { var cert_rsa_priv = fs.readFileSync(__dirname + '/rsa-private.pem'); var cert_ecdsa_priv = fs.readFileSync(__dirname + '/ecdsa-private.pem'); var cert_secp384r1_priv = fs.readFileSync(__dirname + '/secp384r1-private.pem'); var cert_secp521r1_priv = fs.readFileSync(__dirname + '/secp521r1-private.pem'); function sign(options, secretOrPrivateKey) { jwt.sign({foo: 123}, secretOrPrivateKey, options); } it('should validate algorithm', function () { expect(function () { sign({ algorithm: 'foo' }, cert_rsa_priv); }).to.throw(/"algorithm" must be a valid string enum value/); sign({ algorithm: 'none' }, null); sign({algorithm: 'RS256'}, cert_rsa_priv); sign({algorithm: 'RS384'}, cert_rsa_priv); sign({algorithm: 'RS512'}, cert_rsa_priv); if (PS_SUPPORTED) { sign({algorithm: 'PS256'}, cert_rsa_priv); sign({algorithm: 'PS384'}, cert_rsa_priv); sign({algorithm: 'PS512'}, cert_rsa_priv); } sign({algorithm: 'ES256'}, cert_ecdsa_priv); sign({algorithm: 'ES384'}, cert_secp384r1_priv); sign({algorithm: 'ES512'}, cert_secp521r1_priv); sign({algorithm: 'HS256'}, 'superSecret'); sign({algorithm: 'HS384'}, 'superSecret'); sign({algorithm: 'HS512'}, 'superSecret'); }); it('should validate header', function () { expect(function () { sign({ header: 'foo' }, 'superSecret'); }).to.throw(/"header" must be an object/); sign({header: {}}, 'superSecret'); }); it('should validate encoding', function () { expect(function () { sign({ encoding: 10 }, 'superSecret'); }).to.throw(/"encoding" must be a string/); sign({encoding: 'utf8'},'superSecret'); }); it('should validate noTimestamp', function () { expect(function () { sign({ noTimestamp: 10 }, 'superSecret'); }).to.throw(/"noTimestamp" must be a boolean/); sign({noTimestamp: true}, 'superSecret'); }); }); describe('sign payload registered claims', function() { function sign(payload) { jwt.sign(payload, 'foo123'); } it('should validate exp', function () { expect(function () { sign({ exp: '1 monkey' }); }).to.throw(/"exp" should be a number of seconds/); sign({ exp: 10.1 }); }); }); });