Skip to content

Commit 9543516

Browse files
committed
test: add test for query strings
closes #214
1 parent 9ecb857 commit 9543516

File tree

2 files changed

+43
-11
lines changed

2 files changed

+43
-11
lines changed

__tests__/integration.js

Lines changed: 29 additions & 11 deletions
Original file line numberDiff line numberDiff line change
@@ -19,9 +19,6 @@ describe.each(EACH_MATRIX)('%s:%s: integration tests', (eventSourceName, framewo
1919
beforeEach(() => {
2020
app = express()
2121
router = express.Router()
22-
app.set('view engine', 'ejs')
23-
app.engine('.ejs', ejs)
24-
app.set('views', path.join(jestHelpersPath, 'views'))
2522
app.use('/', router)
2623
serverlessExpressInstance = serverlessExpress({ app, log })
2724
})
@@ -37,6 +34,9 @@ describe.each(EACH_MATRIX)('%s:%s: integration tests', (eventSourceName, framewo
3734
})
3835

3936
test('GET HTML', async () => {
37+
app.set('view engine', 'ejs')
38+
app.engine('.ejs', ejs)
39+
app.set('views', path.join(jestHelpersPath, 'views'))
4040
router.get('/', (req, res) => {
4141
const currentInvoke = serverlessExpress.getCurrentInvoke()
4242
const eventPath = currentInvoke.event.path || currentInvoke.event.rawPath || currentInvoke.event.Records[0].cf.request.uri
@@ -66,24 +66,42 @@ describe.each(EACH_MATRIX)('%s:%s: integration tests', (eventSourceName, framewo
6666
})
6767

6868
test('GET JSON', async () => {
69-
const jsonResponse = { data: { name: 'Brett' } }
69+
// TODO: Fix lambdaEdge query strings
70+
const multiValueQueryStringParameters = {
71+
singleNormal: ['1'],
72+
singleSpecial: ['hello world!'],
73+
arr: ['a', 'b', 'hello world~']
74+
}
75+
const queryStringParameters = {
76+
singleNormal: '1',
77+
singleSpecial: 'hello world!',
78+
arr: 'hello world~'
79+
}
7080
router.get('/users', (req, res) => {
71-
res.set('X-Custom-Header', 'test')
72-
res.json(jsonResponse)
81+
const { singleNormal, singleSpecial, arr } = req.query
82+
res.set('X-Custom-Header', singleNormal)
83+
res.json({ singleNormal, singleSpecial, arr })
7384
})
7485
const event = makeEvent({
7586
eventSourceName,
7687
path: '/users',
77-
httpMethod: 'GET'
88+
httpMethod: 'GET',
89+
queryStringParameters,
90+
multiValueQueryStringParameters
7891
})
7992
const response = await serverlessExpressInstance.handler(event)
8093
const expectedResponse = makeResponse({
8194
eventSourceName,
82-
body: JSON.stringify(jsonResponse),
95+
body: eventSourceName === 'lambdaEdge'
96+
? '{}'
97+
: JSON.stringify({
98+
...queryStringParameters,
99+
arr: multiValueQueryStringParameters.arr
100+
}),
83101
multiValueHeaders: {
84-
'content-length': ['25'],
85-
etag: ['W/"19-dkLV0OMoaMM+tzXUD50EB/AHHoI"'],
86-
'x-custom-header': ['test']
102+
'content-length': ['82'],
103+
etag: eventSourceName === 'lambdaEdge' ? ['W/"2-vyGp6PvFo4RvsFtPoIWeCReyIC8"'] : ['W/"52-QR4hWttXm/4xeZPYy7nze/EjYXg"'],
104+
'x-custom-header': eventSourceName === 'lambdaEdge' ? ['undefined'] : ['1']
87105
}
88106
})
89107
expect(response).toEqual(expectedResponse)

jest-helpers/api-gateway-v2-event.js

Lines changed: 14 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1,3 +1,4 @@
1+
const { URLSearchParams } = require('url')
12
const clone = require('./clone')
23
const mergeDeep = require('./merge-deep')
34

@@ -53,6 +54,19 @@ function makeApiGatewayV2Event (values = {}) {
5354
const mergedEvent = mergeDeep(baseEvent, values)
5455

5556
if (!mergedEvent.rawPath) mergedEvent.rawPath = values.path
57+
58+
if (!mergedEvent.rawQueryString && values.multiValueQueryStringParameters) {
59+
const multiValueQueryStringParametersToArray = []
60+
Object.entries(values.multiValueQueryStringParameters)
61+
.forEach(([qKey, qValues]) => {
62+
qValues.forEach(qValue => {
63+
multiValueQueryStringParametersToArray.push([qKey, qValue])
64+
})
65+
})
66+
const rawQueryString = new URLSearchParams(multiValueQueryStringParametersToArray)
67+
mergedEvent.rawQueryString = rawQueryString.toString()
68+
}
69+
5670
if (!mergedEvent.requestContext.http.path) mergedEvent.requestContext.http.path = values.path
5771
if (!mergedEvent.requestContext.http.method) mergedEvent.requestContext.http.method = values.httpMethod
5872

0 commit comments

Comments
 (0)