diff --git a/package-lock.json b/package-lock.json index 32361de31..a3b64a890 100644 --- a/package-lock.json +++ b/package-lock.json @@ -11,7 +11,7 @@ "license": "SEE LICENSE IN LICENSE", "dependencies": { "@aws-sdk/client-sns": "^3.1079.0", - "@defra/forms-engine-plugin": "^5.0.0-alpha.5", + "@defra/forms-engine-plugin": "^5.0.0-alpha.7", "@defra/forms-model": "^3.0.686", "@defra/hapi-tracing": "^1.30.0", "@elastic/ecs-pino-format": "^1.5.0", @@ -2490,9 +2490,9 @@ } }, "node_modules/@defra/forms-engine-plugin": { - "version": "5.0.0-alpha.5", - "resolved": "https://registry.npmjs.org/@defra/forms-engine-plugin/-/forms-engine-plugin-5.0.0-alpha.5.tgz", - "integrity": "sha512-Vk4e8tnmRGnHVCIzNY84QRIOMzc9u2XxMm5jQGLRCngRPgiFJ1QEM7dJA04p8KMazSDKS8/W7yx3X96BiY8zaQ==", + "version": "5.0.0-alpha4", + "resolved": "https://registry.npmjs.org/@defra/forms-engine-plugin/-/forms-engine-plugin-5.0.0-alpha4.tgz", + "integrity": "sha512-scTXQn2R6OHDqu3lnPQq0jOw0EUMSX1El0A71R+yovUzP6X89v29/00GXmnY8TZIGQKwRFZnvm/8ZhPHEj1m1g==", "hasInstallScript": true, "license": "SEE LICENSE IN LICENSE", "dependencies": { @@ -11131,9 +11131,9 @@ "license": "MIT" }, "node_modules/fast-uri": { - "version": "3.1.2", - "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.2.tgz", - "integrity": "sha512-rVjf7ArG3LTk+FS6Yw81V1DLuZl1bRbNrev6Tmd/9RaroeeRRJhAt7jg/6YFxbvAQXUCavSoZhPPj6oOx+5KjQ==", + "version": "3.1.4", + "resolved": "https://registry.npmjs.org/fast-uri/-/fast-uri-3.1.4.tgz", + "integrity": "sha512-8JnbkQ4juDyvYs4mgFGQqg4yCYtFDtUtmp2QIQq11ZZe5CFQ5wcqm1rqDgAh/QdMySuBnPzMUiJUNZG5N/AiQw==", "dev": true, "funding": [ { @@ -12195,9 +12195,9 @@ } }, "node_modules/immutable": { - "version": "5.1.5", - "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.5.tgz", - "integrity": "sha512-t7xcm2siw+hlUM68I+UEOK+z84RzmN59as9DZ7P1l0994DKUWV7UXBMQZVxaoMSRQ+PBZbHCOoBt7a2wxOMt+A==", + "version": "5.1.9", + "resolved": "https://registry.npmjs.org/immutable/-/immutable-5.1.9.tgz", + "integrity": "sha512-m8nVez3rwrgmWxtLMt1ZYXB2Lv7OKYn/disyxAlSDYAlKSlFoPPfIAmAM/M5xqL4m4C/wAPw7S2/CNaUii1Hxg==", "dev": true, "license": "MIT" }, @@ -19731,9 +19731,9 @@ "dev": true }, "node_modules/svgo": { - "version": "4.0.1", - "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.1.tgz", - "integrity": "sha512-XDpWUOPC6FEibaLzjfe0ucaV0YrOjYotGJO1WpF0Zd+n6ZGEQUsSugaoLq9QkEZtAfQIxT42UChcssDVPP3+/w==", + "version": "4.0.2", + "resolved": "https://registry.npmjs.org/svgo/-/svgo-4.0.2.tgz", + "integrity": "sha512-ekx94z1rRc5LDi6oSUaeRnYhd0UOJxdtQCL2rF8xpWxD3TPAsISWOrxezqGovqS38GRZOdpDfvQe3ts6F7nsng==", "dev": true, "license": "MIT", "dependencies": { diff --git a/package.json b/package.json index ab8bf71de..2ee435424 100644 --- a/package.json +++ b/package.json @@ -46,7 +46,7 @@ "license": "SEE LICENSE IN LICENSE", "dependencies": { "@aws-sdk/client-sns": "^3.1079.0", - "@defra/forms-engine-plugin": "^5.0.0-alpha.5", + "@defra/forms-engine-plugin": "^5.0.0-alpha.7", "@defra/forms-model": "^3.0.686", "@defra/hapi-tracing": "^1.30.0", "@elastic/ecs-pino-format": "^1.5.0", diff --git a/src/server/constants.js b/src/server/constants.js index c687dfdc1..8bcdbd60e 100644 --- a/src/server/constants.js +++ b/src/server/constants.js @@ -2,3 +2,4 @@ export const PREVIEW_PATH_PREFIX = '/preview' export const ERROR_PREVIEW_PATH_PREFIX = '/error-preview' export const FORM_PREFIX = '/form' export const SAVE_AND_EXIT_PAYLOAD = 'SAVE_AND_EXIT_PAYLOAD' +export const EN_GB = 'en-GB' diff --git a/src/server/i18n/form.ts b/src/server/i18n/form.ts index 80a1514ea..0f7fe149e 100644 --- a/src/server/i18n/form.ts +++ b/src/server/i18n/form.ts @@ -8,6 +8,7 @@ import { import { type i18n } from 'i18next' import { LRUCache } from 'lru-cache' +import { EN_GB } from '~/src/server/constants.js' import { createFormI18nInstance, extractMetadataBaseTranslations, @@ -107,7 +108,7 @@ export function createFormTranslator( export function createTranslator( i18nInstance: i18n, languages: { name: string; code: string }[], - language = 'en-GB' + language = EN_GB ): Translator { const t = (key: string, opts?: Record): string => i18nInstance.t(key, { lng: language, ...opts }) diff --git a/src/server/i18n/index.test.ts b/src/server/i18n/index.test.ts index e0bca00d0..c52ce88bf 100644 --- a/src/server/i18n/index.test.ts +++ b/src/server/i18n/index.test.ts @@ -2,6 +2,7 @@ import { type FormDefinition } from '@defra/forms-model' import { type Request } from '@hapi/hapi' import { type i18n } from 'i18next' +import { EN_GB } from '~/src/server/constants.js' import { extractTranslations, t } from '~/src/server/i18n/index.js' import { resolveLanguage } from '~/src/server/utils/utils.js' @@ -29,9 +30,7 @@ describe('Runner i18n', () => { describe('resolveLanguage()', () => { it('returns the default language', () => { const blankRequest = {} as unknown as Request - expect(resolveLanguage(blankRequest.query, blankRequest.yar)).toBe( - 'en-GB' - ) + expect(resolveLanguage(blankRequest.query, blankRequest.yar)).toBe(EN_GB) }) it('returns the language set in the session', () => { diff --git a/src/server/i18n/translations/cy.json b/src/server/i18n/translations/cy.json index 7a74816c1..b5586d552 100644 --- a/src/server/i18n/translations/cy.json +++ b/src/server/i18n/translations/cy.json @@ -274,6 +274,8 @@ "title": "Statws y gwasanaeth" }, "phaseBanner": { + "alphaStage": "Alffa", + "betaStage": "Beta", "feedbackLinkNewTab": "rhowch eich adborth (yn agor mewn tab newydd)", "feedbackLinkEmail": "rhowch eich adborth drwy e-bost", "text": "Gwasanaeth newydd yw hwn. Helpwch ni i'w wella a [[feedbackLink]]." diff --git a/src/server/i18n/translations/en-GB.json b/src/server/i18n/translations/en-GB.json index 790191a19..18bbce62e 100644 --- a/src/server/i18n/translations/en-GB.json +++ b/src/server/i18n/translations/en-GB.json @@ -274,6 +274,8 @@ "title": "Service status" }, "phaseBanner": { + "alphaStage": "Alpha", + "betaStage": "Beta", "feedbackLinkNewTab": "give your feedback (opens in new tab)", "feedbackLinkEmail": "give your feedback by email", "text": "This is a new service. Help us improve it and [[feedbackLink]]." diff --git a/src/server/models/save-and-exit.test.js b/src/server/models/save-and-exit.test.js index 0f7d3c03f..7aaee668d 100644 --- a/src/server/models/save-and-exit.test.js +++ b/src/server/models/save-and-exit.test.js @@ -1,3 +1,4 @@ +import { EN_GB } from '~/src/server/constants.js' import { createFormTranslator } from '~/src/server/i18n/form.js' import { lockedOutViewModel } from '~/src/server/models/save-and-exit.js' @@ -12,7 +13,7 @@ describe('Save and exit models', () => { }) const definition = /** @type {FormDefinition} */ ({}) - const translator = createFormTranslator(form, definition, 'en-GB') + const translator = createFormTranslator(form, definition, EN_GB) test('should construct live resume url', () => { const link = /** @type {SaveAndExitResumeDetails} */ ({ diff --git a/src/server/plugins/SummaryPageWithConfirmationEmailController.test.ts b/src/server/plugins/SummaryPageWithConfirmationEmailController.test.ts index 8694642ea..dfd8a7b8b 100644 --- a/src/server/plugins/SummaryPageWithConfirmationEmailController.test.ts +++ b/src/server/plugins/SummaryPageWithConfirmationEmailController.test.ts @@ -15,6 +15,7 @@ import { } from '@defra/forms-model' import { type ResponseObject } from '@hapi/hapi' +import { EN_GB } from '~/src/server/constants.js' import { SummaryPageWithConfirmationEmailController, getUserConfirmationEmailAddress @@ -41,7 +42,7 @@ describe('SummaryPageWithConfirmationEmailController', () => { basePath: 'test' }) - translator = model.createTranslator('en-GB') + translator = model.createTranslator(EN_GB) // Create a mock page for SummaryPageWithConfirmationEmailController const mockPage = { @@ -61,7 +62,7 @@ describe('SummaryPageWithConfirmationEmailController', () => { }, query: {}, app: { model } - } as unknown as FormRequest) + } as FormRequest) }) describe('handle errors', () => { diff --git a/src/server/plugins/nunjucks/context.test.js b/src/server/plugins/nunjucks/context.test.js index 646a0db56..9949f6e91 100644 --- a/src/server/plugins/nunjucks/context.test.js +++ b/src/server/plugins/nunjucks/context.test.js @@ -1,6 +1,7 @@ import { tmpdir } from 'node:os' import { config } from '~/src/config/index.js' +import { EN_GB } from '~/src/server/constants.js' import { context } from '~/src/server/plugins/nunjucks/context.js' describe('Nunjucks context', () => { @@ -123,7 +124,7 @@ describe('Nunjucks context', () => { query: {}, response: { statusCode: 200 }, state: {}, - app: { language: 'en-GB' }, + app: { language: EN_GB }, path: '/test', url: { search: '' }, plugins: {} diff --git a/src/server/utils/utils.js b/src/server/utils/utils.js index 8b21e6789..9b996148d 100644 --- a/src/server/utils/utils.js +++ b/src/server/utils/utils.js @@ -1,6 +1,7 @@ import { getTraceId } from '@defra/hapi-tracing' import { config } from '~/src/config/index.js' +import { EN_GB } from '~/src/server/constants.js' /** * Returns a set of headers to use in an HTTP request, merging them with any existing headers in options. @@ -37,7 +38,7 @@ export function getFeedbackFormLink(formId) { * @returns {string} - the resolved language code */ export function resolveLanguage(query, yar) { - const defaultLang = 'en-GB' + const defaultLang = EN_GB query ??= {} diff --git a/src/server/views/layout.html b/src/server/views/layout.html index 13fda2a2d..3f1000b53 100644 --- a/src/server/views/layout.html +++ b/src/server/views/layout.html @@ -149,8 +149,9 @@ {% endif %} {%- endset %} + {% set stageKey = 'layout.phaseBanner.' + phaseTag + 'Stage' %} {{ govukPhaseBanner({ - tag: { text: phaseTag | capitalize }, + tag: { text: tR(stageKey) | capitalize }, html: tR('layout.phaseBanner.text', { feedbackLink: feedbackLinkHtml }) }) }} {% endif %} diff --git a/test/form/confirmation-email.test.js b/test/form/confirmation-email.test.js index f8d26121c..155af1a54 100644 --- a/test/form/confirmation-email.test.js +++ b/test/form/confirmation-email.test.js @@ -372,7 +372,8 @@ describe('Confirmation email', () => { repeaters: [], retrievalKey: 'enrique.chase@defra.gov.uk', sessionId: expect.any(String), - referenceNumber: expect.any(String) + referenceNumber: expect.any(String), + language: undefined }) expect(response.statusCode).toBe(StatusCodes.SEE_OTHER)