@defra/forms-engine-plugin 0.1.10 → 0.1.12
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/javascripts/file-upload.min.js +1 -1
- package/.public/javascripts/file-upload.min.js.map +1 -1
- package/.public/stylesheets/application.min.css +1 -1
- package/.public/stylesheets/application.min.css.map +1 -1
- package/.server/client/javascripts/file-upload.js +45 -4
- package/.server/client/javascripts/file-upload.js.map +1 -1
- package/.server/client/stylesheets/application.scss +10 -0
- package/.server/config/index.js +3 -14
- package/.server/config/index.js.map +1 -1
- package/.server/server/constants.js +2 -0
- package/.server/server/constants.js.map +1 -1
- package/.server/server/devserver/dxt-devtool-baselayout.html +71 -0
- package/.server/server/forms/register-as-a-unicorn-breeder.json +393 -0
- package/.server/server/forms/register-as-a-unicorn-breeder.yaml +251 -0
- package/.server/server/index.js +12 -17
- package/.server/server/index.js.map +1 -1
- package/.server/server/plugins/engine/components/AutocompleteField.js +2 -0
- package/.server/server/plugins/engine/components/AutocompleteField.js.map +1 -1
- package/.server/server/plugins/engine/components/CheckboxesField.js +3 -4
- package/.server/server/plugins/engine/components/CheckboxesField.js.map +1 -1
- package/.server/server/plugins/engine/components/ComponentCollection.js +37 -16
- package/.server/server/plugins/engine/components/ComponentCollection.js.map +1 -1
- package/.server/server/plugins/engine/components/DatePartsField.js +36 -2
- package/.server/server/plugins/engine/components/DatePartsField.js.map +1 -1
- package/.server/server/plugins/engine/components/EmailAddressField.js +19 -3
- package/.server/server/plugins/engine/components/EmailAddressField.js.map +1 -1
- package/.server/server/plugins/engine/components/FileUploadField.js +44 -4
- package/.server/server/plugins/engine/components/FileUploadField.js.map +1 -1
- package/.server/server/plugins/engine/components/FormComponent.js +14 -2
- package/.server/server/plugins/engine/components/FormComponent.js.map +1 -1
- package/.server/server/plugins/engine/components/ListFormComponent.js +16 -3
- package/.server/server/plugins/engine/components/ListFormComponent.js.map +1 -1
- package/.server/server/plugins/engine/components/Markdown.js +24 -0
- package/.server/server/plugins/engine/components/Markdown.js.map +1 -0
- package/.server/server/plugins/engine/components/MonthYearField.js +30 -2
- package/.server/server/plugins/engine/components/MonthYearField.js.map +1 -1
- package/.server/server/plugins/engine/components/MultilineTextField.js +32 -3
- package/.server/server/plugins/engine/components/MultilineTextField.js.map +1 -1
- package/.server/server/plugins/engine/components/NumberField.js +28 -3
- package/.server/server/plugins/engine/components/NumberField.js.map +1 -1
- package/.server/server/plugins/engine/components/SelectionControlField.js +14 -0
- package/.server/server/plugins/engine/components/SelectionControlField.js.map +1 -1
- package/.server/server/plugins/engine/components/TelephoneNumberField.js +19 -3
- package/.server/server/plugins/engine/components/TelephoneNumberField.js.map +1 -1
- package/.server/server/plugins/engine/components/TextField.js +22 -3
- package/.server/server/plugins/engine/components/TextField.js.map +1 -1
- package/.server/server/plugins/engine/components/UkAddressField.js +29 -0
- package/.server/server/plugins/engine/components/UkAddressField.js.map +1 -1
- package/.server/server/plugins/engine/components/YesNoField.js +18 -0
- package/.server/server/plugins/engine/components/YesNoField.js.map +1 -1
- package/.server/server/plugins/engine/components/helpers.js +16 -0
- package/.server/server/plugins/engine/components/helpers.js.map +1 -1
- package/.server/server/plugins/engine/components/index.js +1 -0
- package/.server/server/plugins/engine/components/index.js.map +1 -1
- package/.server/server/plugins/engine/configureEnginePlugin.js +19 -3
- package/.server/server/plugins/engine/configureEnginePlugin.js.map +1 -1
- package/.server/server/plugins/engine/helpers.js +38 -18
- package/.server/server/plugins/engine/helpers.js.map +1 -1
- package/.server/server/plugins/engine/models/FormModel.js +60 -2
- package/.server/server/plugins/engine/models/FormModel.js.map +1 -1
- package/.server/server/plugins/engine/models/SummaryViewModel.js +3 -2
- package/.server/server/plugins/engine/models/SummaryViewModel.js.map +1 -1
- package/.server/server/plugins/engine/outputFormatters/human/v1.js +1 -1
- package/.server/server/plugins/engine/outputFormatters/human/v1.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/PageController.js +13 -5
- package/.server/server/plugins/engine/pageControllers/PageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.js +2 -2
- package/.server/server/plugins/engine/pageControllers/QuestionPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.js +19 -5
- package/.server/server/plugins/engine/pageControllers/SummaryPageController.js.map +1 -1
- package/.server/server/plugins/engine/pageControllers/validationOptions.js +6 -11
- package/.server/server/plugins/engine/pageControllers/validationOptions.js.map +1 -1
- package/.server/server/plugins/engine/plugin.js +32 -20
- package/.server/server/plugins/engine/plugin.js.map +1 -1
- package/.server/server/plugins/engine/services/formsService.js +15 -29
- package/.server/server/plugins/engine/services/formsService.js.map +1 -1
- package/.server/server/plugins/engine/services/localFormsService.js +52 -0
- package/.server/server/plugins/engine/services/localFormsService.js.map +1 -0
- package/.server/server/plugins/engine/services/notifyService.js +1 -4
- package/.server/server/plugins/engine/services/notifyService.js.map +1 -1
- package/.server/server/plugins/engine/services/uploadService.js +5 -3
- package/.server/server/plugins/engine/services/uploadService.js.map +1 -1
- package/.server/server/plugins/engine/types.js.map +1 -1
- package/.server/server/plugins/engine/views/components/html.html +1 -1
- package/.server/server/plugins/engine/views/components/markdown.html +5 -0
- package/.server/server/plugins/engine/views/confirmation.html +1 -1
- package/.server/server/plugins/engine/views/file-upload.html +1 -1
- package/.server/server/plugins/engine/views/index.html +1 -1
- package/.server/server/plugins/engine/views/item-delete.html +1 -1
- package/.server/server/plugins/engine/views/repeat-list-summary.html +1 -1
- package/.server/server/plugins/engine/views/summary.html +8 -2
- package/.server/server/plugins/errorPages.js +4 -26
- package/.server/server/plugins/errorPages.js.map +1 -1
- package/.server/server/plugins/nunjucks/context.js +43 -33
- package/.server/server/plugins/nunjucks/context.js.map +1 -1
- package/.server/server/plugins/nunjucks/context.test.js +23 -28
- package/.server/server/plugins/nunjucks/context.test.js.map +1 -1
- package/.server/server/plugins/nunjucks/enviroment.test.js +6 -3
- package/.server/server/plugins/nunjucks/enviroment.test.js.map +1 -1
- package/.server/server/plugins/nunjucks/types.js +3 -4
- package/.server/server/plugins/nunjucks/types.js.map +1 -1
- package/.server/server/routes/index.js +0 -1
- package/.server/server/routes/index.js.map +1 -1
- package/.server/server/utils/type-utils.js +8 -0
- package/.server/server/utils/type-utils.js.map +1 -0
- package/.server/typings/hapi/index.d.js.map +1 -1
- package/.server/typings/joi/index.d.js.map +1 -1
- package/package.json +4 -3
- package/src/client/javascripts/file-upload.js +60 -4
- package/src/client/stylesheets/application.scss +10 -0
- package/src/config/index.ts +4 -17
- package/src/server/constants.js +2 -0
- package/src/server/devserver/dxt-devtool-baselayout.html +71 -0
- package/src/server/forms/register-as-a-unicorn-breeder.json +393 -0
- package/src/server/forms/register-as-a-unicorn-breeder.yaml +251 -0
- package/src/server/index.test.ts +38 -66
- package/src/server/index.ts +15 -17
- package/src/server/plugins/engine/components/AutocompleteField.test.ts +71 -3
- package/src/server/plugins/engine/components/AutocompleteField.ts +6 -2
- package/src/server/plugins/engine/components/CheckboxesField.test.ts +40 -8
- package/src/server/plugins/engine/components/CheckboxesField.ts +7 -3
- package/src/server/plugins/engine/components/ComponentCollection.ts +45 -18
- package/src/server/plugins/engine/components/DatePartsField.test.ts +13 -4
- package/src/server/plugins/engine/components/DatePartsField.ts +29 -8
- package/src/server/plugins/engine/components/EmailAddressField.test.ts +51 -1
- package/src/server/plugins/engine/components/EmailAddressField.ts +17 -2
- package/src/server/plugins/engine/components/FileUploadField.test.ts +53 -0
- package/src/server/plugins/engine/components/FileUploadField.ts +52 -3
- package/src/server/plugins/engine/components/FormComponent.ts +24 -2
- package/src/server/plugins/engine/components/ListFormComponent.ts +16 -2
- package/src/server/plugins/engine/components/Markdown.test.ts +48 -0
- package/src/server/plugins/engine/components/Markdown.ts +29 -0
- package/src/server/plugins/engine/components/MonthYearField.test.ts +35 -0
- package/src/server/plugins/engine/components/MonthYearField.ts +34 -9
- package/src/server/plugins/engine/components/MultilineTextField.test.ts +83 -5
- package/src/server/plugins/engine/components/MultilineTextField.ts +37 -2
- package/src/server/plugins/engine/components/NumberField.test.ts +24 -2
- package/src/server/plugins/engine/components/NumberField.ts +23 -3
- package/src/server/plugins/engine/components/RadiosField.test.ts +10 -1
- package/src/server/plugins/engine/components/SelectField.test.ts +2 -1
- package/src/server/plugins/engine/components/SelectionControlField.ts +14 -0
- package/src/server/plugins/engine/components/TelephoneNumberField.test.ts +30 -2
- package/src/server/plugins/engine/components/TelephoneNumberField.ts +17 -2
- package/src/server/plugins/engine/components/TextField.test.ts +33 -1
- package/src/server/plugins/engine/components/TextField.ts +17 -2
- package/src/server/plugins/engine/components/UkAddressField.test.ts +46 -3
- package/src/server/plugins/engine/components/UkAddressField.ts +28 -0
- package/src/server/plugins/engine/components/YesNoField.test.ts +9 -1
- package/src/server/plugins/engine/components/YesNoField.ts +24 -0
- package/src/server/plugins/engine/components/helpers.test.ts +24 -0
- package/src/server/plugins/engine/components/helpers.ts +39 -0
- package/src/server/plugins/engine/components/index.ts +1 -0
- package/src/server/plugins/engine/configureEnginePlugin.ts +32 -4
- package/src/server/plugins/engine/helpers.test.ts +71 -20
- package/src/server/plugins/engine/helpers.ts +46 -19
- package/src/server/plugins/engine/models/FormModel.test.ts +91 -1
- package/src/server/plugins/engine/models/FormModel.ts +86 -3
- package/src/server/plugins/engine/models/SummaryViewModel.test.ts +46 -7
- package/src/server/plugins/engine/models/SummaryViewModel.ts +7 -3
- package/src/server/plugins/engine/outputFormatters/human/v1.test.ts +1 -2
- package/src/server/plugins/engine/outputFormatters/human/v1.ts +1 -1
- package/src/server/plugins/engine/pageControllers/FileUploadPageController.test.ts +1 -0
- package/src/server/plugins/engine/pageControllers/PageController.test.ts +9 -6
- package/src/server/plugins/engine/pageControllers/PageController.ts +15 -5
- package/src/server/plugins/engine/pageControllers/QuestionPageController.ts +2 -2
- package/src/server/plugins/engine/pageControllers/SummaryPageController.ts +21 -6
- package/src/server/plugins/engine/pageControllers/validationOptions.ts +31 -17
- package/src/server/plugins/engine/plugin.ts +52 -22
- package/src/server/plugins/engine/services/formsService.js +17 -35
- package/src/server/plugins/engine/services/localFormsService.js +49 -0
- package/src/server/plugins/engine/services/notifyService.ts +1 -2
- package/src/server/plugins/engine/services/uploadService.js +10 -6
- package/src/server/plugins/engine/types.ts +10 -1
- package/src/server/plugins/engine/views/components/html.html +1 -1
- package/src/server/plugins/engine/views/components/markdown.html +5 -0
- package/src/server/plugins/engine/views/confirmation.html +1 -1
- package/src/server/plugins/engine/views/file-upload.html +1 -1
- package/src/server/plugins/engine/views/index.html +1 -1
- package/src/server/plugins/engine/views/item-delete.html +1 -1
- package/src/server/plugins/engine/views/repeat-list-summary.html +1 -1
- package/src/server/plugins/engine/views/summary.html +8 -2
- package/src/server/plugins/errorPages.ts +4 -26
- package/src/server/plugins/nunjucks/context.js +44 -34
- package/src/server/plugins/nunjucks/context.test.js +24 -27
- package/src/server/plugins/nunjucks/enviroment.test.js +9 -3
- package/src/server/plugins/nunjucks/types.js +3 -4
- package/src/server/routes/index.ts +0 -1
- package/src/server/utils/type-utils.ts +15 -0
- package/src/typings/hapi/index.d.ts +3 -9
- package/src/typings/joi/index.d.ts +8 -0
- package/.server/common/cookies.js +0 -55
- package/.server/common/cookies.js.map +0 -1
- package/.server/common/cookies.test.js +0 -15
- package/.server/common/cookies.test.js.map +0 -1
- package/.server/common/types.js +0 -6
- package/.server/common/types.js.map +0 -1
- package/.server/server/forms/README.md +0 -10
- package/.server/server/forms/report-a-terrorist.json +0 -270
- package/.server/server/forms/runner-components-test.json +0 -365
- package/.server/server/forms/test.json +0 -581
- package/.server/server/forms/test.yaml +0 -363
- package/.server/server/plugins/blankie.js +0 -29
- package/.server/server/plugins/blankie.js.map +0 -1
- package/.server/server/plugins/engine/services/formsService.test.js +0 -71
- package/.server/server/plugins/engine/services/formsService.test.js.map +0 -1
- package/.server/server/plugins/engine/views/layout.html +0 -199
- package/.server/server/plugins/router.js +0 -169
- package/.server/server/plugins/router.js.map +0 -1
- package/.server/server/routes/health.js +0 -15
- package/.server/server/routes/health.js.map +0 -1
- package/.server/server/routes/health.test.js +0 -32
- package/.server/server/routes/health.test.js.map +0 -1
- package/.server/server/utils/file-form-service.test.js +0 -52
- package/.server/server/utils/file-form-service.test.js.map +0 -1
- package/.server/server/views/404.html +0 -16
- package/.server/server/views/500.html +0 -19
- package/.server/server/views/help/accessibility-statement.html +0 -58
- package/.server/server/views/help/cookie-preferences.html +0 -57
- package/.server/server/views/help/cookies.html +0 -71
- package/.server/server/views/help/get-support.html +0 -37
- package/.server/server/views/help/privacy-notice.html +0 -68
- package/.server/server/views/help/terms-and-conditions.html +0 -83
- package/src/common/cookies.js +0 -58
- package/src/common/cookies.test.js +0 -23
- package/src/common/types.js +0 -5
- package/src/server/forms/README.md +0 -10
- package/src/server/forms/report-a-terrorist.json +0 -270
- package/src/server/forms/runner-components-test.json +0 -365
- package/src/server/forms/test.json +0 -581
- package/src/server/forms/test.yaml +0 -363
- package/src/server/plugins/blankie.test.ts +0 -73
- package/src/server/plugins/blankie.ts +0 -48
- package/src/server/plugins/engine/services/formsService.test.js +0 -90
- package/src/server/plugins/engine/views/layout.html +0 -199
- package/src/server/plugins/router.ts +0 -201
- package/src/server/routes/health.js +0 -13
- package/src/server/routes/health.test.js +0 -35
- package/src/server/routes/index.test.ts +0 -125
- package/src/server/utils/file-form-service.test.js +0 -79
- package/src/server/views/404.html +0 -16
- package/src/server/views/500.html +0 -19
- package/src/server/views/help/accessibility-statement.html +0 -58
- package/src/server/views/help/cookie-preferences.html +0 -57
- package/src/server/views/help/cookies.html +0 -71
- package/src/server/views/help/get-support.html +0 -37
- package/src/server/views/help/privacy-notice.html +0 -68
- package/src/server/views/help/terms-and-conditions.html +0 -83
|
@@ -0,0 +1,251 @@
|
|
|
1
|
+
---
|
|
2
|
+
name: Register as a unicorn breeder
|
|
3
|
+
pages:
|
|
4
|
+
- path: '/whats-your-name'
|
|
5
|
+
title: What's your name?
|
|
6
|
+
components:
|
|
7
|
+
- type: TextField
|
|
8
|
+
name: textField
|
|
9
|
+
title: Name
|
|
10
|
+
hint:
|
|
11
|
+
This is a single line text box. We use it to ask for information that's
|
|
12
|
+
likely to be 1 sentence
|
|
13
|
+
options:
|
|
14
|
+
required: true
|
|
15
|
+
schema: {}
|
|
16
|
+
next:
|
|
17
|
+
- path: '/whats-your-email-address'
|
|
18
|
+
section: section
|
|
19
|
+
- title: Summary
|
|
20
|
+
path: '/summary'
|
|
21
|
+
controller: './pages/summary.js'
|
|
22
|
+
components: []
|
|
23
|
+
next: []
|
|
24
|
+
- path: '/whats-your-email-address'
|
|
25
|
+
title: What's your email address?
|
|
26
|
+
components:
|
|
27
|
+
- name: MaTzaT
|
|
28
|
+
options:
|
|
29
|
+
required: true
|
|
30
|
+
type: EmailAddressField
|
|
31
|
+
title: Email adress
|
|
32
|
+
schema: {}
|
|
33
|
+
hint: This is an email address. An email address must contain an at sign @
|
|
34
|
+
next:
|
|
35
|
+
- path: '/whats-your-phone-number'
|
|
36
|
+
section: section
|
|
37
|
+
- path: '/whats-your-phone-number'
|
|
38
|
+
title: What's your phone number?
|
|
39
|
+
components:
|
|
40
|
+
- name: BdKgCe
|
|
41
|
+
options:
|
|
42
|
+
required: true
|
|
43
|
+
type: TelephoneNumberField
|
|
44
|
+
title: Phone number
|
|
45
|
+
schema: {}
|
|
46
|
+
hint:
|
|
47
|
+
This is a telephone number. This field can only contain numbers and the
|
|
48
|
+
+ symbol
|
|
49
|
+
next:
|
|
50
|
+
- path: '/whats-your-address'
|
|
51
|
+
section: section
|
|
52
|
+
- path: '/whats-your-address'
|
|
53
|
+
title: What's your address?
|
|
54
|
+
components:
|
|
55
|
+
- name: wZLWPy
|
|
56
|
+
options:
|
|
57
|
+
required: true
|
|
58
|
+
type: UkAddressField
|
|
59
|
+
title: Address
|
|
60
|
+
schema: {}
|
|
61
|
+
hint: This is a UK address. Users must enter address line 1, town and a postcode
|
|
62
|
+
next:
|
|
63
|
+
- path: '/do-you-want-your-unicorn-breeder-certificate-sent-to-this-address'
|
|
64
|
+
section: section
|
|
65
|
+
- path: '/do-you-want-your-unicorn-breeder-certificate-sent-to-this-address'
|
|
66
|
+
title: Do you want your unicorn breeder certificate sent to this address?
|
|
67
|
+
components:
|
|
68
|
+
- name: dBfuID
|
|
69
|
+
options: {}
|
|
70
|
+
type: YesNoField
|
|
71
|
+
title: Send certificate to same address
|
|
72
|
+
schema: {}
|
|
73
|
+
hint:
|
|
74
|
+
This is a yes or no question. We can branch to different questions based
|
|
75
|
+
on the answer
|
|
76
|
+
values:
|
|
77
|
+
type: listRef
|
|
78
|
+
next:
|
|
79
|
+
- path: '/what-address-do-you-want-the-certificate-sent-to'
|
|
80
|
+
condition: oyGPwP
|
|
81
|
+
- path: '/when-does-your-unicorn-insurance-policy-start'
|
|
82
|
+
condition: ''
|
|
83
|
+
section: section
|
|
84
|
+
- path: '/what-address-do-you-want-the-certificate-sent-to'
|
|
85
|
+
title: What address do you want the certificate sent to?
|
|
86
|
+
components:
|
|
87
|
+
- name: AegFro
|
|
88
|
+
options: {}
|
|
89
|
+
type: UkAddressField
|
|
90
|
+
title: Address to send certificate
|
|
91
|
+
schema: {}
|
|
92
|
+
hint:
|
|
93
|
+
This is a simple branch to an extra question - it's shown to users who select
|
|
94
|
+
'no' when asked if this is the address where the certificate should be sent
|
|
95
|
+
next:
|
|
96
|
+
- path: '/when-does-your-unicorn-insurance-policy-start'
|
|
97
|
+
section: section
|
|
98
|
+
- title: When does your unicorn insurance policy start?
|
|
99
|
+
path: '/when-does-your-unicorn-insurance-policy-start'
|
|
100
|
+
section: Regnsa
|
|
101
|
+
next:
|
|
102
|
+
- path: '/upload-your-insurance-certificate'
|
|
103
|
+
components:
|
|
104
|
+
- name: mjAccr
|
|
105
|
+
options: {}
|
|
106
|
+
type: DatePartsField
|
|
107
|
+
title: Unicorn insurance policy start date
|
|
108
|
+
schema: {}
|
|
109
|
+
hint:
|
|
110
|
+
This is a date. We can add custom validation to the field based on your
|
|
111
|
+
requirements. For example, the date entered must be before or after a certain
|
|
112
|
+
date
|
|
113
|
+
- title: How many unicorns do you expect to breed each year?
|
|
114
|
+
path: '/how-many-unicorns-do-you-expect-to-breed-each-year'
|
|
115
|
+
section: susaYr
|
|
116
|
+
next:
|
|
117
|
+
- path: '/what-type-of-unicorns-will-you-breed'
|
|
118
|
+
components:
|
|
119
|
+
- name: aitzzV
|
|
120
|
+
options: {}
|
|
121
|
+
type: RadiosField
|
|
122
|
+
list: IeFOkf
|
|
123
|
+
title: Number of unicorns
|
|
124
|
+
schema: {}
|
|
125
|
+
hint: This is a radio button. Users can only select one option from the list
|
|
126
|
+
values:
|
|
127
|
+
type: listRef
|
|
128
|
+
- title: What type of unicorns will you breed?
|
|
129
|
+
path: '/what-type-of-unicorns-will-you-breed'
|
|
130
|
+
section: susaYr
|
|
131
|
+
next:
|
|
132
|
+
- path: '/where-will-you-keep-the-unicorns'
|
|
133
|
+
components:
|
|
134
|
+
- name: DyfjJC
|
|
135
|
+
options: {}
|
|
136
|
+
type: CheckboxesField
|
|
137
|
+
list: fXiZrL
|
|
138
|
+
title: Type of unicorn
|
|
139
|
+
schema: {}
|
|
140
|
+
hint: This is a check box. Users can select more than one option
|
|
141
|
+
values:
|
|
142
|
+
type: listRef
|
|
143
|
+
- title: Where will you keep the unicorns?
|
|
144
|
+
path: '/where-will-you-keep-the-unicorns'
|
|
145
|
+
section: susaYr
|
|
146
|
+
next:
|
|
147
|
+
- path: '/how-many-members-of-staff-will-look-after-the-unicorns'
|
|
148
|
+
components:
|
|
149
|
+
- name: bClCvo
|
|
150
|
+
options: {}
|
|
151
|
+
schema: {}
|
|
152
|
+
type: MultilineTextField
|
|
153
|
+
title: Where you keep the unicorn
|
|
154
|
+
hint:
|
|
155
|
+
This is a multi-line text box. We use it when you expect the response to
|
|
156
|
+
be more than 1 sentence long
|
|
157
|
+
- title: How many members of staff will look after the unicorns?
|
|
158
|
+
path: '/how-many-members-of-staff-will-look-after-the-unicorns'
|
|
159
|
+
section: susaYr
|
|
160
|
+
next:
|
|
161
|
+
- path: '/summary'
|
|
162
|
+
components:
|
|
163
|
+
- name: zhJMaM
|
|
164
|
+
options:
|
|
165
|
+
classes: govuk-!-width-one-quarter
|
|
166
|
+
type: NumberField
|
|
167
|
+
title: Number of staff
|
|
168
|
+
schema: {}
|
|
169
|
+
hint:
|
|
170
|
+
This is a number field. The answer must be a number. We can use custom validation
|
|
171
|
+
to set decimal places, minimum and maximum values
|
|
172
|
+
- title: Upload your insurance certificate
|
|
173
|
+
path: '/upload-your-insurance-certificate'
|
|
174
|
+
controller: FileUploadPageController
|
|
175
|
+
section: Regnsa
|
|
176
|
+
next:
|
|
177
|
+
- path: '/how-many-unicorns-do-you-expect-to-breed-each-year'
|
|
178
|
+
components:
|
|
179
|
+
- name: dLzALM
|
|
180
|
+
title: Documents
|
|
181
|
+
type: FileUploadField
|
|
182
|
+
hint: We can specify the format and number of uploaded files
|
|
183
|
+
options:
|
|
184
|
+
required: false
|
|
185
|
+
schema:
|
|
186
|
+
min: 1
|
|
187
|
+
max: 3
|
|
188
|
+
conditions:
|
|
189
|
+
- displayName: Address is different
|
|
190
|
+
name: IrVmYz
|
|
191
|
+
value:
|
|
192
|
+
name: Address is different
|
|
193
|
+
conditions:
|
|
194
|
+
- field:
|
|
195
|
+
name: dBfuID
|
|
196
|
+
type: YesNoField
|
|
197
|
+
display: 'Contact details: Send certificate to same address'
|
|
198
|
+
operator: is
|
|
199
|
+
value:
|
|
200
|
+
type: Value
|
|
201
|
+
value: 'false'
|
|
202
|
+
display: 'false'
|
|
203
|
+
- displayName: Address is not the same
|
|
204
|
+
name: oyGPwP
|
|
205
|
+
value:
|
|
206
|
+
name: Address is not the same
|
|
207
|
+
conditions:
|
|
208
|
+
- field:
|
|
209
|
+
name: dBfuID
|
|
210
|
+
type: YesNoField
|
|
211
|
+
display: 'Contact details: Send certificate to same address'
|
|
212
|
+
operator: is
|
|
213
|
+
value:
|
|
214
|
+
type: Value
|
|
215
|
+
value: 'false'
|
|
216
|
+
display: 'No'
|
|
217
|
+
sections:
|
|
218
|
+
- name: section
|
|
219
|
+
title: Contact details
|
|
220
|
+
hideTitle: false
|
|
221
|
+
- title: Unicorn details
|
|
222
|
+
name: susaYr
|
|
223
|
+
hideTitle: false
|
|
224
|
+
- title: Insurance details
|
|
225
|
+
name: Regnsa
|
|
226
|
+
hideTitle: false
|
|
227
|
+
lists:
|
|
228
|
+
- title: number of unicorns
|
|
229
|
+
name: IeFOkf
|
|
230
|
+
type: string
|
|
231
|
+
items:
|
|
232
|
+
- text: 1 to 5
|
|
233
|
+
value: 1 to 5
|
|
234
|
+
- text: 6 to 10
|
|
235
|
+
value: 6 to 10
|
|
236
|
+
- text: 11 or more
|
|
237
|
+
value: 11 or more
|
|
238
|
+
- title: Type of unicorn
|
|
239
|
+
name: fXiZrL
|
|
240
|
+
type: string
|
|
241
|
+
items:
|
|
242
|
+
- text: Flying
|
|
243
|
+
value: Flying
|
|
244
|
+
- text: Fire breathing
|
|
245
|
+
value: Fire breathing
|
|
246
|
+
- text: Aquatic
|
|
247
|
+
value: Aquatic
|
|
248
|
+
- text: Rainbow
|
|
249
|
+
value: Rainbow
|
|
250
|
+
outputEmail: defraforms@defra.gov.uk
|
|
251
|
+
startPage: '/whats-your-name'
|
package/src/server/index.test.ts
CHANGED
|
@@ -1,11 +1,13 @@
|
|
|
1
1
|
import { type Server } from '@hapi/hapi'
|
|
2
2
|
import { StatusCodes } from 'http-status-codes'
|
|
3
3
|
|
|
4
|
+
import { FORM_PREFIX } from '~/src/server/constants.js'
|
|
4
5
|
import { createServer } from '~/src/server/index.js'
|
|
5
6
|
import {
|
|
6
7
|
getFormDefinition,
|
|
7
8
|
getFormMetadata
|
|
8
9
|
} from '~/src/server/plugins/engine/services/formsService.js'
|
|
10
|
+
import * as defaultServices from '~/src/server/plugins/engine/services/index.js'
|
|
9
11
|
import { getUploadStatus } from '~/src/server/plugins/engine/services/uploadService.js'
|
|
10
12
|
import {
|
|
11
13
|
FileStatus,
|
|
@@ -30,7 +32,9 @@ describe('Model cache', () => {
|
|
|
30
32
|
}
|
|
31
33
|
|
|
32
34
|
beforeAll(async () => {
|
|
33
|
-
server = await createServer(
|
|
35
|
+
server = await createServer({
|
|
36
|
+
services: defaultServices
|
|
37
|
+
})
|
|
34
38
|
await server.initialize()
|
|
35
39
|
})
|
|
36
40
|
|
|
@@ -54,13 +58,13 @@ describe('Model cache', () => {
|
|
|
54
58
|
|
|
55
59
|
const options = {
|
|
56
60
|
method: 'GET',
|
|
57
|
-
url:
|
|
61
|
+
url: `${FORM_PREFIX}/slug`
|
|
58
62
|
}
|
|
59
63
|
|
|
60
64
|
const res = await server.inject(options)
|
|
61
65
|
|
|
62
66
|
expect(res.statusCode).toBe(StatusCodes.MOVED_TEMPORARILY)
|
|
63
|
-
expect(res.headers.location).toBe(
|
|
67
|
+
expect(res.headers.location).toBe(`${FORM_PREFIX}/slug/page-one`)
|
|
64
68
|
expect(getCacheSize()).toBe(1)
|
|
65
69
|
})
|
|
66
70
|
|
|
@@ -74,13 +78,15 @@ describe('Model cache', () => {
|
|
|
74
78
|
|
|
75
79
|
const options = {
|
|
76
80
|
method: 'GET',
|
|
77
|
-
url:
|
|
81
|
+
url: `${FORM_PREFIX}/preview/live/slug`
|
|
78
82
|
}
|
|
79
83
|
|
|
80
84
|
const res = await server.inject(options)
|
|
81
85
|
|
|
82
86
|
expect(res.statusCode).toBe(StatusCodes.MOVED_TEMPORARILY)
|
|
83
|
-
expect(res.headers.location).toBe(
|
|
87
|
+
expect(res.headers.location).toBe(
|
|
88
|
+
`${FORM_PREFIX}/preview/live/slug/page-one`
|
|
89
|
+
)
|
|
84
90
|
expect(getCacheSize()).toBe(1)
|
|
85
91
|
})
|
|
86
92
|
|
|
@@ -94,13 +100,15 @@ describe('Model cache', () => {
|
|
|
94
100
|
|
|
95
101
|
const options = {
|
|
96
102
|
method: 'GET',
|
|
97
|
-
url:
|
|
103
|
+
url: `${FORM_PREFIX}/preview/draft/slug`
|
|
98
104
|
}
|
|
99
105
|
|
|
100
106
|
const res = await server.inject(options)
|
|
101
107
|
|
|
102
108
|
expect(res.statusCode).toBe(StatusCodes.MOVED_TEMPORARILY)
|
|
103
|
-
expect(res.headers.location).toBe(
|
|
109
|
+
expect(res.headers.location).toBe(
|
|
110
|
+
`${FORM_PREFIX}/preview/draft/slug/page-one`
|
|
111
|
+
)
|
|
104
112
|
expect(getCacheSize()).toBe(1)
|
|
105
113
|
})
|
|
106
114
|
|
|
@@ -114,7 +122,7 @@ describe('Model cache', () => {
|
|
|
114
122
|
|
|
115
123
|
const options = {
|
|
116
124
|
method: 'GET',
|
|
117
|
-
url:
|
|
125
|
+
url: `${FORM_PREFIX}/slug/page-one`
|
|
118
126
|
}
|
|
119
127
|
|
|
120
128
|
const res = await server.inject(options)
|
|
@@ -133,7 +141,7 @@ describe('Model cache', () => {
|
|
|
133
141
|
|
|
134
142
|
const options = {
|
|
135
143
|
method: 'GET',
|
|
136
|
-
url:
|
|
144
|
+
url: `${FORM_PREFIX}/preview/live/slug/page-one`
|
|
137
145
|
}
|
|
138
146
|
|
|
139
147
|
const res = await server.inject(options)
|
|
@@ -152,7 +160,7 @@ describe('Model cache', () => {
|
|
|
152
160
|
|
|
153
161
|
const options = {
|
|
154
162
|
method: 'GET',
|
|
155
|
-
url:
|
|
163
|
+
url: `${FORM_PREFIX}/preview/draft/slug/page-one`
|
|
156
164
|
}
|
|
157
165
|
|
|
158
166
|
const res = await server.inject(options)
|
|
@@ -171,7 +179,7 @@ describe('Model cache', () => {
|
|
|
171
179
|
|
|
172
180
|
const options = {
|
|
173
181
|
method: 'GET',
|
|
174
|
-
url:
|
|
182
|
+
url: `${FORM_PREFIX}/slug/page-one`
|
|
175
183
|
}
|
|
176
184
|
|
|
177
185
|
const res = await server.inject(options)
|
|
@@ -192,7 +200,7 @@ describe('Model cache', () => {
|
|
|
192
200
|
// Populate live/live cache item
|
|
193
201
|
const options1 = {
|
|
194
202
|
method: 'GET',
|
|
195
|
-
url:
|
|
203
|
+
url: `${FORM_PREFIX}/slug/page-one`
|
|
196
204
|
}
|
|
197
205
|
|
|
198
206
|
const res1 = await server.inject(options1)
|
|
@@ -203,7 +211,7 @@ describe('Model cache', () => {
|
|
|
203
211
|
// Populate live/preview cache item
|
|
204
212
|
const options2 = {
|
|
205
213
|
method: 'GET',
|
|
206
|
-
url:
|
|
214
|
+
url: `${FORM_PREFIX}/preview/live/slug/page-one`
|
|
207
215
|
}
|
|
208
216
|
|
|
209
217
|
const res2 = await server.inject(options2)
|
|
@@ -214,7 +222,7 @@ describe('Model cache', () => {
|
|
|
214
222
|
// Populate draft/preview cache item
|
|
215
223
|
const options3 = {
|
|
216
224
|
method: 'GET',
|
|
217
|
-
url:
|
|
225
|
+
url: `${FORM_PREFIX}/preview/draft/slug/page-one`
|
|
218
226
|
}
|
|
219
227
|
|
|
220
228
|
const res3 = await server.inject(options3)
|
|
@@ -266,7 +274,7 @@ describe('Model cache', () => {
|
|
|
266
274
|
|
|
267
275
|
const options = {
|
|
268
276
|
method: 'GET',
|
|
269
|
-
url:
|
|
277
|
+
url: `${FORM_PREFIX}/slug`
|
|
270
278
|
}
|
|
271
279
|
|
|
272
280
|
const res = await server.inject(options)
|
|
@@ -280,7 +288,7 @@ describe('Model cache', () => {
|
|
|
280
288
|
|
|
281
289
|
const options = {
|
|
282
290
|
method: 'GET',
|
|
283
|
-
url:
|
|
291
|
+
url: `${FORM_PREFIX}/preview/draft/slug`
|
|
284
292
|
}
|
|
285
293
|
|
|
286
294
|
const res = await server.inject(options)
|
|
@@ -294,7 +302,7 @@ describe('Model cache', () => {
|
|
|
294
302
|
|
|
295
303
|
const options = {
|
|
296
304
|
method: 'GET',
|
|
297
|
-
url:
|
|
305
|
+
url: `${FORM_PREFIX}/preview/live/slug`
|
|
298
306
|
}
|
|
299
307
|
|
|
300
308
|
const res = await server.inject(options)
|
|
@@ -312,7 +320,7 @@ describe('Model cache', () => {
|
|
|
312
320
|
|
|
313
321
|
const options = {
|
|
314
322
|
method: 'GET',
|
|
315
|
-
url:
|
|
323
|
+
url: `${FORM_PREFIX}/slug`
|
|
316
324
|
}
|
|
317
325
|
|
|
318
326
|
const res = await server.inject(options)
|
|
@@ -330,7 +338,7 @@ describe('Model cache', () => {
|
|
|
330
338
|
|
|
331
339
|
const options = {
|
|
332
340
|
method: 'GET',
|
|
333
|
-
url:
|
|
341
|
+
url: `${FORM_PREFIX}/preview/draft/slug`
|
|
334
342
|
}
|
|
335
343
|
|
|
336
344
|
const res = await server.inject(options)
|
|
@@ -348,7 +356,7 @@ describe('Model cache', () => {
|
|
|
348
356
|
|
|
349
357
|
const options = {
|
|
350
358
|
method: 'GET',
|
|
351
|
-
url:
|
|
359
|
+
url: `${FORM_PREFIX}/preview/live/slug`
|
|
352
360
|
}
|
|
353
361
|
|
|
354
362
|
const res = await server.inject(options)
|
|
@@ -362,7 +370,7 @@ describe('Model cache', () => {
|
|
|
362
370
|
|
|
363
371
|
const options = {
|
|
364
372
|
method: 'GET',
|
|
365
|
-
url:
|
|
373
|
+
url: `${FORM_PREFIX}/slug/page-one`
|
|
366
374
|
}
|
|
367
375
|
|
|
368
376
|
const res = await server.inject(options)
|
|
@@ -376,7 +384,7 @@ describe('Model cache', () => {
|
|
|
376
384
|
|
|
377
385
|
const options = {
|
|
378
386
|
method: 'GET',
|
|
379
|
-
url:
|
|
387
|
+
url: `${FORM_PREFIX}/preview/draft/slug/page-one`
|
|
380
388
|
}
|
|
381
389
|
|
|
382
390
|
const res = await server.inject(options)
|
|
@@ -390,7 +398,7 @@ describe('Model cache', () => {
|
|
|
390
398
|
|
|
391
399
|
const options = {
|
|
392
400
|
method: 'GET',
|
|
393
|
-
url:
|
|
401
|
+
url: `${FORM_PREFIX}/preview/live/slug/page-one`
|
|
394
402
|
}
|
|
395
403
|
|
|
396
404
|
const res = await server.inject(options)
|
|
@@ -408,7 +416,7 @@ describe('Model cache', () => {
|
|
|
408
416
|
|
|
409
417
|
const options = {
|
|
410
418
|
method: 'GET',
|
|
411
|
-
url:
|
|
419
|
+
url: `${FORM_PREFIX}/slug/page-one`
|
|
412
420
|
}
|
|
413
421
|
|
|
414
422
|
const res = await server.inject(options)
|
|
@@ -426,7 +434,7 @@ describe('Model cache', () => {
|
|
|
426
434
|
|
|
427
435
|
const options = {
|
|
428
436
|
method: 'GET',
|
|
429
|
-
url:
|
|
437
|
+
url: `${FORM_PREFIX}/preview/draft/slug/page-one`
|
|
430
438
|
}
|
|
431
439
|
|
|
432
440
|
const res = await server.inject(options)
|
|
@@ -444,7 +452,7 @@ describe('Model cache', () => {
|
|
|
444
452
|
|
|
445
453
|
const options = {
|
|
446
454
|
method: 'GET',
|
|
447
|
-
url:
|
|
455
|
+
url: `${FORM_PREFIX}/preview/live/slug/page-one`
|
|
448
456
|
}
|
|
449
457
|
|
|
450
458
|
const res = await server.inject(options)
|
|
@@ -453,42 +461,6 @@ describe('Model cache', () => {
|
|
|
453
461
|
expect(getCacheSize()).toBe(0)
|
|
454
462
|
})
|
|
455
463
|
})
|
|
456
|
-
|
|
457
|
-
describe('Help pages', () => {
|
|
458
|
-
test('Contextual help page returns 200', async () => {
|
|
459
|
-
jest.mocked(getFormMetadata).mockResolvedValue({
|
|
460
|
-
...fixtures.form.metadata,
|
|
461
|
-
draft: fixtures.form.state,
|
|
462
|
-
live: fixtures.form.state
|
|
463
|
-
})
|
|
464
|
-
|
|
465
|
-
const options = {
|
|
466
|
-
method: 'GET',
|
|
467
|
-
url: '/help/get-support/slug'
|
|
468
|
-
}
|
|
469
|
-
|
|
470
|
-
const res = await server.inject(options)
|
|
471
|
-
|
|
472
|
-
expect(res.statusCode).toBe(StatusCodes.OK)
|
|
473
|
-
})
|
|
474
|
-
|
|
475
|
-
test('Privacy notice page returns 200', async () => {
|
|
476
|
-
jest.mocked(getFormMetadata).mockResolvedValue({
|
|
477
|
-
...fixtures.form.metadata,
|
|
478
|
-
draft: fixtures.form.state,
|
|
479
|
-
live: fixtures.form.state
|
|
480
|
-
})
|
|
481
|
-
|
|
482
|
-
const options = {
|
|
483
|
-
method: 'GET',
|
|
484
|
-
url: '/help/privacy/slug'
|
|
485
|
-
}
|
|
486
|
-
|
|
487
|
-
const res = await server.inject(options)
|
|
488
|
-
|
|
489
|
-
expect(res.statusCode).toBe(StatusCodes.OK)
|
|
490
|
-
})
|
|
491
|
-
})
|
|
492
464
|
})
|
|
493
465
|
|
|
494
466
|
describe('Upload status route', () => {
|
|
@@ -527,7 +499,7 @@ describe('Upload status route', () => {
|
|
|
527
499
|
|
|
528
500
|
const options = {
|
|
529
501
|
method: 'GET',
|
|
530
|
-
url:
|
|
502
|
+
url: `${FORM_PREFIX}/upload-status/123e4567-e89b-12d3-a456-426614174000`
|
|
531
503
|
}
|
|
532
504
|
|
|
533
505
|
const res = await server.inject(options)
|
|
@@ -544,7 +516,7 @@ describe('Upload status route', () => {
|
|
|
544
516
|
|
|
545
517
|
const options = {
|
|
546
518
|
method: 'GET',
|
|
547
|
-
url:
|
|
519
|
+
url: `${FORM_PREFIX}/upload-status/123e4567-e89b-12d3-a456-426614174000`
|
|
548
520
|
}
|
|
549
521
|
|
|
550
522
|
const res = await server.inject(options)
|
|
@@ -560,7 +532,7 @@ describe('Upload status route', () => {
|
|
|
560
532
|
|
|
561
533
|
const options = {
|
|
562
534
|
method: 'GET',
|
|
563
|
-
url:
|
|
535
|
+
url: `${FORM_PREFIX}/upload-status/123e4567-e89b-12d3-a456-426614174000`
|
|
564
536
|
}
|
|
565
537
|
|
|
566
538
|
const res = await server.inject(options)
|
|
@@ -572,7 +544,7 @@ describe('Upload status route', () => {
|
|
|
572
544
|
test('GET /upload-status/{uploadId} returns 400 for invalid uploadId format', async () => {
|
|
573
545
|
const options = {
|
|
574
546
|
method: 'GET',
|
|
575
|
-
url:
|
|
547
|
+
url: `${FORM_PREFIX}/upload-status/not-a-valid-guid`
|
|
576
548
|
}
|
|
577
549
|
|
|
578
550
|
const res = await server.inject(options)
|
package/src/server/index.ts
CHANGED
|
@@ -15,14 +15,13 @@ import { config } from '~/src/config/index.js'
|
|
|
15
15
|
import { requestLogger } from '~/src/server/common/helpers/logging/request-logger.js'
|
|
16
16
|
import { requestTracing } from '~/src/server/common/helpers/logging/request-tracing.js'
|
|
17
17
|
import { buildRedisClient } from '~/src/server/common/helpers/redis-client.js'
|
|
18
|
-
import { configureBlankiePlugin } from '~/src/server/plugins/blankie.js'
|
|
19
18
|
import { configureCrumbPlugin } from '~/src/server/plugins/crumb.js'
|
|
20
|
-
import { configureEnginePlugin } from '~/src/server/plugins/engine/
|
|
19
|
+
import { configureEnginePlugin } from '~/src/server/plugins/engine/configureEnginePlugin.js'
|
|
21
20
|
import pluginErrorPages from '~/src/server/plugins/errorPages.js'
|
|
22
21
|
import { plugin as pluginViews } from '~/src/server/plugins/nunjucks/index.js'
|
|
23
22
|
import pluginPulse from '~/src/server/plugins/pulse.js'
|
|
24
|
-
import pluginRouter from '~/src/server/plugins/router.js'
|
|
25
23
|
import pluginSession from '~/src/server/plugins/session.js'
|
|
24
|
+
import { publicRoutes } from '~/src/server/routes/index.js'
|
|
26
25
|
import { prepareSecureContext } from '~/src/server/secure-context.js'
|
|
27
26
|
import { type RouteConfig } from '~/src/server/types.js'
|
|
28
27
|
|
|
@@ -82,17 +81,17 @@ export async function createServer(routeConfig?: RouteConfig) {
|
|
|
82
81
|
prepareSecureContext(server)
|
|
83
82
|
}
|
|
84
83
|
|
|
85
|
-
const pluginEngine = await configureEnginePlugin(routeConfig)
|
|
86
84
|
const pluginCrumb = configureCrumbPlugin(routeConfig)
|
|
87
|
-
const
|
|
85
|
+
const pluginEngine = await configureEnginePlugin(routeConfig)
|
|
88
86
|
|
|
89
87
|
await server.register(pluginSession)
|
|
90
88
|
await server.register(pluginPulse)
|
|
91
89
|
await server.register(inert)
|
|
92
90
|
await server.register(Scooter)
|
|
93
|
-
await server.register(pluginBlankie)
|
|
94
91
|
await server.register(pluginCrumb)
|
|
95
92
|
|
|
93
|
+
await server.register(pluginEngine)
|
|
94
|
+
|
|
96
95
|
server.ext('onPreResponse', (request: Request, h: ResponseToolkit) => {
|
|
97
96
|
const { response } = request
|
|
98
97
|
|
|
@@ -116,20 +115,19 @@ export async function createServer(routeConfig?: RouteConfig) {
|
|
|
116
115
|
})
|
|
117
116
|
|
|
118
117
|
await server.register(pluginViews)
|
|
119
|
-
|
|
120
|
-
await server.register(
|
|
118
|
+
|
|
119
|
+
await server.register({
|
|
120
|
+
plugin: {
|
|
121
|
+
name: 'router',
|
|
122
|
+
register: (server) => {
|
|
123
|
+
server.route(publicRoutes)
|
|
124
|
+
}
|
|
125
|
+
}
|
|
126
|
+
})
|
|
127
|
+
|
|
121
128
|
await server.register(pluginErrorPages)
|
|
122
129
|
await server.register(blipp)
|
|
123
130
|
await server.register(requestTracing)
|
|
124
131
|
|
|
125
|
-
server.state('cookieConsent', {
|
|
126
|
-
ttl: 365 * 24 * 60 * 60 * 1000, // 1 year in ms
|
|
127
|
-
clearInvalid: true,
|
|
128
|
-
isHttpOnly: false,
|
|
129
|
-
isSecure: config.get('isProduction'),
|
|
130
|
-
path: '/',
|
|
131
|
-
encoding: 'none' // handle this inside the application so we can share frontend/backend cookie modification
|
|
132
|
-
})
|
|
133
|
-
|
|
134
132
|
return server
|
|
135
133
|
}
|