-
Notifications
You must be signed in to change notification settings - Fork 3
/
Copy pathcfnNotify.test.ts
100 lines (86 loc) · 2.42 KB
/
cfnNotify.test.ts
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
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
import { afterEach, describe, expect, it, vi } from "vitest";
import { handler } from "./cfnNotify";
import { Context } from "aws-lambda";
import { CLOUDFORMATION_NOTIFICATION_DOMAIN } from "mocks";
import * as cfn from "cfn-response-async";
describe("Lambda Handler", () => {
const cfnSpy = vi.spyOn(cfn, "send");
const callback = vi.fn();
afterEach(() => {
vi.clearAllMocks();
});
it("should send SUCCESS notification when event.Success is true", async () => {
const event = {
Success: true,
Context: {
Execution: {
Input: {
cfnEvent: {
ResponseURL: CLOUDFORMATION_NOTIFICATION_DOMAIN,
},
cfnContext: {},
},
},
},
};
await handler(event, {} as Context, callback);
expect(cfnSpy).toHaveBeenCalledWith(
event.Context.Execution.Input.cfnEvent,
event.Context.Execution.Input.cfnContext,
cfn.SUCCESS,
{},
"static",
);
expect(callback).toHaveBeenCalledWith(null, { statusCode: 200 });
});
it("should send FAILED notification when event.Success is false", async () => {
const event = {
Success: false,
Context: {
Execution: {
Input: {
cfnEvent: {
ResponseURL: CLOUDFORMATION_NOTIFICATION_DOMAIN,
},
cfnContext: {},
},
},
},
};
await handler(event, {} as Context, callback);
expect(cfnSpy).toHaveBeenCalledWith(
event.Context.Execution.Input.cfnEvent,
event.Context.Execution.Input.cfnContext,
cfn.FAILED,
{},
"static",
);
expect(callback).toHaveBeenCalledWith(null, { statusCode: 200 });
});
it("should proceed without notification when cfnEvent is missing", async () => {
const event = {
Success: true,
Context: {
Execution: {
Input: {
cfnEvent: null,
cfnContext: {},
},
},
},
};
await handler(event, {} as Context, callback);
expect(cfnSpy).not.toHaveBeenCalled();
expect(callback).toHaveBeenCalledWith(null, { statusCode: 200 });
});
it("should handle errors and return statusCode 500", async () => {
const event = {
Success: true,
Context: {},
};
await handler(event, {} as Context, callback);
expect(callback).toHaveBeenCalledWith(expect.any(Error), {
statusCode: 500,
});
});
});