Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
8 changes: 4 additions & 4 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

2 changes: 1 addition & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -70,7 +70,7 @@
},
"license": "SEE LICENSE IN LICENSE",
"dependencies": {
"@defra/forms-model": "^3.0.506",
"@defra/forms-model": "^3.0.552",
"@defra/hapi-tracing": "^1.26.0",
"@elastic/ecs-pino-format": "^1.5.0",
"@hapi/boom": "^10.0.1",
Expand Down
64 changes: 64 additions & 0 deletions src/server/plugins/engine/models/FormModel.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -141,6 +141,21 @@ describe('FormModel', () => {
expect(model.schemaVersion).toBe(SchemaVersion.V1)
})

it('sets versionNumber from options', () => {
const model = new FormModel(definition, {
basePath: 'test',
versionNumber: 42
})

expect(model.versionNumber).toBe(42)
})

it('sets versionNumber to undefined when not provided', () => {
const model = new FormModel(definition, { basePath: 'test' })

expect(model.versionNumber).toBeUndefined()
})

it.each([
{
input: undefined,
Expand Down Expand Up @@ -329,6 +344,55 @@ describe('FormModel', () => {
)
})

it('includes submittedVersionNumber in context when versionNumber is set', () => {
const formModel = new FormModel(fieldsRequiredDefinition, {
basePath: '/components',
versionNumber: 123
})

const state = {
$$__referenceNumber: 'foobar'
}
const pageUrl = new URL('http://example.com/components/fields-required')

const request: FormContextRequest = buildFormContextRequest({
method: 'get',
query: {},
path: pageUrl.pathname,
params: { path: 'components', slug: 'fields-required' },
url: pageUrl,
app: { model: formModel }
})

const context = formModel.getFormContext(request, state)

expect(context.submittedVersionNumber).toBe(123)
})

it('sets submittedVersionNumber to undefined when versionNumber is not set', () => {
const formModel = new FormModel(fieldsRequiredDefinition, {
basePath: '/components'
})

const state = {
$$__referenceNumber: 'foobar'
}
const pageUrl = new URL('http://example.com/components/fields-required')

const request: FormContextRequest = buildFormContextRequest({
method: 'get',
query: {},
path: pageUrl.pathname,
params: { path: 'components', slug: 'fields-required' },
url: pageUrl,
app: { model: formModel }
})

const context = formModel.getFormContext(request, state)

expect(context.submittedVersionNumber).toBeUndefined()
})

it('redirects to the page if the list field (radio) is invalidated due to list item conditions', () => {
const formModel = new FormModel(conditionsListDefinition, {
basePath: '/conditional-list-items'
Expand Down
7 changes: 5 additions & 2 deletions src/server/plugins/engine/models/FormModel.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,7 @@ export class FormModel {
name: string
values: FormDefinition
basePath: string
versionNumber?: number
conditions: Partial<Record<string, ExecutableCondition>>
pages: PageControllerClass[]
services: Services
Expand All @@ -94,7 +95,7 @@ export class FormModel {

constructor(
def: typeof this.def,
options: { basePath: string },
options: { basePath: string; versionNumber?: number },
services: Services = defaultServices,
controllers?: Record<string, typeof PageController>
) {
Expand Down Expand Up @@ -148,6 +149,7 @@ export class FormModel {
this.name = def.name ?? ''
this.values = result.value
this.basePath = options.basePath
this.versionNumber = options.versionNumber
this.conditions = {}
this.services = services
this.controllers = controllers
Expand Down Expand Up @@ -344,7 +346,8 @@ export class FormModel {
componentDefMap: this.componentDefMap,
pageMap: this.pageMap,
componentMap: this.componentMap,
referenceNumber: getReferenceNumber(state)
referenceNumber: getReferenceNumber(state),
submittedVersionNumber: this.versionNumber
}

// Validate current page
Expand Down
Loading
Loading