-
Notifications
You must be signed in to change notification settings - Fork 1
Expand file tree
/
Copy pathlambdaHandler.test.ts
More file actions
47 lines (39 loc) · 1.79 KB
/
lambdaHandler.test.ts
File metadata and controls
47 lines (39 loc) · 1.79 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
import { afterEach, describe, expect, test, jest } from '@jest/globals';
const mockedStoreGoogleTokenFromCode = jest.fn() as jest.MockedFunction<(code: string) => Promise<void>>;
jest.mock('./app/services/authHandler', () => ({
storeGoogleTokenFromCode: mockedStoreGoogleTokenFromCode,
generateAuthUrl: jest.fn()
}));
import { storeToken } from './lambdaHandler';
import { APIGatewayProxyEvent } from 'aws-lambda';
function createEvent(params?: Record<string, string | undefined>): APIGatewayProxyEvent {
return {
queryStringParameters: params,
} as unknown as APIGatewayProxyEvent;
}
describe('storeToken', () => {
afterEach(() => {
jest.clearAllMocks();
});
test('returns 400 when no code or error provided', async () => {
const response = await storeToken(createEvent());
expect(response.statusCode).toBe(400);
expect(JSON.parse(response.body).error).toBe('Missing code or error.');
});
test('returns 400 when error is provided', async () => {
const response = await storeToken(createEvent({ error: 'denied' }));
expect(response.statusCode).toBe(400);
expect(JSON.parse(response.body).error).toBe('denied');
});
test('stores token when code is provided', async () => {
const response = await storeToken(createEvent({ code: 'abc' }));
expect(response.statusCode).toBe(200);
expect(mockedStoreGoogleTokenFromCode).toHaveBeenCalledWith('abc');
});
test('returns 500 if token storage fails', async () => {
mockedStoreGoogleTokenFromCode.mockRejectedValueOnce(new Error('boom'));
const response = await storeToken(createEvent({ code: 'abc' }));
expect(response.statusCode).toBe(500);
expect(JSON.parse(response.body).error).toBe('boom');
});
});