Skip to content

Commit e1859b7

Browse files
Merge branch 'ellenaua-issue_798_tests_fix'
2 parents a4cdca8 + 554942b commit e1859b7

File tree

2 files changed

+210
-12541
lines changed

2 files changed

+210
-12541
lines changed

lib/jwt.service.spec.ts

Lines changed: 126 additions & 80 deletions
Original file line numberDiff line numberDiff line change
@@ -17,84 +17,107 @@ const setup = async (config: JwtModuleOptions) => {
1717

1818
const 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

2626
describe('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

Comments
 (0)