1
1
"use strict" ;
2
2
3
- const { baseUrl, getHeader } = require ( "../../../src/helpers" ) ;
3
+ const {
4
+ baseUrl,
5
+ decodeEventBody,
6
+ normalizeHeaders,
7
+ } = require ( "../../../src/helpers" ) ;
4
8
const chai = require ( "chai" ) ;
5
9
const expect = chai . expect ;
6
10
@@ -11,9 +15,9 @@ describe("helpers", () => {
11
15
routeKey : "GET /route/{param}" ,
12
16
rawPath : "/route/value" ,
13
17
headers : {
14
- Host : "localhost" ,
15
- "X-Forwarded-Proto " : "http" ,
16
- "X-Forwarded-Port " : "3000" ,
18
+ host : "localhost" ,
19
+ "x-forwarded-proto " : "http" ,
20
+ "x-forwarded-port " : "3000" ,
17
21
} ,
18
22
requestContext : {
19
23
domainName : "localhost" ,
@@ -30,9 +34,9 @@ describe("helpers", () => {
30
34
routeKey : "GET /route/{param}" ,
31
35
rawPath : "/v2/route/value" ,
32
36
headers : {
33
- Host : "abcdefghijz.execute-api.us-east-1.amazonaws.com" ,
34
- "X-Forwarded-Proto " : "https" ,
35
- "X-Forwarded-Port " : "443" ,
37
+ host : "abcdefghijz.execute-api.us-east-1.amazonaws.com" ,
38
+ "x-forwarded-proto " : "https" ,
39
+ "x-forwarded-port " : "443" ,
36
40
} ,
37
41
requestContext : {
38
42
domainName : "abcdefghijz.execute-api.us-east-1.amazonaws.com" ,
@@ -51,9 +55,9 @@ describe("helpers", () => {
51
55
routeKey : "GET /route/{param}" ,
52
56
rawPath : "/route/value" ,
53
57
headers : {
54
- Host : "abcdefghijz.cloudfront.net" ,
55
- "X-Forwarded-Proto " : "https" ,
56
- "X-Forwarded-Port " : "443" ,
58
+ host : "abcdefghijz.cloudfront.net" ,
59
+ "x-forwarded-proto " : "https" ,
60
+ "x-forwarded-port " : "443" ,
57
61
} ,
58
62
requestContext : {
59
63
domainName : "abcdefghijz.cloudfront.net" ,
@@ -70,9 +74,9 @@ describe("helpers", () => {
70
74
routeKey : "GET /route/{param}" ,
71
75
rawPath : "/route/value" ,
72
76
headers : {
73
- Host : "api.test.library.northwestern.edu" ,
74
- "X-Forwarded-Proto " : "https" ,
75
- "X-Forwarded-Port " : "443" ,
77
+ host : "api.test.library.northwestern.edu" ,
78
+ "x-forwarded-proto " : "https" ,
79
+ "x-forwarded-port " : "443" ,
76
80
} ,
77
81
requestContext : {
78
82
domainName : "api.test.library.northwestern.edu" ,
@@ -91,9 +95,9 @@ describe("helpers", () => {
91
95
routeKey : "GET /route/{param}" ,
92
96
rawPath : "/route/value" ,
93
97
headers : {
94
- Host : "localhost" ,
95
- "X-Forwarded-Proto " : "http" ,
96
- "X-Forwarded-Port " : "3000" ,
98
+ host : "localhost" ,
99
+ "x-forwarded-proto " : "http" ,
100
+ "x-forwarded-port " : "3000" ,
97
101
} ,
98
102
requestContext : {
99
103
domainName : "api.test.library.northwestern.edu" ,
@@ -121,25 +125,44 @@ describe("helpers", () => {
121
125
} ) ;
122
126
} ) ;
123
127
124
- describe ( "getHeader()" , ( ) => {
125
- it ( "extracts event headers regardless of case" , ( ) => {
126
- const event = {
127
- routeKey : "GET /route/{param}" ,
128
- rawPath : "/route/value" ,
129
- headers : {
130
- Host : "abcdefghijz.execute-api.us-east-1.amazonaws.com" ,
131
- "X-Forwarded-Proto" : "https" ,
132
- "x-forwarded-port" : "443" ,
133
- } ,
134
- requestContext : {
135
- domainName : "abcdefghijz.execute-api.us-east-1.amazonaws.com" ,
136
- domainPrefix : "abcdefghijz" ,
137
- stage : "v2" ,
138
- } ,
139
- } ;
128
+ describe ( "decodeEventBody()" , ( ) => {
129
+ it ( "passes plain text body through unaltered" , ( ) => {
130
+ const event = helpers
131
+ . mockEvent ( "POST" , "/search" )
132
+ . body ( "plain body" )
133
+ . render ( ) ;
134
+ const result = decodeEventBody ( event ) ;
135
+ expect ( result . isBase64Encoded ) . to . be . false ;
136
+ expect ( result . body ) . to . eq ( "plain body" ) ;
137
+ } ) ;
138
+
139
+ it ( "decodes base64 encoded body" , ( ) => {
140
+ const event = helpers
141
+ . mockEvent ( "POST" , "/search" )
142
+ . body ( "encoded body" )
143
+ . base64Encode ( )
144
+ . render ( ) ;
145
+ expect ( event . isBase64Encoded ) . to . be . true ;
146
+ expect ( event . body ) . not . to . eq ( "encoded body" ) ;
147
+
148
+ const result = decodeEventBody ( event ) ;
149
+ expect ( result . isBase64Encoded ) . to . be . false ;
150
+ expect ( result . body ) . to . eq ( "encoded body" ) ;
151
+ } ) ;
152
+ } ) ;
153
+
154
+ describe ( "normalizeHeaders()" , ( ) => {
155
+ it ( "converts all headers to lowercase" , ( ) => {
156
+ const upperHeaders = [ "Host" , "X-Forwarded-For" , "X-Forwarded-Proto" ] ;
157
+ const lowerHeaders = [ "host" , "x-forwarded-for" , "x-forwarded-proto" ] ;
158
+
159
+ const event = helpers . mockEvent ( "GET" , "/search" ) . render ( ) ;
160
+ expect ( event . headers ) . not . to . include . keys ( lowerHeaders ) ;
161
+ expect ( event . headers ) . to . include . keys ( upperHeaders ) ;
140
162
141
- expect ( getHeader ( event , "X-Forwarded-Proto" ) ) . to . eq ( "https" ) ;
142
- expect ( getHeader ( event , "X-Forwarded-Port" ) ) . to . eq ( "443" ) ;
163
+ const result = normalizeHeaders ( event ) ;
164
+ expect ( result . headers ) . to . include . keys ( lowerHeaders ) ;
165
+ expect ( result . headers ) . not . to . include . keys ( upperHeaders ) ;
143
166
} ) ;
144
167
} ) ;
145
168
} ) ;
0 commit comments