Skip to content

Commit 3531d70

Browse files
committed
test: add tests for serializerMiddleware
1 parent 0e18b0a commit 3531d70

File tree

2 files changed

+101
-0
lines changed

2 files changed

+101
-0
lines changed
Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,5 @@
1+
const base = require("../../jest.config.base.js");
2+
3+
module.exports = {
4+
...base,
5+
};
Lines changed: 96 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,96 @@
1+
import { Logger } from "@aws-sdk/types";
2+
3+
import { serializerMiddleware } from "./serializerMiddleware";
4+
5+
describe("serializerMiddleware", () => {
6+
const mockNext = jest.fn();
7+
const mockSerializer = jest.fn();
8+
9+
const mockOptions = {
10+
endpoint: () =>
11+
Promise.resolve({
12+
protocol: "protocol",
13+
hostname: "hostname",
14+
path: "path",
15+
}),
16+
};
17+
18+
const mockArgs = {
19+
input: {
20+
inputKey: "inputValue",
21+
},
22+
};
23+
24+
const mockRequest = {
25+
method: "GET",
26+
headers: {},
27+
};
28+
29+
const mockResponse = {
30+
statusCode: 200,
31+
headers: {},
32+
};
33+
34+
const mockOutput = {
35+
$metadata: {
36+
statusCode: 200,
37+
requestId: "requestId",
38+
},
39+
outputKey: "outputValue",
40+
};
41+
42+
const mockReturn = {
43+
response: mockResponse,
44+
output: mockOutput,
45+
};
46+
47+
beforeEach(() => {
48+
mockNext.mockResolvedValueOnce(mockReturn);
49+
mockSerializer.mockResolvedValueOnce(mockRequest);
50+
});
51+
52+
afterEach(() => {
53+
expect(mockSerializer).toHaveBeenCalledTimes(1);
54+
expect(mockSerializer).toHaveBeenCalledWith(mockArgs.input, mockOptions);
55+
expect(mockNext).toHaveBeenCalledTimes(1);
56+
expect(mockNext).toHaveBeenCalledWith({ ...mockArgs, request: mockRequest });
57+
jest.clearAllMocks();
58+
});
59+
60+
it("returns without logging if context.logger is not defined", async () => {
61+
const response = await serializerMiddleware(mockOptions, mockSerializer)(mockNext, {})(mockArgs);
62+
expect(response).toStrictEqual(mockReturn);
63+
});
64+
65+
it("returns without logging if context.logger doesn't have debug/info function", async () => {
66+
const logger = {} as Logger;
67+
const response = await serializerMiddleware(mockOptions, mockSerializer)(mockNext, { logger })(mockArgs);
68+
expect(response).toStrictEqual(mockReturn);
69+
});
70+
71+
it("logs input if context.logger has info function", async () => {
72+
const logger = ({ info: jest.fn() } as unknown) as Logger;
73+
74+
const inputFilterSensitiveLog = jest.fn().mockImplementationOnce((input) => input);
75+
const response = await serializerMiddleware(mockOptions, mockSerializer)(mockNext, {
76+
logger,
77+
inputFilterSensitiveLog,
78+
})(mockArgs);
79+
80+
expect(response).toStrictEqual(mockReturn);
81+
expect(inputFilterSensitiveLog).toHaveBeenCalledTimes(1);
82+
expect(inputFilterSensitiveLog).toHaveBeenCalledWith(mockArgs.input);
83+
expect(logger.info).toHaveBeenCalledTimes(1);
84+
expect(logger.info).toHaveBeenCalledWith({ input: mockArgs.input });
85+
});
86+
87+
it("logs request if context.logger has debug function", async () => {
88+
const logger = ({ debug: jest.fn() } as unknown) as Logger;
89+
90+
const response = await serializerMiddleware(mockOptions, mockSerializer)(mockNext, { logger })(mockArgs);
91+
92+
expect(response).toStrictEqual(mockReturn);
93+
expect(logger.debug).toHaveBeenCalledTimes(1);
94+
expect(logger.debug).toHaveBeenCalledWith({ httpRequest: mockRequest });
95+
});
96+
});

0 commit comments

Comments
 (0)