-
-
Notifications
You must be signed in to change notification settings - Fork 35
Expand file tree
/
Copy pathfetch-handler.unit.test.ts
More file actions
111 lines (91 loc) · 3.48 KB
/
Copy pathfetch-handler.unit.test.ts
File metadata and controls
111 lines (91 loc) · 3.48 KB
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
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
import { describe, expect, it } from 'vitest';
import { createFetchHandler } from './fetch-handler';
async function dispatch(environment: string | undefined, request: Request) {
let receivedRequest: Request | undefined;
const fetch = createFetchHandler(environment, (request: Request) => {
receivedRequest = request;
return new Response();
});
await fetch(request);
if (!receivedRequest) {
throw new Error('Expected the wrapped fetch to be called');
}
return receivedRequest;
}
describe('createFetchHandler', () => {
for (const environment of ['staging', 'production']) {
it(`should force an https request URL in ${environment} when x-forwarded-proto is missing`, async () => {
const request = await dispatch(
environment,
new Request('http://example.com/foo'),
);
expect(request.url).toBe('https://example.com/foo');
});
it(`should force an https request URL in ${environment} when x-forwarded-proto is http`, async () => {
const request = await dispatch(
environment,
new Request('http://example.com/foo', {
headers: {
'x-forwarded-proto': 'http',
},
}),
);
expect(request.url).toBe('https://example.com/foo');
});
}
it('should force an https request URL when NODE_ENV is unset or unrecognised', async () => {
for (const environment of [undefined, '', 'prod']) {
const request = await dispatch(
environment,
new Request('http://example.com/foo'),
);
expect(request.url).toBe('https://example.com/foo');
}
});
for (const environment of ['development', 'testing']) {
it(`should keep an http request URL in ${environment}`, async () => {
const request = await dispatch(
environment,
new Request('http://example.com/foo'),
);
expect(request.url).toBe('http://example.com/foo');
});
it(`should still honour x-forwarded-proto in ${environment}`, async () => {
const request = await dispatch(
environment,
new Request('http://example.com/foo', {
headers: {
'x-forwarded-proto': 'https',
},
}),
);
expect(request.url).toBe('https://example.com/foo');
});
}
it('should apply x-forwarded-host to the request URL', async () => {
const request = await dispatch(
'production',
new Request('http://internal.host/foo', {
headers: {
'x-forwarded-host': 'example.com',
},
}),
);
expect(request.url).toBe('https://example.com/foo');
});
it('should force the accept header in every environment', async () => {
for (const environment of ['development', 'production']) {
const request = await dispatch(
environment,
new Request('http://example.com/foo', {
headers: {
accept: 'text/html',
},
}),
);
expect(request.headers.get('accept')).toBe(
'application/activity+json',
);
}
});
});