-
Notifications
You must be signed in to change notification settings - Fork 6
/
Copy pathapi-multiple-lambdas.test.ts
82 lines (80 loc) · 2.44 KB
/
api-multiple-lambdas.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
import { Template } from "aws-cdk-lib/assertions";
import { Runtime } from "aws-cdk-lib/aws-lambda";
import { GuLambdaFunction } from "../constructs/lambda";
import { GuTemplate, simpleGuStackForTesting } from "../utils/test";
import { GuApiGatewayWithLambdaByPath } from "./api-multiple-lambdas";
describe("The GuApiGatewayWithLambdaByPath pattern", () => {
it("should create the correct resources with minimal config", () => {
const stack = simpleGuStackForTesting();
const defaultProps = {
handler: "handler.ts",
runtime: Runtime.NODEJS_14_X,
app: "testing",
};
const lambdaOne = new GuLambdaFunction(stack, "lambda-one", {
...defaultProps,
fileName: "my-app-1.zip",
});
const lambdaTwo = new GuLambdaFunction(stack, "lambda-two", {
...defaultProps,
fileName: "my-app-2.zip",
});
const lambdaThree = new GuLambdaFunction(stack, "lambda-three", {
...defaultProps,
fileName: "my-app-3.zip",
});
new GuApiGatewayWithLambdaByPath(stack, {
app: "testing",
monitoringConfiguration: { noMonitoring: true },
targets: [
{
path: "/test",
httpMethod: "GET",
lambda: lambdaOne,
},
{
path: "/test",
httpMethod: "POST",
lambda: lambdaTwo,
},
{
path: "/test/a/long/path",
httpMethod: "GET",
lambda: lambdaThree,
},
],
});
expect(Template.fromStack(stack).toJSON()).toMatchSnapshot();
});
it("should create an alarm if the relevant monitoring configuration is provided", () => {
const stack = simpleGuStackForTesting();
const lambdaOne = new GuLambdaFunction(stack, "lambda-one", {
handler: "handler.ts",
runtime: Runtime.NODEJS_14_X,
app: "testing",
fileName: "my-app-1.zip",
});
new GuApiGatewayWithLambdaByPath(stack, {
app: "testing",
monitoringConfiguration: {
snsTopicName: "my-alarm-topic",
http5xxAlarm: {
tolerated5xxPercentage: 1,
numberOfMinutesAboveThresholdBeforeAlarm: 3,
},
},
targets: [
{
path: "/test",
httpMethod: "GET",
lambda: lambdaOne,
},
],
});
//The shape of this alarm is tested at construct level
GuTemplate.fromStack(stack).hasResourceWithLogicalId(
"AWS::CloudWatch::Alarm",
/^ApiGatewayHigh5xxPercentageAlarm.+/
);
});
});