Skip to content

Commit b9df473

Browse files
authored
fix: fix sam local for httpapi (#371)
* fix: identify API_GATEWAY_V2 event from sam local * test: add a couple tests for getEventSourceNameBasedOnEvent
1 parent 5717116 commit b9df473

File tree

4 files changed

+65
-2
lines changed

4 files changed

+65
-2
lines changed

package-lock.json

Lines changed: 10 additions & 0 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -74,6 +74,7 @@
7474
"@semantic-release/npm": "^7.0.10",
7575
"@semantic-release/release-notes-generator": "^9.0.1",
7676
"@types/aws-lambda": "^8.10.72",
77+
"@types/jest": "^26.0.20",
7778
"acorn": "^8.0.5",
7879
"commitizen": "^4.2.3",
7980
"commitlint": "^11.0.0",

src/event-sources/utils.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -71,10 +71,10 @@ function getEventSourceNameBasedOnEvent ({
7171
event
7272
}) {
7373
if (event.requestContext && event.requestContext.elb) return 'AWS_ALB'
74-
if (event.requestContext && event.requestContext.stage) {
74+
if (event.Records) return 'AWS_LAMBDA_EDGE'
75+
if (event.requestContext) {
7576
return event.version === '2.0' ? 'AWS_API_GATEWAY_V2' : 'AWS_API_GATEWAY_V1'
7677
}
77-
if (event.Records) return 'AWS_LAMBDA_EDGE'
7878

7979
throw new Error('Unable to determine event source based on event.')
8080
}

src/event-sources/utils.test.ts

Lines changed: 52 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,52 @@
1+
const { getEventSourceNameBasedOnEvent } = require("./utils");
2+
3+
/**
4+
This is an event delivered by `sam local start-api`,
5+
using Type:HttpApi, with SAM CLI version 1.18.0.
6+
*/
7+
const sam_httpapi_event = {
8+
version: "2.0",
9+
routeKey: "GET /",
10+
rawPath: "/",
11+
rawQueryString: "",
12+
cookies: [],
13+
headers: {
14+
Host: "localhost:9000",
15+
"User-Agent": "curl/7.64.1",
16+
Accept: "*/*",
17+
"X-Forwarded-Proto": "http",
18+
"X-Forwarded-Port": "9000",
19+
},
20+
queryStringParameters: {},
21+
requestContext: {
22+
accountId: "123456789012",
23+
apiId: "1234567890",
24+
http: {
25+
method: "GET",
26+
path: "/",
27+
protocol: "HTTP/1.1",
28+
sourceIp: "127.0.0.1",
29+
userAgent: "Custom User Agent String",
30+
},
31+
requestId: "aacf57f7-2fce-4069-a1f2-7cb4726dc028",
32+
routeKey: "GET /",
33+
stage: null,
34+
},
35+
body: "",
36+
pathParameters: {},
37+
stageVariables: null,
38+
isBase64Encoded: false,
39+
};
40+
41+
describe("getEventSourceNameBasedOnEvent", () => {
42+
test("throws error on empty event", () => {
43+
expect(() => getEventSourceNameBasedOnEvent({ event: {} })).toThrow(
44+
"Unable to determine event source based on event."
45+
);
46+
});
47+
48+
test("recognizes sam local HttpApi event", () => {
49+
const result = getEventSourceNameBasedOnEvent({ event: sam_httpapi_event });
50+
expect(result).toEqual("AWS_API_GATEWAY_V2");
51+
});
52+
});

0 commit comments

Comments
 (0)