55'use strict'
66
77const assert = require ( 'insist' )
8- var crypto = require ( 'crypto' )
8+ var random = require ( '../../lib/ crypto/random ' )
99var hkdf = require ( '../../lib/crypto/hkdf' )
1010var mocks = require ( '../mocks' )
1111var P = require ( '../../lib/promise' )
@@ -26,7 +26,7 @@ describe('Token', () => {
2626 delete require . cache [ require . resolve ( modulePath ) ]
2727 delete require . cache [ require . resolve ( '../../config' ) ]
2828 process . env . NODE_ENV = 'dev'
29- Token = require ( modulePath ) ( log , crypto , P , hkdf , Bundle , null )
29+ Token = require ( modulePath ) ( log , random , P , hkdf , Bundle , null )
3030 } )
3131
3232 it ( 'Token constructor was exported' , ( ) => {
@@ -35,25 +35,61 @@ describe('Token', () => {
3535 assert . equal ( Token . length , 2 , 'function expects two arguments' )
3636 } )
3737
38+ it ( 'Token constructor has expected factory methods' , ( ) => {
39+ assert . equal ( typeof Token . createNewToken , 'function' , 'Token.createNewToken is function' )
40+ assert . equal ( Token . createNewToken . length , 2 , 'function expects two arguments' )
41+ assert . equal ( typeof Token . createTokenFromHexData , 'function' , 'Token.createTokenFromHexData is function' )
42+ assert . equal ( Token . createTokenFromHexData . length , 3 , 'function expects three arguments' )
43+ } )
44+
3845 it ( 'Token constructor sets createdAt' , ( ) => {
3946 var now = Date . now ( ) - 1
4047 var token = new Token ( { } , { createdAt : now } )
4148
4249 assert . equal ( token . createdAt , now , 'token.createdAt is correct' )
4350 } )
4451
45- it ( 'Token constructor does not set createdAt if it is negative' , ( ) => {
46- var notNow = - Date . now ( )
47- var token = new Token ( { } , { createdAt : notNow } )
52+ it ( 'Token.createNewToken defaults createdAt to the current time' , ( ) => {
53+ var now = Date . now ( )
54+ return Token . createNewToken ( Token , { } ) . then ( token => {
55+ assert . ok ( token . createdAt >= now && token . createdAt <= Date . now ( ) , 'token.createdAt seems correct' )
56+ } )
57+ } )
58+
59+ it ( 'Token.createNewToken accepts an override for createdAt' , ( ) => {
60+ var now = Date . now ( ) - 1
61+ return Token . createNewToken ( Token , { createdAt : now } ) . then ( token => {
62+ assert . equal ( token . createdAt , now , 'token.createdAt is correct' )
63+ } )
64+ } )
4865
49- assert . ok ( token . createdAt > 0 , 'token.createdAt seems correct' )
66+ it ( 'Token.createNewToken ignores a negative value for createdAt' , ( ) => {
67+ var now = Date . now ( )
68+ var notNow = - now
69+ return Token . createNewToken ( Token , { createdAt : notNow } ) . then ( token => {
70+ assert . ok ( token . createdAt >= now && token . createdAt <= Date . now ( ) , 'token.createdAt seems correct' )
71+ } )
5072 } )
5173
52- it ( 'Token constructor does not set createdAt if it is in the future' , ( ) => {
74+ it ( 'Token.createNewToken ignores a createdAt timestamp in the future' , ( ) => {
75+ var now = Date . now ( )
5376 var notNow = Date . now ( ) + 1000
54- var token = new Token ( { } , { createdAt : notNow } )
77+ return Token . createNewToken ( Token , { createdAt : notNow } ) . then ( token => {
78+ assert . ok ( token . createdAt >= now && token . createdAt <= Date . now ( ) , 'token.createdAt seems correct' )
79+ } )
80+ } )
5581
56- assert . ok ( token . createdAt > 0 && token . createdAt < notNow , 'token.createdAt seems correct' )
82+ it ( 'Token.createTokenFromHexData accepts a value for createdAt' , ( ) => {
83+ var now = Date . now ( ) - 20
84+ return Token . createTokenFromHexData ( Token , 'ABCD' , { createdAt : now } ) . then ( token => {
85+ assert . equal ( token . createdAt , now , 'token.createdAt is correct' )
86+ } )
87+ } )
88+
89+ it ( 'Token.createTokenFromHexData fails if not given a value for createdAt' , ( ) => {
90+ return Token . createTokenFromHexData ( Token , 'ABCD' , { other : 'data' } ) . then ( token => {
91+ assert . equal ( token . createdAt , 0 , 'token.createdAt is correct' )
92+ } )
5793 } )
5894 } )
5995
@@ -63,14 +99,35 @@ describe('Token', () => {
6399 delete require . cache [ require . resolve ( modulePath ) ]
64100 delete require . cache [ require . resolve ( '../../config' ) ]
65101 process . env . NODE_ENV = 'prod'
66- Token = require ( modulePath ) ( log , crypto , P , hkdf , Bundle , null )
102+ Token = require ( modulePath ) ( log , random , P , hkdf , Bundle , null )
103+ } )
104+
105+ it ( 'Token.createNewToken defaults createdAt to the current time' , ( ) => {
106+ var now = Date . now ( )
107+ return Token . createNewToken ( Token , { } ) . then ( token => {
108+ assert . ok ( token . createdAt >= now && token . createdAt <= Date . now ( ) , 'token.createdAt seems correct' )
109+ } )
67110 } )
68111
69- it ( 'Token constructor does not set createdAt' , ( ) => {
70- var notNow = Date . now ( ) - 1
71- var token = new Token ( { } , { createdAt : notNow } )
112+ it ( 'Token.createNewToken does not accept an override for createdAt' , ( ) => {
113+ var now = Date . now ( ) - 1
114+ return Token . createNewToken ( Token , { createdAt : now } ) . then (
115+ ( ) => assert . fail ( 'should have thrown' ) ,
116+ ( err ) => assert . equal ( err . message , 'unexpected value for createdAt' )
117+ )
118+ } )
119+
120+ it ( 'Token.createTokenFromHexData accepts a value for createdAt' , ( ) => {
121+ var now = Date . now ( ) - 20
122+ return Token . createTokenFromHexData ( Token , 'ABCD' , { createdAt : now } ) . then ( token => {
123+ assert . equal ( token . createdAt , now , 'token.createdAt is correct' )
124+ } )
125+ } )
72126
73- assert . ok ( token . createdAt > notNow , 'token.createdAt seems correct' )
127+ it ( 'Token.createTokenFromHexData defaults to zero if not given a value for createdAt' , ( ) => {
128+ return Token . createTokenFromHexData ( Token , 'ABCD' , { other : 'data' } ) . then ( token => {
129+ assert . equal ( token . createdAt , 0 , 'token.createdAt is correct' )
130+ } )
74131 } )
75132 } )
76133
0 commit comments