From 16eebe1e2263af72d4617ca1a69b52d624ed9573 Mon Sep 17 00:00:00 2001 From: David Stone Date: Fri, 12 Jun 2026 11:49:24 +0100 Subject: [PATCH 1/2] Use error description as the label if it exists --- .../engine/components/FormComponent.ts | 18 +++++++++--- .../engine/components/TextField.test.ts | 28 ++++++++++++++++++- 2 files changed, 41 insertions(+), 5 deletions(-) diff --git a/src/server/plugins/engine/components/FormComponent.ts b/src/server/plugins/engine/components/FormComponent.ts index d6686fd3c..04a4a8d04 100644 --- a/src/server/plugins/engine/components/FormComponent.ts +++ b/src/server/plugins/engine/components/FormComponent.ts @@ -44,10 +44,20 @@ export class FormComponent extends ComponentBase { this.type = type this.hint = hint - this.label = - 'shortDescription' in def && def.shortDescription - ? def.shortDescription - : def.title + + this.label = this.getLabel(def) + } + + getLabel(def: FormComponentsDef) { + if ('errorDescription' in def && def.errorDescription) { + return def.errorDescription + } + + if ('shortDescription' in def && def.shortDescription) { + return def.shortDescription + } + + return def.title } get keys() { diff --git a/src/server/plugins/engine/components/TextField.test.ts b/src/server/plugins/engine/components/TextField.test.ts index 492e0fff5..5b2d8a1e2 100644 --- a/src/server/plugins/engine/components/TextField.test.ts +++ b/src/server/plugins/engine/components/TextField.test.ts @@ -209,7 +209,33 @@ describe('TextField', () => { describe('Validation', () => { describe.each([ { - description: 'Use short description if it exists', + description: 'Use error description if it exists', + component: { + title: 'What is your example text?', + errorDescription: 'Example text', + shortDescription: 'Your example text', + name: 'myComponent', + type: ComponentType.TextField, + options: {}, + schema: {} + } satisfies TextFieldComponent, + assertions: [ + { + input: getFormData(''), + output: { + value: getFormData(''), + errors: [ + expect.objectContaining({ + text: 'Enter example text' + }) + ] + } + } + ] + }, + { + description: + 'Use short description if it exists and error description does not', component: { title: 'What is your example text?', shortDescription: 'Your example text', From e913f930989fd46c154d9100515ada47f0143b97 Mon Sep 17 00:00:00 2001 From: David Stone Date: Fri, 12 Jun 2026 12:32:54 +0100 Subject: [PATCH 2/2] Use error description in UKAddress errors --- .../plugins/engine/components/UkAddressField.ts | 15 ++++----------- test/form/definitions/postcode-lookup.js | 1 + test/form/postcode-lookup.test.js | 2 +- 3 files changed, 6 insertions(+), 12 deletions(-) diff --git a/src/server/plugins/engine/components/UkAddressField.ts b/src/server/plugins/engine/components/UkAddressField.ts index f21ea4a7e..5b27d9b37 100644 --- a/src/server/plugins/engine/components/UkAddressField.ts +++ b/src/server/plugins/engine/components/UkAddressField.ts @@ -1,8 +1,4 @@ -import { - ComponentType, - type FormComponentsDef, - type UkAddressFieldComponent -} from '@defra/forms-model' +import { ComponentType, type UkAddressFieldComponent } from '@defra/forms-model' import { type ObjectSchema } from 'joi' import lowerFirst from 'lodash/lowerFirst.js' @@ -34,15 +30,13 @@ export class UkAddressField extends FormComponent { declare stateSchema: ObjectSchema declare collection: ComponentCollection - shortDescription: FormComponentsDef['shortDescription'] - constructor( def: UkAddressFieldComponent, props: ConstructorParameters[1] ) { super(def, props) - const { name, options, shortDescription } = def + const { name, options } = def const isRequired = options.required !== false const hideOptional = !!options.optionalText @@ -126,7 +120,6 @@ export class UkAddressField extends FormComponent { this.options = options this.formSchema = this.collection.formSchema this.stateSchema = this.collection.stateSchema - this.shortDescription = shortDescription } getFormValueFromState(state: FormSubmissionState) { @@ -174,14 +167,14 @@ export class UkAddressField extends FormComponent { // When using postcode lookup, the address fields are hidden // so we replace any individual validation messages with a single one if (this.shouldUsePostcodeLookup() && uniqueErrors?.length) { - const { name, shortDescription } = this + const { name, label } = this return [ { name, path: [name], href: `#${name}`, - text: `Enter ${lowerFirst(shortDescription)}` + text: `Enter ${lowerFirst(label)}` } ] } diff --git a/test/form/definitions/postcode-lookup.js b/test/form/definitions/postcode-lookup.js index 2426d1511..99278716a 100644 --- a/test/form/definitions/postcode-lookup.js +++ b/test/form/definitions/postcode-lookup.js @@ -20,6 +20,7 @@ export default /** @satisfies {FormDefinition} */ ({ title: 'What is your address?', name: 'ybMHIv', shortDescription: 'Address', + errorDescription: 'Your address', hint: '', options: { required: true, diff --git a/test/form/postcode-lookup.test.js b/test/form/postcode-lookup.test.js index 29e9ae1e2..2eca19dad 100644 --- a/test/form/postcode-lookup.test.js +++ b/test/form/postcode-lookup.test.js @@ -101,7 +101,7 @@ describe('Postcode lookup form pages', () => { const $errorItems = within($errorSummary).getAllByRole('listitem') expect($errorItems).toHaveLength(1) - expect($errorItems[0]).toHaveTextContent('Enter address') + expect($errorItems[0]).toHaveTextContent('Enter your address') }) it('should dispatch to details page on POST', async () => {