From c1a6fdeb2bc10f504498202b32f12021ca6a6421 Mon Sep 17 00:00:00 2001 From: Jez Barnsley Date: Fri, 24 Oct 2025 11:18:56 +0100 Subject: [PATCH 1/2] Defaults v2 summary title when not supplied --- src/server/forms/page-events.yaml | 2 +- .../engine/models/SummaryViewModel.test.ts | 79 ++++++++++++++++++- .../plugins/engine/models/SummaryViewModel.ts | 3 + test/form/definitions/conditions-basic.js | 2 +- .../conditions-relative-dates-v2.js | 2 +- test/form/definitions/demo-cph-number.js | 2 +- .../joined-conditions-complex-v2.js | 2 +- .../joined-conditions-simple-v2.js | 2 +- test/form/definitions/plugin-options.js | 2 +- test/form/definitions/postcode-lookup.js | 2 +- test/form/definitions/repeat.js | 2 +- test/form/definitions/templates.js | 2 +- 12 files changed, 89 insertions(+), 13 deletions(-) diff --git a/src/server/forms/page-events.yaml b/src/server/forms/page-events.yaml index f98ba73e9..68d009109 100644 --- a/src/server/forms/page-events.yaml +++ b/src/server/forms/page-events.yaml @@ -59,7 +59,7 @@ pages: next: [] id: da0fbdb4-a2de-4650-be16-9ba552af135f - id: 449a45f6-4541-4a46-91bd-8b8931b07b50 - title: Summary + title: '' path: '/summary' controller: SummaryPageController events: diff --git a/src/server/plugins/engine/models/SummaryViewModel.test.ts b/src/server/plugins/engine/models/SummaryViewModel.test.ts index fc4a432e0..65ebd13ab 100644 --- a/src/server/plugins/engine/models/SummaryViewModel.test.ts +++ b/src/server/plugins/engine/models/SummaryViewModel.test.ts @@ -15,6 +15,7 @@ import { type FormContextRequest, type FormState } from '~/src/server/plugins/engine/types.js' +import v2Definition from '~/test/form/definitions/conditions-relative-dates-v2.js' import definition from '~/test/form/definitions/repeat-mixed.js' const basePath = `${FORM_PREFIX}/test` @@ -326,7 +327,7 @@ describe('SummaryPageController', () => { expect(viewModel).toHaveProperty('allowSaveAndExit', true) }) - it('should display correct page title', () => { + it('should display correct page title for v1 form', () => { const state: FormState = { $$__referenceNumber: 'foobar', orderType: 'collection', @@ -334,9 +335,81 @@ describe('SummaryPageController', () => { } const context = model.getFormContext(request, state) - const viewModel = controller.getViewModel(request, context) + const viewModel = controller.getSummaryViewModel(request, context) + + expect(viewModel.pageTitle).toBe( + 'Check your answers before sending your form' + ) + }) + + it('should display default page title for v2 form when title not supplied', () => { + const state: FormState = { + $$__referenceNumber: 'foobar', + orderType: 'collection', + pizza: [] + } + + const titleModel = new FormModel(v2Definition, { + basePath: `${FORM_PREFIX}/test` + }) + + controller = new SummaryPageController(titleModel, v2Definition.pages[5]) + + request = { + method: 'get', + url: new URL('http://example.com/repeat/pizza-order/summary'), + path: '/test/summary', + params: { + path: 'summary', + slug: 'test' + }, + query: {}, + app: { model: titleModel }, + server: serverWithSaveAndExit + } + + const context = titleModel.getFormContext(request, state) + const viewModel = controller.getSummaryViewModel(request, context) + + expect(viewModel.pageTitle).toBe( + 'Check your answers before sending your form' + ) + }) + + it('should display override page title for v2 form when title supplied', () => { + const state: FormState = { + $$__referenceNumber: 'foobar', + orderType: 'collection', + pizza: [] + } + + const v2DefinitionWithSummaryTitle = structuredClone(v2Definition) + const summaryPage = v2DefinitionWithSummaryTitle.pages[5] + summaryPage.title = 'Override summary title' + + const titleModel = new FormModel(v2DefinitionWithSummaryTitle, { + basePath: `${FORM_PREFIX}/test` + }) + + controller = new SummaryPageController(titleModel, summaryPage) + + request = { + method: 'get', + url: new URL('http://example.com/repeat/pizza-order/summary'), + path: '/test/summary', + params: { + path: 'summary', + slug: 'test' + }, + query: {}, + app: { model: titleModel }, + server: serverWithSaveAndExit + } + + const context = titleModel.getFormContext(request, state) + const viewModel = controller.getSummaryViewModel(request, context) - expect(viewModel.pageTitle).toBe('Check your answers') + expect(viewModel.pageTitle).toBe('Override summary title') }) }) }) diff --git a/src/server/plugins/engine/models/SummaryViewModel.ts b/src/server/plugins/engine/models/SummaryViewModel.ts index 26308ab4f..1867db4f6 100644 --- a/src/server/plugins/engine/models/SummaryViewModel.ts +++ b/src/server/plugins/engine/models/SummaryViewModel.ts @@ -64,6 +64,9 @@ export class SummaryViewModel { this.page = page this.pageTitle = page.title + ? page.title + : 'Check your answers before sending your form' + this.serviceUrl = `/${basePath}` this.name = def.name this.declaration = def.declaration diff --git a/test/form/definitions/conditions-basic.js b/test/form/definitions/conditions-basic.js index bde2d68f9..dc0581e4d 100644 --- a/test/form/definitions/conditions-basic.js +++ b/test/form/definitions/conditions-basic.js @@ -146,7 +146,7 @@ export const V2 = /** @satisfies {FormDefinition} */ ({ next: [] }, { - title: 'Summary', + title: '', path: ControllerPath.Summary, controller: ControllerType.Summary } diff --git a/test/form/definitions/conditions-relative-dates-v2.js b/test/form/definitions/conditions-relative-dates-v2.js index c45263246..31fbc9f56 100644 --- a/test/form/definitions/conditions-relative-dates-v2.js +++ b/test/form/definitions/conditions-relative-dates-v2.js @@ -119,7 +119,7 @@ export default /** @satisfies {FormDefinition} */ ({ condition: '581e72cc-8ee3-4bf1-80d2-b9a905724210' }, { - title: 'Summary', + title: '', path: '/summary', controller: ControllerType.Summary, components: [], diff --git a/test/form/definitions/demo-cph-number.js b/test/form/definitions/demo-cph-number.js index ba0bcf585..4292b4c98 100644 --- a/test/form/definitions/demo-cph-number.js +++ b/test/form/definitions/demo-cph-number.js @@ -721,7 +721,7 @@ export default /** @satisfies {FormDefinition} */ ({ { path: ControllerPath.Summary, controller: ControllerType.Summary, - title: 'Check your answers before submitting your form' + title: 'Check your answers before sending your form' }, { path: '/whats-your-business-address', diff --git a/test/form/definitions/joined-conditions-complex-v2.js b/test/form/definitions/joined-conditions-complex-v2.js index a1a5f96cb..ad9d5df10 100644 --- a/test/form/definitions/joined-conditions-complex-v2.js +++ b/test/form/definitions/joined-conditions-complex-v2.js @@ -134,7 +134,7 @@ export default /** @satisfies {FormDefinition} */ ({ }, { id: '449a45f6-4541-4a46-91bd-8b8931b07b50', - title: 'Summary', + title: '', path: '/summary', controller: ControllerType.Summary } diff --git a/test/form/definitions/joined-conditions-simple-v2.js b/test/form/definitions/joined-conditions-simple-v2.js index c2f7f6345..0c4072988 100644 --- a/test/form/definitions/joined-conditions-simple-v2.js +++ b/test/form/definitions/joined-conditions-simple-v2.js @@ -69,7 +69,7 @@ export default /** @satisfies {FormDefinition} */ ({ }, { id: '449a45f6-4541-4a46-91bd-8b8931b07b50', - title: 'Summary', + title: '', path: '/summary', controller: ControllerType.Summary } diff --git a/test/form/definitions/plugin-options.js b/test/form/definitions/plugin-options.js index 1c44460cb..4f7d1a2b5 100644 --- a/test/form/definitions/plugin-options.js +++ b/test/form/definitions/plugin-options.js @@ -45,7 +45,7 @@ export default /** @satisfies {FormDefinition} */ ({ { path: ControllerPath.Summary, controller: ControllerType.Summary, - title: 'Summary' + title: '' } ]), sections: [ diff --git a/test/form/definitions/postcode-lookup.js b/test/form/definitions/postcode-lookup.js index 68cd472d9..2426d1511 100644 --- a/test/form/definitions/postcode-lookup.js +++ b/test/form/definitions/postcode-lookup.js @@ -32,7 +32,7 @@ export default /** @satisfies {FormDefinition} */ ({ id: 'c7ab16e8-819a-43bd-83fa-14c479d23961' }, { - title: 'Summary', + title: '', path: '/summary', controller: ControllerType.Summary, components: [], diff --git a/test/form/definitions/repeat.js b/test/form/definitions/repeat.js index 32abc63bb..4748c51c9 100644 --- a/test/form/definitions/repeat.js +++ b/test/form/definitions/repeat.js @@ -50,7 +50,7 @@ export default /** @satisfies {FormDefinition} */ ({ { path: ControllerPath.Summary, controller: ControllerType.Summary, - title: 'Check your answers' + title: 'Check your answers before sending your form' } ]), sections: [ diff --git a/test/form/definitions/templates.js b/test/form/definitions/templates.js index 1d2f57b4c..7bcc55546 100644 --- a/test/form/definitions/templates.js +++ b/test/form/definitions/templates.js @@ -123,7 +123,7 @@ export default /** @satisfies {FormDefinition} */ ({ { path: '/summary', controller: ControllerType.Summary, - title: 'Check your answers before submitting your form' + title: 'Check your answers before sending your form' } ], lists: [ From b33a54f7f843f8eff00c61235ce0170cd37af5d8 Mon Sep 17 00:00:00 2001 From: Jez Barnsley Date: Thu, 30 Oct 2025 16:11:32 +0000 Subject: [PATCH 2/2] Only default summary title for V2 forms --- src/server/plugins/engine/models/SummaryViewModel.ts | 7 ++++--- 1 file changed, 4 insertions(+), 3 deletions(-) diff --git a/src/server/plugins/engine/models/SummaryViewModel.ts b/src/server/plugins/engine/models/SummaryViewModel.ts index 1867db4f6..41c6c682e 100644 --- a/src/server/plugins/engine/models/SummaryViewModel.ts +++ b/src/server/plugins/engine/models/SummaryViewModel.ts @@ -1,4 +1,4 @@ -import { type Section } from '@defra/forms-model' +import { SchemaVersion, type Section } from '@defra/forms-model' import { getAnswer, @@ -64,8 +64,9 @@ export class SummaryViewModel { this.page = page this.pageTitle = page.title - ? page.title - : 'Check your answers before sending your form' + if (def.schema === SchemaVersion.V2 && !page.title) { + this.pageTitle = 'Check your answers before sending your form' + } this.serviceUrl = `/${basePath}` this.name = def.name