-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathbundled-code.test.ts
More file actions
101 lines (91 loc) · 2.66 KB
/
bundled-code.test.ts
File metadata and controls
101 lines (91 loc) · 2.66 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
import * as path from 'path';
import { BundledCode } from '../src/bundled-code';
describe('BundledCode', () => {
it('render() should combine handler functions', () => {
const expected =
`// NOTE: this code is supposed to be substituted with \`python-format-js\`.
// \`python-format-js\` does not correctly handle double curly braces \`{{\`
// and \`}}\`. however, a pair of curly braces containing multiple lines
// are not substituted.
function handler(event) {
var eventType = event.context.eventType;
var functions = [addDate,supplementIndex];
var isRequest = eventType === 'viewer-request';
for (var i = 0; i < functions.length; ++i) {
var fn = functions[i];
var results = fn(event);
if (isRequest) {
event.request = results;
} else {
event.response = results;
}
if (shouldTerminate(results, isRequest)) {
break;
}
}
if (isRequest) {
return event.request;
} else {
return event.response;
}
}
// CloudFront function may return a response object in a viewer request event,
// and processing should be halted in that case.
function shouldTerminate(results, isRequest) {
var returnedResponse = results.statusCode != null;
return isRequest && returnedResponse;
}
function addDate(event) {
var request = event.request;
var header = request.header;
var date = header.date;
if (date == null) {
header.date = {
value: new Date().toUTCString().split(', ')[1],
};
}
return request;
}
function supplementIndex(event) {
var request = event.request;
if (request.uri.endsWith('/')) {
request.uri += '/index.html';
}
return request;
}
`;
const code = new BundledCode(
{
filePath: path.resolve(__dirname, 'handlers/add-date.js'),
handler: 'addDate',
},
{
filePath: path.resolve(__dirname, 'handlers/supplement-index.js'),
handler: 'supplementIndex',
},
)
expect(code.render()).toEqual(expected);
});
it('constructor should throw RangeError if handler names duplicate', () => {
expect(() => new BundledCode(
{
filePath: 'handlers/add-date.js',
handler: 'addDate',
},
{
filePath: 'handlers/supplement-index.js',
handler: 'addDate',
},
)).toThrow(RangeError);
});
it('constructor should throw RangeError if no handlers are given', () => {
expect(() => new BundledCode()).toThrow(RangeError);
});
it('render() should throw Error if a handler function is not found', () => {
const code = new BundledCode({
filePath: 'non-existing-handler.js',
handler: 'nonExisting',
});
expect(() => code.render()).toThrow();
});
});