@@ -17,84 +17,107 @@ const setup = async (config: JwtModuleOptions) => {
1717
1818const config = {
1919 secretOrKeyProvider : ( requestType : JwtSecretRequestType ) =>
20- requestType === JwtSecretRequestType . SIGN ? 'S ' : 'V ' ,
21- secret : 'B ' ,
22- publicKey : 'C ' ,
23- privateKey : 'D '
20+ requestType === JwtSecretRequestType . SIGN ? 'sign_secret ' : 'verify_secret ' ,
21+ secret : 'default_secret ' ,
22+ publicKey : 'public_key ' ,
23+ privateKey : 'private_key '
2424} ;
2525
2626describe ( 'JWT Service' , ( ) => {
2727 let verifySpy : jest . SpyInstance ;
2828 let signSpy : jest . SpyInstance ;
29+ let getRandomString = ( ) => `${ Date . now ( ) } ` ;
2930
30- beforeAll ( async ( ) => {
31+ beforeEach ( async ( ) => {
3132 signSpy = jest
3233 . spyOn ( jwt , 'sign' )
33- . mockImplementation ( ( token , secret , options ) => secret ) ;
34+ . mockImplementation ( ( token , secret , options , callback ) => {
35+ const result = 'signed_' + token + '_by_' + secret ;
36+ return callback ? callback ( null , result ) : result ;
37+ } ) ;
3438
3539 verifySpy = jest
3640 . spyOn ( jwt , 'verify' )
37- . mockImplementation ( ( token , secret , options ) => secret ) ;
41+ . mockImplementation ( ( token , secret , options , callback ) => {
42+ const result = 'verified_' + token + '_by_' + secret ;
43+ return callback ? callback ( null , result as any ) : result ;
44+ } ) ;
45+ } ) ;
46+
47+ afterEach ( ( ) => {
48+ verifySpy . mockRestore ( ) ;
49+ signSpy . mockRestore ( ) ;
3850 } ) ;
3951
40- describe ( 'should use secretOrKeyProvider' , ( ) => {
52+ describe ( 'should use config. secretOrKeyProvider' , ( ) => {
4153 let jwtService : JwtService ;
54+ let testPayload : string = getRandomString ( ) ;
4255
4356 beforeAll ( async ( ) => {
4457 jwtService = await setup ( config ) ;
4558 } ) ;
4659
47- it ( 'signing should use SIGN option function ' , async ( ) => {
48- expect ( await jwtService . sign ( 'random' ) ) . toBe (
49- config . secretOrKeyProvider ( JwtSecretRequestType . SIGN )
60+ it ( 'signing should use config.secretOrKeyProvider ' , async ( ) => {
61+ expect ( await jwtService . sign ( testPayload ) ) . toBe (
62+ `signed_ ${ testPayload } _by_sign_secret`
5063 ) ;
5164 } ) ;
5265
53- it ( 'signing (async) should use SIGN option function ' , async ( ) => {
54- expect ( jwtService . signAsync ( 'random' ) ) . resolves . toBe (
55- config . secretOrKeyProvider ( JwtSecretRequestType . SIGN )
66+ it ( 'signing (async) should use config.secretOrKeyProvider ' , async ( ) => {
67+ await expect ( jwtService . signAsync ( testPayload ) ) . resolves . toBe (
68+ `signed_ ${ testPayload } _by_sign_secret`
5669 ) ;
5770 } ) ;
5871
59- it ( 'verifying should use VERIFY option function ' , async ( ) => {
60- expect ( await jwtService . verify ( 'random' ) ) . toBe (
61- config . secretOrKeyProvider ( JwtSecretRequestType . VERIFY )
72+ it ( 'verifying should use config.secretOrKeyProvider ' , async ( ) => {
73+ expect ( await jwtService . verify ( testPayload ) ) . toBe (
74+ `verified_ ${ testPayload } _by_verify_secret`
6275 ) ;
6376 } ) ;
6477
65- it ( 'verifying (async) should use SIGN option function ' , async ( ) => {
66- expect ( jwtService . verifyAsync ( 'random' ) ) . resolves . toBe (
67- config . secretOrKeyProvider ( JwtSecretRequestType . VERIFY )
78+ it ( 'verifying (async) should use config.secretOrKeyProvider ' , async ( ) => {
79+ await expect ( jwtService . verifyAsync ( testPayload ) ) . resolves . toBe (
80+ `verified_ ${ testPayload } _by_verify_secret`
6881 ) ;
6982 } ) ;
7083 } ) ;
7184
72- describe ( 'should use secret' , ( ) => {
85+ describe ( 'should use config. secret' , ( ) => {
7386 let jwtService : JwtService ;
87+ let testPayload : string = getRandomString ( ) ;
7488
7589 beforeAll ( async ( ) => {
7690 jwtService = await setup ( { ...config , secretOrKeyProvider : undefined } ) ;
7791 } ) ;
7892
79- it ( 'signing should use secret key' , async ( ) => {
80- expect ( await jwtService . sign ( 'random' ) ) . toBe ( config . secret ) ;
93+ it ( 'signing should use config.secret' , async ( ) => {
94+ expect ( await jwtService . sign ( testPayload ) ) . toBe (
95+ `signed_${ testPayload } _by_default_secret`
96+ ) ;
8197 } ) ;
8298
83- it ( 'signing (async) should use secret key' , async ( ) => {
84- expect ( jwtService . signAsync ( 'random' ) ) . resolves . toBe ( config . secret ) ;
99+ it ( 'signing (async) should use config.secret' , async ( ) => {
100+ await expect ( jwtService . signAsync ( testPayload ) ) . resolves . toBe (
101+ `signed_${ testPayload } _by_default_secret`
102+ ) ;
85103 } ) ;
86104
87- it ( 'verifying should use secret key' , async ( ) => {
88- expect ( await jwtService . verify ( 'random' ) ) . toBe ( config . secret ) ;
105+ it ( 'verifying should use config.secret' , async ( ) => {
106+ expect ( await jwtService . verify ( testPayload ) ) . toBe (
107+ `verified_${ testPayload } _by_default_secret`
108+ ) ;
89109 } ) ;
90110
91- it ( 'verifying (async) should use secret key' , async ( ) => {
92- expect ( jwtService . verifyAsync ( 'random' ) ) . resolves . toBe ( config . secret ) ;
111+ it ( 'verifying (async) should use config.secret' , async ( ) => {
112+ await expect ( jwtService . verifyAsync ( testPayload ) ) . resolves . toBe (
113+ `verified_${ testPayload } _by_default_secret`
114+ ) ;
93115 } ) ;
94116 } ) ;
95117
96- describe ( 'should use public/private key ' , ( ) => {
118+ describe ( 'should use config.privateKey and config.publicKey ' , ( ) => {
97119 let jwtService : JwtService ;
120+ let testPayload : string = getRandomString ( ) ;
98121
99122 beforeAll ( async ( ) => {
100123 jwtService = await setup ( {
@@ -104,96 +127,108 @@ describe('JWT Service', () => {
104127 } ) ;
105128 } ) ;
106129
107- it ( 'signing should use private key' , async ( ) => {
108- expect ( await jwtService . sign ( 'random' ) ) . toBe ( config . privateKey ) ;
130+ it ( 'signing should use config.privateKey' , async ( ) => {
131+ expect ( await jwtService . sign ( testPayload ) ) . toBe (
132+ `signed_${ testPayload } _by_private_key`
133+ ) ;
109134 } ) ;
110135
111- it ( 'signing (async) should use private key' , async ( ) => {
112- expect ( jwtService . signAsync ( 'random' ) ) . resolves . toBe ( config . privateKey ) ;
136+ it ( 'signing (async) should use config.privateKey' , async ( ) => {
137+ await expect ( jwtService . signAsync ( testPayload ) ) . resolves . toBe (
138+ `signed_${ testPayload } _by_private_key`
139+ ) ;
113140 } ) ;
114141
115- it ( 'verifying should use public key' , async ( ) => {
116- expect ( await jwtService . verify ( 'random' ) ) . toBe ( config . publicKey ) ;
142+ it ( 'verifying should use config.publicKey' , async ( ) => {
143+ expect ( await jwtService . verify ( testPayload ) ) . toBe (
144+ `verified_${ testPayload } _by_public_key`
145+ ) ;
117146 } ) ;
118147
119- it ( 'verifying (async) should use public key' , async ( ) => {
120- expect ( jwtService . verifyAsync ( 'random' ) ) . resolves . toBe ( config . publicKey ) ;
148+ it ( 'verifying (async) should use config.publicKey' , async ( ) => {
149+ await expect ( jwtService . verifyAsync ( testPayload ) ) . resolves . toBe (
150+ `verified_${ testPayload } _by_public_key`
151+ ) ;
121152 } ) ;
122153 } ) ;
123154
124- describe ( 'override but warn deprecation for "secretOrKey" ' , ( ) => {
155+ describe ( 'should use config.secretOrPrivateKey but warn about deprecation ' , ( ) => {
125156 let jwtService : JwtService ;
126- let consoleCheck : jest . SpyInstance ;
157+ let consoleWarnSpy : jest . SpyInstance ;
158+ let testPayload : string = getRandomString ( ) ;
127159
128160 beforeAll ( async ( ) => {
129- jwtService = await setup ( { ...config , secretOrPrivateKey : 'deprecated' } ) ;
130- consoleCheck = jest . spyOn ( jwtService [ 'logger' ] , 'warn' ) ;
161+ jwtService = await setup ( {
162+ ...config ,
163+ secretOrPrivateKey : 'deprecated_key'
164+ } ) ;
165+ consoleWarnSpy = jest . spyOn ( jwtService [ 'logger' ] , 'warn' ) ;
131166 } ) ;
132167
133168 it ( 'signing should use deprecated secretOrPrivateKey' , async ( ) => {
134- expect ( await jwtService . sign ( 'random' ) ) . toBe ( 'deprecated' ) ;
135- expect ( consoleCheck ) . toHaveBeenCalledTimes ( 1 ) ;
169+ expect ( await jwtService . sign ( testPayload ) ) . toBe (
170+ `signed_${ testPayload } _by_deprecated_key`
171+ ) ;
172+ expect ( consoleWarnSpy ) . toHaveBeenCalledTimes ( 1 ) ;
136173 } ) ;
137174
138175 it ( 'signing (async) should use deprecated secretOrPrivateKey' , async ( ) => {
139- expect ( jwtService . signAsync ( 'random' ) ) . resolves . toBe ( 'deprecated' ) ;
140- expect ( consoleCheck ) . toHaveBeenCalledTimes ( 1 ) ;
176+ await expect ( jwtService . signAsync ( testPayload ) ) . resolves . toBe (
177+ `signed_${ testPayload } _by_deprecated_key`
178+ ) ;
179+ expect ( consoleWarnSpy ) . toHaveBeenCalledTimes ( 1 ) ;
141180 } ) ;
142181
143182 it ( 'verifying should use deprecated secretOrPrivateKey' , async ( ) => {
144- expect ( await jwtService . verify ( 'random' ) ) . toBe ( 'deprecated' ) ;
145- expect ( consoleCheck ) . toHaveBeenCalledTimes ( 1 ) ;
183+ expect ( await jwtService . verify ( testPayload ) ) . toBe (
184+ `verified_${ testPayload } _by_deprecated_key`
185+ ) ;
186+ expect ( consoleWarnSpy ) . toHaveBeenCalledTimes ( 1 ) ;
146187 } ) ;
147188
148189 it ( 'verifying (async) should use deprecated secretOrPrivateKey' , async ( ) => {
149- expect ( jwtService . verifyAsync ( 'random' ) ) . resolves . toBe ( 'deprecated' ) ;
150- expect ( consoleCheck ) . toHaveBeenCalledTimes ( 1 ) ;
190+ await expect ( jwtService . verifyAsync ( testPayload ) ) . resolves . toBe (
191+ `verified_${ testPayload } _by_deprecated_key`
192+ ) ;
193+ expect ( consoleWarnSpy ) . toHaveBeenCalledTimes ( 1 ) ;
151194 } ) ;
152195
153196 afterEach ( async ( ) => {
154- consoleCheck . mockClear ( ) ;
197+ consoleWarnSpy . mockClear ( ) ;
155198 } ) ;
156199 } ) ;
157200
158201 describe ( 'should allow buffers for secrets' , ( ) => {
159202 let jwtService : JwtService ;
160203 let secretB64 : Buffer ;
204+ let testPayload = { foo : 'bar' } ;
161205
162- beforeAll ( async ( ) => {
206+ beforeEach ( async ( ) => {
163207 secretB64 = Buffer . from ( 'ThisIsARandomSecret' , 'base64' ) ;
164208 jwtService = await setup ( { secret : secretB64 } ) ;
165209 verifySpy . mockRestore ( ) ;
166210 signSpy . mockRestore ( ) ;
167211 } ) ;
168212
169213 it ( 'verifying should use base64 buffer key' , async ( ) => {
170- let token = jwt . sign ( { foo : 'bar' } , secretB64 ) ;
214+ let token = jwt . sign ( testPayload , secretB64 ) ;
171215
172216 expect ( jwtService . verify ( token ) ) . toHaveProperty ( 'foo' , 'bar' ) ;
173217 } ) ;
174218
175219 it ( 'verifying (async) should use base64 buffer key' , async ( ) => {
176- let token = jwt . sign ( { foo : 'bar' } , secretB64 ) ;
220+ let token = jwt . sign ( testPayload , secretB64 ) ;
177221
178- expect ( jwtService . verifyAsync ( token ) ) . resolves . toHaveProperty (
222+ await expect ( jwtService . verifyAsync ( token ) ) . resolves . toHaveProperty (
179223 'foo' ,
180224 'bar'
181225 ) ;
182226 } ) ;
183-
184- afterAll ( ( ) => {
185- signSpy = jest
186- . spyOn ( jwt , 'sign' )
187- . mockImplementation ( ( token , secret , options ) => secret ) ;
188-
189- verifySpy = jest
190- . spyOn ( jwt , 'verify' )
191- . mockImplementation ( ( token , secret , options ) => secret ) ;
192- } ) ;
193227 } ) ;
194228
195229 describe ( 'should use secret key from options' , ( ) => {
196230 let jwtService : JwtService ;
231+ let testPayload : string = getRandomString ( ) ;
197232
198233 beforeAll ( async ( ) => {
199234 jwtService = await setup ( {
@@ -202,29 +237,36 @@ describe('JWT Service', () => {
202237 } ) ;
203238 } ) ;
204239
205- let secret = 'custom ' ;
240+ let secret = 'custom_secret ' ;
206241
207242 it ( 'signing should use secret key from options' , async ( ) => {
208- expect ( await jwtService . sign ( 'random' , { secret } ) ) . toBe ( secret ) ;
243+ expect ( await jwtService . sign ( testPayload , { secret } ) ) . toBe (
244+ `signed_${ testPayload } _by_custom_secret`
245+ ) ;
209246 } ) ;
210247
211248 it ( 'signing (async) should use secret key from options' , async ( ) => {
212- expect ( jwtService . signAsync ( 'random' , { secret } ) ) . resolves . toBe ( secret ) ;
249+ await expect ( jwtService . signAsync ( testPayload , { secret } ) ) . resolves . toBe (
250+ `signed_${ testPayload } _by_custom_secret`
251+ ) ;
213252 } ) ;
214253
215254 it ( 'verifying should use secret key from options' , async ( ) => {
216- expect ( await jwtService . verify ( 'random' , { secret } ) ) . toBe ( secret ) ;
255+ expect ( await jwtService . verify ( testPayload , { secret } ) ) . toBe (
256+ `verified_${ testPayload } _by_custom_secret`
257+ ) ;
217258 } ) ;
218259
219260 it ( 'verifying (async) should use secret key from options' , async ( ) => {
220- expect ( jwtService . verifyAsync ( 'random' , { secret } ) ) . resolves . toBe (
221- secret
222- ) ;
261+ await expect (
262+ jwtService . verifyAsync ( testPayload , { secret } )
263+ ) . resolves . toBe ( `verified_ ${ testPayload } _by_custom_secret` ) ;
223264 } ) ;
224265 } ) ;
225266
226267 describe ( 'should use private/public key from options' , ( ) => {
227268 let jwtService : JwtService ;
269+ let testPayload : string = getRandomString ( ) ;
228270
229271 beforeAll ( async ( ) => {
230272 jwtService = await setup ( {
@@ -238,23 +280,27 @@ describe('JWT Service', () => {
238280 let publicKey = 'customPublicKey' ;
239281
240282 it ( 'signing should use private key from options' , async ( ) => {
241- expect ( await jwtService . sign ( 'random' , { privateKey } ) ) . toBe ( privateKey ) ;
283+ expect ( await jwtService . sign ( testPayload , { privateKey } ) ) . toBe (
284+ `signed_${ testPayload } _by_customPrivateKey`
285+ ) ;
242286 } ) ;
243287
244288 it ( 'signing (async) should use private key from options' , async ( ) => {
245- expect ( jwtService . signAsync ( 'random' , { privateKey } ) ) . resolves . toBe (
246- privateKey
247- ) ;
289+ await expect (
290+ jwtService . signAsync ( testPayload , { privateKey } )
291+ ) . resolves . toBe ( `signed_ ${ testPayload } _by_customPrivateKey` ) ;
248292 } ) ;
249293
250294 it ( 'verifying should use public key from options' , async ( ) => {
251- expect ( await jwtService . verify ( 'random' , { publicKey } ) ) . toBe ( publicKey ) ;
295+ expect ( await jwtService . verify ( testPayload , { publicKey } ) ) . toBe (
296+ `verified_${ testPayload } _by_customPublicKey`
297+ ) ;
252298 } ) ;
253299
254300 it ( 'verifying (async) should use public key from options' , async ( ) => {
255- expect ( jwtService . verifyAsync ( 'random' , { publicKey } ) ) . resolves . toBe (
256- publicKey
257- ) ;
301+ await expect (
302+ jwtService . verifyAsync ( testPayload , { publicKey } )
303+ ) . resolves . toBe ( `verified_ ${ testPayload } _by_customPublicKey` ) ;
258304 } ) ;
259305 } ) ;
260306} ) ;
0 commit comments