@defra/forms-engine-plugin 4.5.0 → 4.5.2

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.
Files changed (36) hide show
  1. package/.server/config/index.js +1 -1
  2. package/.server/config/index.js.map +1 -1
  3. package/.server/server/constants.d.ts +1 -0
  4. package/.server/server/constants.js +1 -0
  5. package/.server/server/constants.js.map +1 -1
  6. package/.server/server/plugins/engine/beta/form-context.d.ts +0 -1
  7. package/.server/server/plugins/engine/beta/form-context.js +4 -3
  8. package/.server/server/plugins/engine/beta/form-context.js.map +1 -1
  9. package/.server/server/plugins/engine/components/FileUploadField.js +2 -0
  10. package/.server/server/plugins/engine/components/FileUploadField.js.map +1 -1
  11. package/.server/server/plugins/engine/helpers.d.ts +10 -8
  12. package/.server/server/plugins/engine/helpers.js +8 -23
  13. package/.server/server/plugins/engine/helpers.js.map +1 -1
  14. package/.server/server/plugins/engine/outputFormatters/adapter/v1.js +2 -1
  15. package/.server/server/plugins/engine/outputFormatters/adapter/v1.js.map +1 -1
  16. package/.server/server/plugins/engine/routes/questions.js +2 -1
  17. package/.server/server/plugins/engine/routes/questions.js.map +1 -1
  18. package/.server/server/plugins/nunjucks/context.js +1 -2
  19. package/.server/server/plugins/nunjucks/context.js.map +1 -1
  20. package/.server/server/plugins/nunjucks/context.test.js +0 -36
  21. package/.server/server/plugins/nunjucks/context.test.js.map +1 -1
  22. package/package.json +3 -3
  23. package/src/config/index.ts +1 -1
  24. package/src/server/constants.js +1 -0
  25. package/src/server/plugins/engine/beta/form-context.test.ts +22 -8
  26. package/src/server/plugins/engine/beta/form-context.ts +7 -6
  27. package/src/server/plugins/engine/components/FileUploadField.test.ts +21 -0
  28. package/src/server/plugins/engine/components/FileUploadField.ts +1 -0
  29. package/src/server/plugins/engine/helpers.test.ts +0 -74
  30. package/src/server/plugins/engine/helpers.ts +17 -27
  31. package/src/server/plugins/engine/outputFormatters/adapter/v1.test.ts +54 -0
  32. package/src/server/plugins/engine/outputFormatters/adapter/v1.ts +7 -5
  33. package/src/server/plugins/engine/routes/questions.ts +1 -1
  34. package/src/server/plugins/nunjucks/context.js +1 -3
  35. package/src/server/plugins/nunjucks/context.test.js +0 -37
  36. package/src/server/routes/dummy-api.test.ts +3 -1
@@ -764,6 +764,60 @@ describe('Adapter v1 formatter', () => {
764
764
  })
765
765
 
766
766
  describe('version metadata handling', () => {
767
+ it('should prefer $$__formVersion from definition metadata over formMetadata.versions', () => {
768
+ const definitionWithFormVersion = {
769
+ ...definition,
770
+ metadata: {
771
+ $$__formVersion: {
772
+ versionNumber: 42,
773
+ createdAt: new Date('2024-06-01T00:00:00.000Z')
774
+ }
775
+ }
776
+ }
777
+
778
+ const modelWithFormVersion = new FormModel(definitionWithFormVersion, {
779
+ basePath: 'test'
780
+ })
781
+
782
+ const contextWithFormVersion = modelWithFormVersion.getFormContext(
783
+ request,
784
+ state
785
+ )
786
+
787
+ const formMetadata: Partial<FormMetadata> = {
788
+ id: 'form-123',
789
+ slug: 'test-form',
790
+ title: 'Test Form',
791
+ notificationEmail: 'test@example.com',
792
+ versions: [
793
+ {
794
+ versionNumber: 1,
795
+ createdAt: new Date('2024-01-01T00:00:00.000Z')
796
+ }
797
+ ]
798
+ }
799
+
800
+ const formStatus = {
801
+ isPreview: false,
802
+ state: FormStatus.Live
803
+ }
804
+
805
+ const body = format(
806
+ contextWithFormVersion,
807
+ items,
808
+ modelWithFormVersion,
809
+ submitResponse,
810
+ formStatus,
811
+ formMetadata as FormMetadata
812
+ )
813
+ const parsedBody = JSON.parse(body) as FormAdapterSubmissionMessagePayload
814
+
815
+ expect(parsedBody.meta.versionMetadata).toEqual({
816
+ versionNumber: 42,
817
+ createdAt: '2024-06-01T00:00:00.000Z'
818
+ })
819
+ })
820
+
767
821
  it('should include versionMetadata when context has submittedVersionNumber and formMetadata has versions', () => {
768
822
  const formMetadata: Partial<FormMetadata> = {
769
823
  id: 'form-123',
@@ -3,7 +3,10 @@ import {
3
3
  type SubmitResponsePayload
4
4
  } from '@defra/forms-model'
5
5
 
6
- import { type checkFormStatus } from '~/src/server/plugins/engine/helpers.js'
6
+ import {
7
+ getFormVersion,
8
+ type checkFormStatus
9
+ } from '~/src/server/plugins/engine/helpers.js'
7
10
  import { type FormModel } from '~/src/server/plugins/engine/models/FormModel.js'
8
11
  import { type DetailItem } from '~/src/server/plugins/engine/models/types.js'
9
12
  import { categoriseData } from '~/src/server/plugins/engine/outputFormatters/machine/v2.js'
@@ -28,10 +31,9 @@ export function format(
28
31
 
29
32
  const { main: v2Main, ...v2Data } = categoriseData(items)
30
33
 
31
- const versionMetadata = getVersionMetadata(
32
- context.submittedVersionNumber,
33
- formMetadata
34
- )
34
+ const versionMetadata =
35
+ getFormVersion(model.def) ??
36
+ getVersionMetadata(context.submittedVersionNumber, formMetadata)
35
37
 
36
38
  const meta: FormAdapterSubmissionMessageMeta = {
37
39
  schemaVersion: FormAdapterSubmissionSchemaVersion.V1,
@@ -63,7 +63,7 @@ async function handleHttpEvent(
63
63
 
64
64
  // @ts-expect-error - function signature will be refactored in the next iteration of the formatter
65
65
  const payload = format(context, items, model, undefined, undefined)
66
- const opts = { payload }
66
+ const opts: httpService.RequestOptions = { payload, timeout: 5000 }
67
67
 
68
68
  if (preparePageEventRequestOptions) {
69
69
  preparePageEventRequestOptions(opts, event, page, context)
@@ -8,8 +8,7 @@ import { config } from '~/src/config/index.js'
8
8
  import { createLogger } from '~/src/server/common/helpers/logging/logger.js'
9
9
  import {
10
10
  checkFormStatus,
11
- encodeUrl,
12
- safeGenerateCrumb
11
+ encodeUrl
13
12
  } from '~/src/server/plugins/engine/helpers.js'
14
13
 
15
14
  const logger = createLogger()
@@ -51,7 +50,6 @@ export async function context(request) {
51
50
  // take consumers props first so we can override it
52
51
  ...consumerViewContext,
53
52
  baseLayoutPath: pluginStorage.baseLayoutPath,
54
- crumb: safeGenerateCrumb(request),
55
53
  currentPath: `${request.path}${request.url.search}`,
56
54
  previewMode: isPreviewMode ? formState : undefined,
57
55
  slug: isResponseOK ? params?.slug : undefined
@@ -101,43 +101,6 @@ describe('Nunjucks context', () => {
101
101
  malformedRequest.server.plugins.crumb.generate
102
102
  ).not.toHaveBeenCalled()
103
103
  })
104
-
105
- it('should generate crumb when state exists', async () => {
106
- const mockCrumb = 'generated-crumb-value'
107
- const validRequest = /** @type {FormRequest} */ (
108
- /** @type {unknown} */ ({
109
- server: {
110
- plugins: {
111
- crumb: {
112
- generate: jest.fn().mockReturnValue(mockCrumb)
113
- },
114
- 'forms-engine-plugin': {
115
- baseLayoutPath: 'randomValue'
116
- }
117
- }
118
- },
119
- plugins: {},
120
- route: {
121
- settings: {
122
- plugins: {}
123
- }
124
- },
125
- path: '/test',
126
- url: { search: '' },
127
- state: {},
128
- yar: {
129
- flash: jest.fn().mockReturnValue([]),
130
- commit: jest.fn()
131
- }
132
- })
133
- )
134
-
135
- const { crumb } = await context(validRequest)
136
- expect(crumb).toBe(mockCrumb)
137
- expect(validRequest.server.plugins.crumb.generate).toHaveBeenCalledWith(
138
- validRequest
139
- )
140
- })
141
104
  })
142
105
  })
143
106
 
@@ -21,7 +21,9 @@ describe('Dummy API', () => {
21
21
 
22
22
  beforeAll(async () => {
23
23
  MockDate.set('2025-01-01T00:00:00Z')
24
- server = await createServer()
24
+ server = await createServer({
25
+ enforceCsrf: false
26
+ })
25
27
  await server.initialize()
26
28
  })
27
29