Skip to content

Commit 2c2ef47

Browse files
committed
fixed test coverage
1 parent e3759c5 commit 2c2ef47

File tree

2 files changed

+81
-3
lines changed

2 files changed

+81
-3
lines changed

packages/event-handler/src/rest/converters.ts

Lines changed: 3 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -36,11 +36,11 @@ export const proxyEventToWebRequest = (
3636
const { domainName } = event.requestContext;
3737

3838
const headers = new Headers();
39-
for (const [name, value] of Object.entries(event.headers ?? {})) {
40-
if (value != null) headers.set(name, value);
39+
for (const [name, value] of Object.entries(event.headers)) {
40+
if (value !== undefined) headers.set(name, value);
4141
}
4242

43-
for (const [name, values] of Object.entries(event.multiValueHeaders ?? {})) {
43+
for (const [name, values] of Object.entries(event.multiValueHeaders)) {
4444
for (const value of values ?? []) {
4545
const headerValue = headers.get(name);
4646
if (!headerValue?.includes(value)) {

packages/event-handler/tests/unit/rest/converters.test.ts

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -51,6 +51,45 @@ describe('Converters', () => {
5151
expect(request.url).toBe('http://api.example.com/test');
5252
});
5353

54+
it('handles undefined values in multiValueHeaders arrays', () => {
55+
// Prepare
56+
const event = {
57+
...baseEvent,
58+
multiValueHeaders: {
59+
Accept: undefined,
60+
'Custom-Header': ['value1'],
61+
},
62+
};
63+
64+
// Act
65+
const request = proxyEventToWebRequest(event);
66+
67+
// Assess
68+
expect(request).toBeInstanceOf(Request);
69+
expect(request.headers.get('Accept')).toBe(null);
70+
expect(request.headers.get('Custom-Header')).toBe('value1');
71+
});
72+
73+
it('handles undefined values in multiValueQueryStringParameters arrays', () => {
74+
// Prepare
75+
const event = {
76+
...baseEvent,
77+
multiValueQueryStringParameters: {
78+
filter: undefined,
79+
sort: ['desc'],
80+
},
81+
};
82+
83+
// Act
84+
const request = proxyEventToWebRequest(event);
85+
86+
// Assess
87+
expect(request).toBeInstanceOf(Request);
88+
const url = new URL(request.url);
89+
expect(url.searchParams.has('filter')).toBe(false);
90+
expect(url.searchParams.get('sort')).toBe('desc');
91+
});
92+
5493
it('handles POST request with string body', () => {
5594
// Prepare
5695
const event = {
@@ -254,6 +293,45 @@ describe('Converters', () => {
254293
expect(url.searchParams.get('single')).toBe('value');
255294
expect(url.searchParams.getAll('multi')).toEqual(['value1', 'value2']);
256295
});
296+
297+
it('skips undefined queryStringParameter values', () => {
298+
// Prepare
299+
const event = {
300+
...baseEvent,
301+
queryStringParameters: {
302+
valid: 'value',
303+
null: undefined,
304+
},
305+
};
306+
307+
// Act
308+
const request = proxyEventToWebRequest(event);
309+
310+
// Assess
311+
expect(request).toBeInstanceOf(Request);
312+
const url = new URL(request.url);
313+
expect(url.searchParams.get('valid')).toBe('value');
314+
expect(url.searchParams.has('null')).toBe(false);
315+
});
316+
317+
it('skips undefined header values', () => {
318+
// Prepare
319+
const event = {
320+
...baseEvent,
321+
headers: {
322+
'Valid-Header': 'value',
323+
'Undefined-Header': undefined,
324+
},
325+
};
326+
327+
// Act
328+
const request = proxyEventToWebRequest(event);
329+
330+
// Assess
331+
expect(request).toBeInstanceOf(Request);
332+
expect(request.headers.get('Valid-Header')).toBe('value');
333+
expect(request.headers.get('Undefined-Header')).toBe(null);
334+
});
257335
});
258336

259337
describe('responseToProxyResult', () => {

0 commit comments

Comments
 (0)