@defra/forms-engine-plugin 0.0.3 → 0.0.5
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/.public/assets/fonts/bold-affa96571d-v2.woff +0 -0
- package/.public/assets/fonts/bold-b542beb274-v2.woff2 +0 -0
- package/.public/assets/fonts/light-94a07e06a1-v2.woff2 +0 -0
- package/.public/assets/fonts/light-f591b13f7d-v2.woff +0 -0
- package/.public/assets/images/favicon.ico +0 -0
- package/.public/assets/images/favicon.svg +1 -0
- package/.public/assets/images/govuk-crest.svg +1 -0
- package/.public/assets/images/govuk-icon-180.png +0 -0
- package/.public/assets/images/govuk-icon-192.png +0 -0
- package/.public/assets/images/govuk-icon-512.png +0 -0
- package/.public/assets/images/govuk-icon-mask.svg +1 -0
- package/.public/assets/images/govuk-opengraph-image.png +0 -0
- package/.public/assets/manifest.json +39 -0
- package/.public/assets-manifest.json +24 -0
- package/.public/javascripts/application.0fd8c18.min.js +3 -0
- package/.public/javascripts/application.0fd8c18.min.js.LICENSE.txt +58 -0
- package/.public/javascripts/application.0fd8c18.min.js.map +1 -0
- package/.public/javascripts/file-upload.b2f18f5.min.js +2 -0
- package/.public/javascripts/file-upload.b2f18f5.min.js.map +1 -0
- package/.public/javascripts/vendor/accessible-autocomplete.275d332.min.js +2 -0
- package/.public/javascripts/vendor/accessible-autocomplete.275d332.min.js.map +1 -0
- package/.public/stylesheets/application.e340021.min.css +14 -0
- package/.public/stylesheets/application.e340021.min.css.map +1 -0
- package/package.json +7 -2
- package/.browserslistrc +0 -16
- package/.editorconfig +0 -9
- package/.eslintrc.cjs +0 -266
- package/.github/dependabot.yml +0 -85
- package/.github/workflows/check-pull-request.yml +0 -209
- package/.github/workflows/pr-notifier.yml +0 -98
- package/.github/workflows/publish.yml +0 -111
- package/.husky/pre-commit +0 -1
- package/.lintstagedrc.js +0 -4
- package/.nvmrc +0 -1
- package/.prettierignore +0 -8
- package/.prettierrc.cjs +0 -26
- package/Dockerfile +0 -61
- package/Procfile +0 -1
- package/babel.config.cjs +0 -55
- package/compose/aws.env +0 -4
- package/compose/start-localstack.sh +0 -26
- package/docker-compose.yaml +0 -86
- package/globals.d.ts +0 -1
- package/jest.config.cjs +0 -54
- package/jest.environment.js +0 -4
- package/jest.setup.cjs +0 -14
- package/postcss.config.js +0 -26
- package/sonar-project.properties +0 -17
- package/stylelint.config.js +0 -10
- package/test/client/javascripts/file-upload.test.js +0 -1197
- package/test/condition/checkboxes.test.js +0 -112
- package/test/condition/radios.test.js +0 -112
- package/test/condition/text.test.js +0 -103
- package/test/fixtures/assets-manifest.json +0 -4
- package/test/fixtures/form.js +0 -86
- package/test/fixtures/index.js +0 -2
- package/test/fixtures/list.js +0 -92
- package/test/form/cookies.test.js +0 -338
- package/test/form/csrf.test.js +0 -87
- package/test/form/definitions/basic.js +0 -101
- package/test/form/definitions/blank.js +0 -10
- package/test/form/definitions/checkboxes.json +0 -88
- package/test/form/definitions/components.json +0 -452
- package/test/form/definitions/conditional-reveal.js +0 -140
- package/test/form/definitions/conditions-basic.js +0 -187
- package/test/form/definitions/conditions-complex.js +0 -338
- package/test/form/definitions/conditions-dates.js +0 -78
- package/test/form/definitions/conditions-escaping.js +0 -143
- package/test/form/definitions/demo-cph-number.js +0 -3099
- package/test/form/definitions/feedback.json +0 -45
- package/test/form/definitions/fields-optional.js +0 -402
- package/test/form/definitions/fields-required.js +0 -402
- package/test/form/definitions/file-upload-basic.js +0 -44
- package/test/form/definitions/file-upload.js +0 -66
- package/test/form/definitions/minimal.js +0 -39
- package/test/form/definitions/phase-alpha.json +0 -33
- package/test/form/definitions/phase-default.json +0 -26
- package/test/form/definitions/radios.json +0 -88
- package/test/form/definitions/repeat-mixed.js +0 -54
- package/test/form/definitions/repeat.js +0 -70
- package/test/form/definitions/status.json +0 -126
- package/test/form/definitions/templates.js +0 -183
- package/test/form/definitions/test.json +0 -581
- package/test/form/definitions/text.json +0 -75
- package/test/form/definitions/titles.json +0 -170
- package/test/form/definitions.test.js +0 -47
- package/test/form/exit-page.test.js +0 -210
- package/test/form/feedback.test.js +0 -68
- package/test/form/fields-optional.test.js +0 -237
- package/test/form/fields-required.test.js +0 -294
- package/test/form/file-upload.test.js +0 -313
- package/test/form/govuk-notify.test.js +0 -449
- package/test/form/journey-basic.test.js +0 -444
- package/test/form/persist-files.test.js +0 -227
- package/test/form/phase-banner.test.js +0 -71
- package/test/form/repeat.test.js +0 -628
- package/test/form/summary-submission-email.test.js +0 -95
- package/test/form/template.test.js +0 -288
- package/test/form/titles.test.js +0 -204
- package/test/helpers/component-helpers.js +0 -74
- package/test/utils/get-cookie.js +0 -42
- package/test/utils/get-form-definitions.js +0 -18
- package/tmp.pdf +0 -1
- package/tsconfig.json +0 -28
- package/webpack.config.js +0 -208
|
@@ -1,449 +0,0 @@
|
|
|
1
|
-
import { join } from 'node:path'
|
|
2
|
-
|
|
3
|
-
import { StatusCodes } from 'http-status-codes'
|
|
4
|
-
import { outdent } from 'outdent'
|
|
5
|
-
|
|
6
|
-
import { createServer } from '~/src/server/index.js'
|
|
7
|
-
import {
|
|
8
|
-
persistFiles,
|
|
9
|
-
submit
|
|
10
|
-
} from '~/src/server/plugins/engine/services/formSubmissionService.js'
|
|
11
|
-
import { getFormMetadata } from '~/src/server/plugins/engine/services/formsService.js'
|
|
12
|
-
import {
|
|
13
|
-
getUploadStatus,
|
|
14
|
-
initiateUpload
|
|
15
|
-
} from '~/src/server/plugins/engine/services/uploadService.js'
|
|
16
|
-
import { FileStatus, UploadStatus } from '~/src/server/plugins/engine/types.js'
|
|
17
|
-
import { FormAction } from '~/src/server/routes/types.js'
|
|
18
|
-
import { sendNotification } from '~/src/server/utils/notify.js'
|
|
19
|
-
import * as fixtures from '~/test/fixtures/index.js'
|
|
20
|
-
import { getCookieHeader } from '~/test/utils/get-cookie.js'
|
|
21
|
-
|
|
22
|
-
const basePath = '/components'
|
|
23
|
-
|
|
24
|
-
jest.mock('~/src/server/utils/notify.ts')
|
|
25
|
-
jest.mock('~/src/server/plugins/engine/services/uploadService.js')
|
|
26
|
-
jest.mock('~/src/server/plugins/engine/services/formSubmissionService.js')
|
|
27
|
-
jest.mock('~/src/server/plugins/engine/services/formsService.js')
|
|
28
|
-
|
|
29
|
-
/**
|
|
30
|
-
* @satisfies {UploadInitiateResponse}
|
|
31
|
-
*/
|
|
32
|
-
const uploadInitiateResponse = {
|
|
33
|
-
uploadId: '15b2303c-9965-4632-acb6-0776081e0399',
|
|
34
|
-
uploadUrl:
|
|
35
|
-
'http://localhost:7337/upload-and-scan/15b2303c-9965-4632-acb6-0776081e0399',
|
|
36
|
-
statusUrl: 'http://localhost:7337/status/15b2303c-9965-4632-acb6-0776081e0399'
|
|
37
|
-
}
|
|
38
|
-
|
|
39
|
-
/**
|
|
40
|
-
* @satisfies {UploadStatusResponse}
|
|
41
|
-
*/
|
|
42
|
-
const readyStatusResponse = {
|
|
43
|
-
uploadStatus: UploadStatus.ready,
|
|
44
|
-
metadata: {
|
|
45
|
-
retrievalKey: 'enrique.chase@defra.gov.uk'
|
|
46
|
-
},
|
|
47
|
-
form: {
|
|
48
|
-
file: {
|
|
49
|
-
fileId: '5a76a1a3-bc8a-4bc0-859a-116d775c7f15',
|
|
50
|
-
filename: 'test.pdf',
|
|
51
|
-
contentLength: 1024,
|
|
52
|
-
fileStatus: FileStatus.complete
|
|
53
|
-
}
|
|
54
|
-
},
|
|
55
|
-
numberOfRejectedFiles: 0
|
|
56
|
-
}
|
|
57
|
-
|
|
58
|
-
const submitResponse = {
|
|
59
|
-
message: 'Submit completed',
|
|
60
|
-
result: {
|
|
61
|
-
files: {
|
|
62
|
-
main: '00000000-0000-0000-0000-000000000000',
|
|
63
|
-
repeaters: {}
|
|
64
|
-
}
|
|
65
|
-
}
|
|
66
|
-
}
|
|
67
|
-
|
|
68
|
-
describe('Submission journey test', () => {
|
|
69
|
-
/** @type {Server} */
|
|
70
|
-
let server
|
|
71
|
-
|
|
72
|
-
// Create server before each test
|
|
73
|
-
beforeAll(async () => {
|
|
74
|
-
server = await createServer({
|
|
75
|
-
formFileName: 'components.json',
|
|
76
|
-
formFilePath: join(import.meta.dirname, 'definitions')
|
|
77
|
-
})
|
|
78
|
-
|
|
79
|
-
await server.initialize()
|
|
80
|
-
})
|
|
81
|
-
|
|
82
|
-
beforeEach(() => {
|
|
83
|
-
jest.mocked(getFormMetadata).mockResolvedValue(fixtures.form.metadata)
|
|
84
|
-
})
|
|
85
|
-
|
|
86
|
-
afterAll(async () => {
|
|
87
|
-
await server.stop()
|
|
88
|
-
})
|
|
89
|
-
|
|
90
|
-
test('GET /all-components returns 200', async () => {
|
|
91
|
-
const res = await server.inject({
|
|
92
|
-
url: `${basePath}/all-components`
|
|
93
|
-
})
|
|
94
|
-
|
|
95
|
-
expect(res.statusCode).toBe(StatusCodes.OK)
|
|
96
|
-
expect(res.headers['content-type']).toContain('text/html')
|
|
97
|
-
})
|
|
98
|
-
|
|
99
|
-
test('POST /summary returns 303', async () => {
|
|
100
|
-
const sender = jest.mocked(sendNotification)
|
|
101
|
-
jest.mocked(initiateUpload).mockResolvedValue(uploadInitiateResponse)
|
|
102
|
-
jest.mocked(getUploadStatus).mockResolvedValue(readyStatusResponse)
|
|
103
|
-
jest.mocked(getFormMetadata).mockResolvedValue(fixtures.form.metadata)
|
|
104
|
-
jest.mocked(submit).mockResolvedValue(submitResponse)
|
|
105
|
-
|
|
106
|
-
// Components page
|
|
107
|
-
const res = await componentsPage()
|
|
108
|
-
|
|
109
|
-
// Extract the session cookie
|
|
110
|
-
const headers = getCookieHeader(res, 'session')
|
|
111
|
-
|
|
112
|
-
// File upload page
|
|
113
|
-
await fileUploadPage(headers)
|
|
114
|
-
|
|
115
|
-
// Summary page
|
|
116
|
-
await summaryPage(headers)
|
|
117
|
-
|
|
118
|
-
expect(persistFiles).toHaveBeenCalledTimes(1)
|
|
119
|
-
expect(sender).toHaveBeenCalledWith({
|
|
120
|
-
templateId: process.env.NOTIFY_TEMPLATE_ID,
|
|
121
|
-
emailAddress: 'enrique.chase@defra.gov.uk',
|
|
122
|
-
personalisation: {
|
|
123
|
-
subject: 'Form submission: All components',
|
|
124
|
-
body: expect.stringContaining(outdent`
|
|
125
|
-
---
|
|
126
|
-
|
|
127
|
-
## Text field
|
|
128
|
-
|
|
129
|
-
Text field
|
|
130
|
-
|
|
131
|
-
---
|
|
132
|
-
|
|
133
|
-
## Multiline text field
|
|
134
|
-
|
|
135
|
-
Multiline text field
|
|
136
|
-
|
|
137
|
-
---
|
|
138
|
-
|
|
139
|
-
## Number field
|
|
140
|
-
|
|
141
|
-
1
|
|
142
|
-
|
|
143
|
-
---
|
|
144
|
-
|
|
145
|
-
## Date parts field
|
|
146
|
-
|
|
147
|
-
12 December 2012
|
|
148
|
-
|
|
149
|
-
---
|
|
150
|
-
|
|
151
|
-
## Month year field
|
|
152
|
-
|
|
153
|
-
December 2012
|
|
154
|
-
|
|
155
|
-
---
|
|
156
|
-
|
|
157
|
-
## Yes/No field
|
|
158
|
-
|
|
159
|
-
Yes \\(true\\)
|
|
160
|
-
|
|
161
|
-
---
|
|
162
|
-
|
|
163
|
-
## Email address field
|
|
164
|
-
|
|
165
|
-
user@email\\.com
|
|
166
|
-
|
|
167
|
-
---
|
|
168
|
-
|
|
169
|
-
## Telephone number field
|
|
170
|
-
|
|
171
|
-
\\+447900000000
|
|
172
|
-
|
|
173
|
-
---
|
|
174
|
-
|
|
175
|
-
## Address field
|
|
176
|
-
|
|
177
|
-
Address line 1
|
|
178
|
-
Address line 2
|
|
179
|
-
Town or city
|
|
180
|
-
CW1 1AB
|
|
181
|
-
|
|
182
|
-
---
|
|
183
|
-
|
|
184
|
-
## Radios field
|
|
185
|
-
|
|
186
|
-
Private Limited Company \\(privateLimitedCompany\\)
|
|
187
|
-
|
|
188
|
-
---
|
|
189
|
-
|
|
190
|
-
## Select field
|
|
191
|
-
|
|
192
|
-
Afghanistan \\(910400000\\)
|
|
193
|
-
|
|
194
|
-
---
|
|
195
|
-
|
|
196
|
-
## Autocomplete field
|
|
197
|
-
|
|
198
|
-
Czech Republic \\(910400044\\)
|
|
199
|
-
|
|
200
|
-
---
|
|
201
|
-
|
|
202
|
-
## Checkboxes field 1
|
|
203
|
-
|
|
204
|
-
* Shetland
|
|
205
|
-
|
|
206
|
-
---
|
|
207
|
-
|
|
208
|
-
## Checkboxes field 2
|
|
209
|
-
|
|
210
|
-
* Arabian
|
|
211
|
-
* Shire
|
|
212
|
-
* Race
|
|
213
|
-
|
|
214
|
-
---
|
|
215
|
-
|
|
216
|
-
## Checkboxes field 3 \\(number\\)
|
|
217
|
-
|
|
218
|
-
* 1 point \\(1\\)
|
|
219
|
-
|
|
220
|
-
---
|
|
221
|
-
|
|
222
|
-
## Checkboxes field 4 \\(number\\)
|
|
223
|
-
|
|
224
|
-
* None \\(0\\)
|
|
225
|
-
* 1 point \\(1\\)
|
|
226
|
-
|
|
227
|
-
---
|
|
228
|
-
|
|
229
|
-
## Upload your methodology statement
|
|
230
|
-
|
|
231
|
-
Uploaded 1 file:
|
|
232
|
-
|
|
233
|
-
* [test\\.pdf](https://forms-designer/file-download/5a76a1a3-bc8a-4bc0-859a-116d775c7f15)
|
|
234
|
-
|
|
235
|
-
---
|
|
236
|
-
|
|
237
|
-
[Download main form \\(CSV\\)](https://forms-designer/file-download/00000000-0000-0000-0000-000000000000)`)
|
|
238
|
-
}
|
|
239
|
-
})
|
|
240
|
-
|
|
241
|
-
expect(submit).toHaveBeenCalledWith({
|
|
242
|
-
main: [
|
|
243
|
-
{
|
|
244
|
-
name: 'textField',
|
|
245
|
-
title: 'Text field',
|
|
246
|
-
value: 'Text field'
|
|
247
|
-
},
|
|
248
|
-
{
|
|
249
|
-
name: 'multilineTextField',
|
|
250
|
-
title: 'Multiline text field',
|
|
251
|
-
value: 'Multiline text field'
|
|
252
|
-
},
|
|
253
|
-
{
|
|
254
|
-
name: 'numberField',
|
|
255
|
-
title: 'Number field',
|
|
256
|
-
value: '1'
|
|
257
|
-
},
|
|
258
|
-
{
|
|
259
|
-
name: 'datePartsField',
|
|
260
|
-
title: 'Date parts field',
|
|
261
|
-
value: '2012-12-12'
|
|
262
|
-
},
|
|
263
|
-
{
|
|
264
|
-
name: 'monthYearField',
|
|
265
|
-
title: 'Month year field',
|
|
266
|
-
value: '2012-12'
|
|
267
|
-
},
|
|
268
|
-
{
|
|
269
|
-
name: 'yesNoField',
|
|
270
|
-
title: 'Yes/No field',
|
|
271
|
-
value: 'true'
|
|
272
|
-
},
|
|
273
|
-
{
|
|
274
|
-
name: 'emailAddressField',
|
|
275
|
-
title: 'Email address field',
|
|
276
|
-
value: 'user@email.com'
|
|
277
|
-
},
|
|
278
|
-
{
|
|
279
|
-
name: 'telephoneNumberField',
|
|
280
|
-
title: 'Telephone number field',
|
|
281
|
-
value: '+447900000000'
|
|
282
|
-
},
|
|
283
|
-
{
|
|
284
|
-
name: 'addressField',
|
|
285
|
-
title: 'Address field',
|
|
286
|
-
value: 'Address line 1,Address line 2,Town or city,CW1 1AB'
|
|
287
|
-
},
|
|
288
|
-
{
|
|
289
|
-
name: 'radiosField',
|
|
290
|
-
title: 'Radios field',
|
|
291
|
-
value: 'privateLimitedCompany'
|
|
292
|
-
},
|
|
293
|
-
{
|
|
294
|
-
name: 'selectField',
|
|
295
|
-
title: 'Select field',
|
|
296
|
-
value: '910400000'
|
|
297
|
-
},
|
|
298
|
-
{
|
|
299
|
-
name: 'autocompleteField',
|
|
300
|
-
title: 'Autocomplete field',
|
|
301
|
-
value: '910400044'
|
|
302
|
-
},
|
|
303
|
-
{
|
|
304
|
-
name: 'checkboxesSingle',
|
|
305
|
-
title: 'Checkboxes field 1',
|
|
306
|
-
value: 'Shetland'
|
|
307
|
-
},
|
|
308
|
-
{
|
|
309
|
-
name: 'checkboxesMultiple',
|
|
310
|
-
title: 'Checkboxes field 2',
|
|
311
|
-
value: 'Arabian,Shire,Race'
|
|
312
|
-
},
|
|
313
|
-
{
|
|
314
|
-
name: 'checkboxesSingleNumber',
|
|
315
|
-
title: 'Checkboxes field 3 (number)',
|
|
316
|
-
value: '1'
|
|
317
|
-
},
|
|
318
|
-
{
|
|
319
|
-
name: 'checkboxesMultipleNumber',
|
|
320
|
-
title: 'Checkboxes field 4 (number)',
|
|
321
|
-
value: '0,1'
|
|
322
|
-
},
|
|
323
|
-
{
|
|
324
|
-
name: 'fileUpload',
|
|
325
|
-
title: 'Upload your methodology statement',
|
|
326
|
-
value: '5a76a1a3-bc8a-4bc0-859a-116d775c7f15'
|
|
327
|
-
}
|
|
328
|
-
],
|
|
329
|
-
repeaters: [],
|
|
330
|
-
retrievalKey: 'enrique.chase@defra.gov.uk',
|
|
331
|
-
sessionId: expect.any(String)
|
|
332
|
-
})
|
|
333
|
-
|
|
334
|
-
// Status page
|
|
335
|
-
await statusPage(headers)
|
|
336
|
-
})
|
|
337
|
-
|
|
338
|
-
/**
|
|
339
|
-
* POSTs data to the components page
|
|
340
|
-
*/
|
|
341
|
-
async function componentsPage() {
|
|
342
|
-
const form = {
|
|
343
|
-
textField: 'Text field',
|
|
344
|
-
multilineTextField: 'Multiline text field',
|
|
345
|
-
numberField: '1',
|
|
346
|
-
datePartsField__day: '12',
|
|
347
|
-
datePartsField__month: '12',
|
|
348
|
-
datePartsField__year: '2012',
|
|
349
|
-
monthYearField__month: '12',
|
|
350
|
-
monthYearField__year: '2012',
|
|
351
|
-
yesNoField: 'true',
|
|
352
|
-
emailAddressField: 'user@email.com',
|
|
353
|
-
telephoneNumberField: '+447900000000',
|
|
354
|
-
addressField__addressLine1: 'Address line 1',
|
|
355
|
-
addressField__addressLine2: 'Address line 2',
|
|
356
|
-
addressField__town: 'Town or city',
|
|
357
|
-
addressField__postcode: 'CW1 1AB',
|
|
358
|
-
radiosField: 'privateLimitedCompany',
|
|
359
|
-
selectField: '910400000',
|
|
360
|
-
autocompleteField: '910400044',
|
|
361
|
-
checkboxesSingle: 'Shetland',
|
|
362
|
-
checkboxesMultiple: ['Arabian', 'Shire', 'Race'],
|
|
363
|
-
checkboxesSingleNumber: 1,
|
|
364
|
-
checkboxesMultipleNumber: [0, 1]
|
|
365
|
-
}
|
|
366
|
-
|
|
367
|
-
// POST the form data to set the state
|
|
368
|
-
const res = await server.inject({
|
|
369
|
-
url: `${basePath}/all-components`,
|
|
370
|
-
method: 'POST',
|
|
371
|
-
payload: form
|
|
372
|
-
})
|
|
373
|
-
|
|
374
|
-
expect(res.statusCode).toBe(StatusCodes.SEE_OTHER)
|
|
375
|
-
expect(res.headers.location).toBe(`${basePath}/methodology-statement`)
|
|
376
|
-
|
|
377
|
-
return res
|
|
378
|
-
}
|
|
379
|
-
|
|
380
|
-
/**
|
|
381
|
-
* Adds a file to the temp state as
|
|
382
|
-
* would happen on redirect from CDP
|
|
383
|
-
* @param {OutgoingHttpHeaders} headers
|
|
384
|
-
*/
|
|
385
|
-
async function fileUploadPage(headers) {
|
|
386
|
-
await server.inject({
|
|
387
|
-
url: `${basePath}/methodology-statement`,
|
|
388
|
-
headers
|
|
389
|
-
})
|
|
390
|
-
|
|
391
|
-
const res = await server.inject({
|
|
392
|
-
url: `${basePath}/methodology-statement`,
|
|
393
|
-
method: 'POST',
|
|
394
|
-
headers,
|
|
395
|
-
payload: {}
|
|
396
|
-
})
|
|
397
|
-
|
|
398
|
-
expect(res.statusCode).toBe(StatusCodes.SEE_OTHER)
|
|
399
|
-
expect(res.headers.location).toBe(`${basePath}/summary`)
|
|
400
|
-
|
|
401
|
-
return res
|
|
402
|
-
}
|
|
403
|
-
|
|
404
|
-
/**
|
|
405
|
-
* GETs and POSTs the summary page
|
|
406
|
-
* @param {OutgoingHttpHeaders} headers
|
|
407
|
-
*/
|
|
408
|
-
async function summaryPage(headers) {
|
|
409
|
-
await server.inject({
|
|
410
|
-
url: `${basePath}/summary`,
|
|
411
|
-
headers
|
|
412
|
-
})
|
|
413
|
-
|
|
414
|
-
const res = await server.inject({
|
|
415
|
-
url: `${basePath}/summary`,
|
|
416
|
-
method: 'POST',
|
|
417
|
-
headers,
|
|
418
|
-
payload: {
|
|
419
|
-
action: FormAction.Send
|
|
420
|
-
}
|
|
421
|
-
})
|
|
422
|
-
|
|
423
|
-
expect(res.statusCode).toBe(StatusCodes.SEE_OTHER)
|
|
424
|
-
expect(res.headers.location).toBe(`${basePath}/status`)
|
|
425
|
-
|
|
426
|
-
return res
|
|
427
|
-
}
|
|
428
|
-
|
|
429
|
-
/**
|
|
430
|
-
* GETs the summary page
|
|
431
|
-
* @param {OutgoingHttpHeaders} headers
|
|
432
|
-
*/
|
|
433
|
-
async function statusPage(headers) {
|
|
434
|
-
// Finally GET the /{slug}/status page
|
|
435
|
-
const statusRes = await server.inject({
|
|
436
|
-
url: `${basePath}/status`,
|
|
437
|
-
headers
|
|
438
|
-
})
|
|
439
|
-
|
|
440
|
-
expect(statusRes.statusCode).toBe(StatusCodes.OK)
|
|
441
|
-
expect(statusRes.headers['content-type']).toContain('text/html')
|
|
442
|
-
}
|
|
443
|
-
})
|
|
444
|
-
|
|
445
|
-
/**
|
|
446
|
-
* @import { Server } from '@hapi/hapi'
|
|
447
|
-
* @import { OutgoingHttpHeaders } from 'node:http'
|
|
448
|
-
* @import { UploadInitiateResponse, UploadStatusResponse } from '~/src/server/plugins/engine/types.js'
|
|
449
|
-
*/
|