diff --git a/.gitleaksignore b/.gitleaksignore index 76fe6a1c9..196f6cb44 100644 --- a/.gitleaksignore +++ b/.gitleaksignore @@ -8,3 +8,5 @@ b19d88d1d92b0530f065feefcf25d8cdd82a876a:tests/test-team/auth/user.json:jwt:25 bc79df4f82052918ae6bf69d36279e5dd391d61e:tests/test-team/auth/user.json:jwt:15 bc79df4f82052918ae6bf69d36279e5dd391d61e:tests/test-team/auth/user.json:jwt:25 306d9ec55d3498b86d5506da9a90ac486fc66563:frontend/src/components/molecules/MessagePlanFallbackConditions/MessagePlanFallbackConditions.tsx:ipv4:92 +a408293ecbc3a95684246fd16b111b6e09d6e194:lambdas/backend-client/src/__tests__/schemas/contact-details/email.test.ts:ipv4:80 +a408293ecbc3a95684246fd16b111b6e09d6e194:lambdas/backend-client/src/__tests__/schemas/contact-details/email.test.ts:ipv4:81 diff --git a/frontend/src/__tests__/app/message-plans/choose-british-sign-language-letter-template/preview-template/page.test.tsx b/frontend/src/__tests__/app/message-plans/choose-british-sign-language-letter-template/preview-template/page.test.tsx index 47d1a52b4..12c6253b5 100644 --- a/frontend/src/__tests__/app/message-plans/choose-british-sign-language-letter-template/preview-template/page.test.tsx +++ b/frontend/src/__tests__/app/message-plans/choose-british-sign-language-letter-template/preview-template/page.test.tsx @@ -1,91 +1,39 @@ +/** + * @jest-environment node + */ import PreviewBritishSignLanguageLetterTemplateFromMessagePlan, { generateMetadata, } from '@app/message-plans/choose-british-sign-language-letter-template/[routingConfigId]/preview-template/[templateId]/page'; -import { BSL_LETTER_TEMPLATE, ROUTING_CONFIG } from '@testhelpers/helpers'; -import { render } from '@testing-library/react'; -import { getTemplate } from '@utils/form-actions'; -import { redirect } from 'next/navigation'; +import { SummaryChooseLetter } from '@molecules/SummaryChooseLetter/SummaryChooseLetter'; +import { validateBritishSignLanguageLetterTemplate } from 'nhs-notify-web-template-management-utils'; -jest.mock('@utils/form-actions'); -jest.mock('next/navigation'); - -const getTemplateMock = jest.mocked(getTemplate); -const redirectMock = jest.mocked(redirect); +jest.mock('@molecules/SummaryChooseLetter/SummaryChooseLetter'); describe('PreviewBritishSignLanguageLetterTemplateFromMessagePlan page', () => { - it('should redirect to the edit message plan page when lockNumber is invalid', async () => { - await PreviewBritishSignLanguageLetterTemplateFromMessagePlan({ - params: Promise.resolve({ - routingConfigId: 'routing-config-id', - templateId: 'template-id', - }), - searchParams: Promise.resolve({ - lockNumber: 'invalid', - }), - }); - - expect(redirectMock).toHaveBeenCalledWith( - '/message-plans/edit-message-plan/routing-config-id', - 'replace' - ); - }); - - it('should redirect to the edit message plan page when lockNumber is missing', async () => { - await PreviewBritishSignLanguageLetterTemplateFromMessagePlan({ + it('should render SummaryChooseLetter with validateBritishSignLanguageLetterTemplate and redirectUrlOnLockNumberFailure', async () => { + const props = { params: Promise.resolve({ routingConfigId: 'routing-config-id', templateId: 'template-id', }), - searchParams: Promise.resolve({}), - }); - - expect(redirectMock).toHaveBeenCalledWith( - '/message-plans/edit-message-plan/routing-config-id', - 'replace' + searchParams: Promise.resolve({ lockNumber: '5' }), + }; + + const page = + await PreviewBritishSignLanguageLetterTemplateFromMessagePlan(props); + + expect(page).toEqual( + ); }); - it('should redirect to invalid page for invalid template id', async () => { - getTemplateMock.mockResolvedValueOnce(undefined); - - await PreviewBritishSignLanguageLetterTemplateFromMessagePlan({ - params: Promise.resolve({ - routingConfigId: 'routing-config-id', - templateId: 'invalid-template-id', - }), - searchParams: Promise.resolve({ - lockNumber: '0', - }), - }); - - expect(getTemplateMock).toHaveBeenCalledWith('invalid-template-id'); - - expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace'); - }); - - it('renders British Sign Language letter template preview', async () => { - getTemplateMock.mockResolvedValueOnce({ - ...BSL_LETTER_TEMPLATE, - templateStatus: 'SUBMITTED', - }); - - const page = await PreviewBritishSignLanguageLetterTemplateFromMessagePlan({ - params: Promise.resolve({ - routingConfigId: ROUTING_CONFIG.id, - templateId: BSL_LETTER_TEMPLATE.id, - }), - searchParams: Promise.resolve({ - lockNumber: '5', - }), - }); - - const container = render(page); - - expect(getTemplateMock).toHaveBeenCalledWith(BSL_LETTER_TEMPLATE.id); - + it('should have the correct page title', async () => { expect(await generateMetadata()).toEqual({ title: 'Preview British Sign Language letter template - NHS Notify', }); - expect(container.asFragment()).toMatchSnapshot(); }); }); diff --git a/frontend/src/__tests__/app/message-plans/choose-large-print-letter-template/preview-template/__snapshots__/page.test.tsx.snap b/frontend/src/__tests__/app/message-plans/choose-large-print-letter-template/preview-template/__snapshots__/page.test.tsx.snap deleted file mode 100644 index f2746d037..000000000 --- a/frontend/src/__tests__/app/message-plans/choose-large-print-letter-template/preview-template/__snapshots__/page.test.tsx.snap +++ /dev/null @@ -1,125 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`PreviewLargePrintLetterTemplateFromMessagePlan page renders large print letter template preview 1`] = ` - -
- - Go back - -
-
-
-
- - Template - -

- large print letter template name -

-
-
-
-
-
- Template ID -
-
- large-print-letter-template-id -
-
-
-
- Template type -
-
- Large print letter -
-
-
-
- Template file -
-
-
- -

- large-print-template.pdf -

-
-
-
-
-
- - Go back - -
-
-
-
-
-`; diff --git a/frontend/src/__tests__/app/message-plans/choose-large-print-letter-template/preview-template/page.test.tsx b/frontend/src/__tests__/app/message-plans/choose-large-print-letter-template/preview-template/page.test.tsx index 8614c9c24..c2cad0e6d 100644 --- a/frontend/src/__tests__/app/message-plans/choose-large-print-letter-template/preview-template/page.test.tsx +++ b/frontend/src/__tests__/app/message-plans/choose-large-print-letter-template/preview-template/page.test.tsx @@ -1,96 +1,38 @@ +/** + * @jest-environment node + */ import PreviewLargePrintLetterTemplateFromMessagePlan, { generateMetadata, } from '@app/message-plans/choose-large-print-letter-template/[routingConfigId]/preview-template/[templateId]/page'; -import { - LARGE_PRINT_LETTER_TEMPLATE, - ROUTING_CONFIG, -} from '@testhelpers/helpers'; -import { render } from '@testing-library/react'; -import { getTemplate } from '@utils/form-actions'; -import { redirect } from 'next/navigation'; +import { SummaryChooseLetter } from '@molecules/SummaryChooseLetter/SummaryChooseLetter'; +import { validateLargePrintLetterTemplate } from 'nhs-notify-web-template-management-utils'; -jest.mock('@utils/form-actions'); -jest.mock('next/navigation'); - -const getTemplateMock = jest.mocked(getTemplate); -const redirectMock = jest.mocked(redirect); +jest.mock('@molecules/SummaryChooseLetter/SummaryChooseLetter'); describe('PreviewLargePrintLetterTemplateFromMessagePlan page', () => { - it('should redirect to the edit message plan page when lockNumber is invalid', async () => { - await PreviewLargePrintLetterTemplateFromMessagePlan({ + it('should render SummaryChooseLetter with validateLargePrintLetterTemplate and redirectUrlOnLockNumberFailure', async () => { + const props = { params: Promise.resolve({ routingConfigId: 'routing-config-id', templateId: 'template-id', }), - searchParams: Promise.resolve({ - lockNumber: 'invalid', - }), - }); - - expect(redirectMock).toHaveBeenCalledWith( - '/message-plans/edit-message-plan/routing-config-id', - 'replace' - ); - }); + searchParams: Promise.resolve({ lockNumber: '5' }), + }; - it('should redirect to the edit message plan page when lockNumber is missing', async () => { - await PreviewLargePrintLetterTemplateFromMessagePlan({ - params: Promise.resolve({ - routingConfigId: 'routing-config-id', - templateId: 'template-id', - }), - searchParams: Promise.resolve({}), - }); + const page = await PreviewLargePrintLetterTemplateFromMessagePlan(props); - expect(redirectMock).toHaveBeenCalledWith( - '/message-plans/edit-message-plan/routing-config-id', - 'replace' + expect(page).toEqual( + ); }); - it('should redirect to invalid page for invalid template id', async () => { - getTemplateMock.mockResolvedValueOnce(undefined); - - await PreviewLargePrintLetterTemplateFromMessagePlan({ - params: Promise.resolve({ - routingConfigId: 'routing-config-id', - templateId: 'invalid-template-id', - }), - searchParams: Promise.resolve({ - lockNumber: '0', - }), - }); - - expect(getTemplateMock).toHaveBeenCalledWith('invalid-template-id'); - - expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace'); - }); - - it('renders large print letter template preview', async () => { - getTemplateMock.mockResolvedValueOnce({ - ...LARGE_PRINT_LETTER_TEMPLATE, - templateStatus: 'SUBMITTED', - }); - - const page = await PreviewLargePrintLetterTemplateFromMessagePlan({ - params: Promise.resolve({ - routingConfigId: ROUTING_CONFIG.id, - templateId: LARGE_PRINT_LETTER_TEMPLATE.id, - }), - searchParams: Promise.resolve({ - lockNumber: '5', - }), - }); - - const container = render(page); - - expect(getTemplateMock).toHaveBeenCalledWith( - LARGE_PRINT_LETTER_TEMPLATE.id - ); - + it('should have the correct page title', async () => { expect(await generateMetadata()).toEqual({ title: 'Preview large print letter template - NHS Notify', }); - expect(container.asFragment()).toMatchSnapshot(); }); }); diff --git a/frontend/src/__tests__/app/message-plans/choose-other-language-letter-template/[routingConfigId]/preview-template/[templateId]/__snapshots__/page.test.tsx.snap b/frontend/src/__tests__/app/message-plans/choose-other-language-letter-template/[routingConfigId]/preview-template/[templateId]/__snapshots__/page.test.tsx.snap deleted file mode 100644 index 2ca062b54..000000000 --- a/frontend/src/__tests__/app/message-plans/choose-other-language-letter-template/[routingConfigId]/preview-template/[templateId]/__snapshots__/page.test.tsx.snap +++ /dev/null @@ -1,125 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`PreviewOtherLanguageLetterTemplateFromMessagePlan page renders foreign language letter template preview 1`] = ` - -
- - Go back - -
-
-
-
- - Template - -

- French letter template -

-
-
-
-
-
- Template ID -
-
- french-letter-id -
-
-
-
- Template type -
-
- Standard letter - French -
-
-
-
- Template file -
-
-
- -

- template.pdf -

-
-
-
-
-
- - Go back - -
-
-
-
-
-`; diff --git a/frontend/src/__tests__/app/message-plans/choose-other-language-letter-template/[routingConfigId]/preview-template/[templateId]/page.test.tsx b/frontend/src/__tests__/app/message-plans/choose-other-language-letter-template/[routingConfigId]/preview-template/[templateId]/page.test.tsx index 37bd77a89..df207660f 100644 --- a/frontend/src/__tests__/app/message-plans/choose-other-language-letter-template/[routingConfigId]/preview-template/[templateId]/page.test.tsx +++ b/frontend/src/__tests__/app/message-plans/choose-other-language-letter-template/[routingConfigId]/preview-template/[templateId]/page.test.tsx @@ -1,99 +1,38 @@ +/** + * @jest-environment node + */ import PreviewOtherLanguageLetterTemplateFromMessagePlan, { generateMetadata, } from '@app/message-plans/choose-other-language-letter-template/[routingConfigId]/preview-template/[templateId]/page'; -import { PDF_LETTER_TEMPLATE, ROUTING_CONFIG } from '@testhelpers/helpers'; -import { render } from '@testing-library/react'; -import { getTemplate } from '@utils/form-actions'; -import { redirect } from 'next/navigation'; -import { Language } from 'nhs-notify-web-template-management-types'; +import { SummaryChooseLetter } from '@molecules/SummaryChooseLetter/SummaryChooseLetter'; +import { validateForeignLanguageLetterTemplate } from 'nhs-notify-web-template-management-utils'; -jest.mock('@utils/form-actions'); -jest.mock('next/navigation'); - -const getTemplateMock = jest.mocked(getTemplate); -const redirectMock = jest.mocked(redirect); - -const FRENCH_LETTER_TEMPLATE = { - ...PDF_LETTER_TEMPLATE, - id: 'french-letter-id', - name: 'French letter template', - language: 'fr' as Language, -}; +jest.mock('@molecules/SummaryChooseLetter/SummaryChooseLetter'); describe('PreviewOtherLanguageLetterTemplateFromMessagePlan page', () => { - it('should redirect to the edit message plan page when lockNumber is invalid', async () => { - await PreviewOtherLanguageLetterTemplateFromMessagePlan({ + it('should render SummaryChooseLetter with validateForeignLanguageLetterTemplate and redirectUrlOnLockNumberFailure', async () => { + const props = { params: Promise.resolve({ routingConfigId: 'routing-config-id', templateId: 'template-id', }), - searchParams: Promise.resolve({ - lockNumber: 'invalid', - }), - }); + searchParams: Promise.resolve({ lockNumber: '5' }), + }; - expect(redirectMock).toHaveBeenCalledWith( - '/message-plans/edit-message-plan/routing-config-id', - 'replace' - ); - }); - - it('should redirect to the edit message plan page when lockNumber is missing', async () => { - await PreviewOtherLanguageLetterTemplateFromMessagePlan({ - params: Promise.resolve({ - routingConfigId: 'routing-config-id', - templateId: 'template-id', - }), - searchParams: Promise.resolve({}), - }); + const page = await PreviewOtherLanguageLetterTemplateFromMessagePlan(props); - expect(redirectMock).toHaveBeenCalledWith( - '/message-plans/edit-message-plan/routing-config-id', - 'replace' + expect(page).toEqual( + ); }); - it('should redirect to invalid page with invalid template id', async () => { - getTemplateMock.mockResolvedValueOnce(undefined); - - await PreviewOtherLanguageLetterTemplateFromMessagePlan({ - params: Promise.resolve({ - routingConfigId: 'routing-config-id', - templateId: 'invalid-template-id', - }), - searchParams: Promise.resolve({ - lockNumber: '0', - }), - }); - - expect(getTemplateMock).toHaveBeenCalledWith('invalid-template-id'); - - expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace'); - }); - - it('renders foreign language letter template preview', async () => { - getTemplateMock.mockResolvedValueOnce({ - ...FRENCH_LETTER_TEMPLATE, - templateStatus: 'SUBMITTED', - }); - - const page = await PreviewOtherLanguageLetterTemplateFromMessagePlan({ - params: Promise.resolve({ - routingConfigId: ROUTING_CONFIG.id, - templateId: FRENCH_LETTER_TEMPLATE.id, - }), - searchParams: Promise.resolve({ - lockNumber: '5', - }), - }); - - const container = render(page); - - expect(getTemplateMock).toHaveBeenCalledWith(FRENCH_LETTER_TEMPLATE.id); - + it('should have the correct page title', async () => { expect(await generateMetadata()).toEqual({ title: 'Preview other language letter template - NHS Notify', }); - expect(container.asFragment()).toMatchSnapshot(); }); }); diff --git a/frontend/src/__tests__/app/message-plans/choose-standard-english-letter-template/__snapshots__/page.test.tsx.snap b/frontend/src/__tests__/app/message-plans/choose-standard-english-letter-template/__snapshots__/page.test.tsx.snap index 149ec95f3..a2d4fb717 100644 --- a/frontend/src/__tests__/app/message-plans/choose-standard-english-letter-template/__snapshots__/page.test.tsx.snap +++ b/frontend/src/__tests__/app/message-plans/choose-standard-english-letter-template/__snapshots__/page.test.tsx.snap @@ -66,7 +66,7 @@ exports[`ChooseStandardEnglishLetterTemplate page renders letter template select
- letter template name + authoring letter template name
@@ -156,19 +156,19 @@ exports[`ChooseStandardEnglishLetterTemplate page renders letter template select class="nhsuk-radios__item" > @@ -176,7 +176,7 @@ exports[`ChooseStandardEnglishLetterTemplate page renders letter template select Name - letter template name + authoring letter template name Preview diff --git a/frontend/src/__tests__/app/message-plans/choose-standard-english-letter-template/page.test.tsx b/frontend/src/__tests__/app/message-plans/choose-standard-english-letter-template/page.test.tsx index 83ef9b8cf..cf5c4c03a 100644 --- a/frontend/src/__tests__/app/message-plans/choose-standard-english-letter-template/page.test.tsx +++ b/frontend/src/__tests__/app/message-plans/choose-standard-english-letter-template/page.test.tsx @@ -1,7 +1,10 @@ import ChooseStandardEnglishLetterTemplate, { generateMetadata, } from '@app/message-plans/choose-standard-english-letter-template/[routingConfigId]/page'; -import { PDF_LETTER_TEMPLATE, ROUTING_CONFIG } from '@testhelpers/helpers'; +import { + AUTHORING_LETTER_TEMPLATE, + ROUTING_CONFIG, +} from '@testhelpers/helpers'; import { render } from '@testing-library/react'; import { getTemplates } from '@utils/form-actions'; import { getRoutingConfig } from '@utils/message-plans'; @@ -63,7 +66,9 @@ describe('ChooseStandardEnglishLetterTemplate page', () => { it('renders letter template selection', async () => { getRoutingConfigMock.mockResolvedValueOnce(ROUTING_CONFIG); - getTemplatesMock.mockResolvedValueOnce([PDF_LETTER_TEMPLATE]); + getTemplatesMock.mockResolvedValueOnce([ + { ...AUTHORING_LETTER_TEMPLATE, templateStatus: 'PROOF_APPROVED' }, + ]); const page = await ChooseStandardEnglishLetterTemplate({ params: Promise.resolve({ diff --git a/frontend/src/__tests__/app/message-plans/choose-standard-english-letter-template/preview-template/__snapshots__/page.test.tsx.snap b/frontend/src/__tests__/app/message-plans/choose-standard-english-letter-template/preview-template/__snapshots__/page.test.tsx.snap deleted file mode 100644 index d5b6d634d..000000000 --- a/frontend/src/__tests__/app/message-plans/choose-standard-english-letter-template/preview-template/__snapshots__/page.test.tsx.snap +++ /dev/null @@ -1,125 +0,0 @@ -// Jest Snapshot v1, https://goo.gl/fbAQLP - -exports[`PreviewStandardEnglishLetterTemplateFromMessagePlan page renders letter template preview 1`] = ` - -
- - Go back - -
-
-
-
- - Template - -

- letter template name -

-
-
-
-
-
- Template ID -
-
- letter-template-id -
-
-
-
- Template type -
-
- Standard letter -
-
-
-
- Template file -
-
-
- -

- template.pdf -

-
-
-
-
-
- - Go back - -
-
-
-
-
-`; diff --git a/frontend/src/__tests__/app/message-plans/choose-standard-english-letter-template/preview-template/page.test.tsx b/frontend/src/__tests__/app/message-plans/choose-standard-english-letter-template/preview-template/page.test.tsx index 935298bc7..47616be14 100644 --- a/frontend/src/__tests__/app/message-plans/choose-standard-english-letter-template/preview-template/page.test.tsx +++ b/frontend/src/__tests__/app/message-plans/choose-standard-english-letter-template/preview-template/page.test.tsx @@ -1,91 +1,39 @@ +/** + * @jest-environment node + */ import PreviewStandardEnglishLetterTemplateFromMessagePlan, { generateMetadata, } from '@app/message-plans/choose-standard-english-letter-template/[routingConfigId]/preview-template/[templateId]/page'; -import { PDF_LETTER_TEMPLATE, ROUTING_CONFIG } from '@testhelpers/helpers'; -import { render } from '@testing-library/react'; -import { getTemplate } from '@utils/form-actions'; -import { redirect } from 'next/navigation'; +import { SummaryChooseLetter } from '@molecules/SummaryChooseLetter/SummaryChooseLetter'; +import { validateLetterTemplate } from 'nhs-notify-web-template-management-utils'; -jest.mock('@utils/form-actions'); -jest.mock('next/navigation'); - -const getTemplateMock = jest.mocked(getTemplate); -const redirectMock = jest.mocked(redirect); +jest.mock('@molecules/SummaryChooseLetter/SummaryChooseLetter'); describe('PreviewStandardEnglishLetterTemplateFromMessagePlan page', () => { - it('should redirect to the edit message plan page when lockNumber is invalid', async () => { - await PreviewStandardEnglishLetterTemplateFromMessagePlan({ - params: Promise.resolve({ - routingConfigId: 'routing-config-id', - templateId: 'template-id', - }), - searchParams: Promise.resolve({ - lockNumber: 'invalid', - }), - }); - - expect(redirectMock).toHaveBeenCalledWith( - '/message-plans/edit-message-plan/routing-config-id', - 'replace' - ); - }); - - it('should redirect to the edit message plan page when lockNumber is missing', async () => { - await PreviewStandardEnglishLetterTemplateFromMessagePlan({ + it('should render SummaryChooseLetter with validateLetterTemplate and redirectUrlOnLockNumberFailure', async () => { + const props = { params: Promise.resolve({ routingConfigId: 'routing-config-id', templateId: 'template-id', }), - searchParams: Promise.resolve({}), - }); - - expect(redirectMock).toHaveBeenCalledWith( - '/message-plans/edit-message-plan/routing-config-id', - 'replace' + searchParams: Promise.resolve({ lockNumber: '5' }), + }; + + const page = + await PreviewStandardEnglishLetterTemplateFromMessagePlan(props); + + expect(page).toEqual( + ); }); - it('should redirect to invalid page with invalid template id', async () => { - getTemplateMock.mockResolvedValueOnce(undefined); - - await PreviewStandardEnglishLetterTemplateFromMessagePlan({ - params: Promise.resolve({ - routingConfigId: 'routing-config-id', - templateId: 'invalid-template-id', - }), - searchParams: Promise.resolve({ - lockNumber: '0', - }), - }); - - expect(getTemplateMock).toHaveBeenCalledWith('invalid-template-id'); - - expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace'); - }); - - it('renders letter template preview', async () => { - getTemplateMock.mockResolvedValueOnce({ - ...PDF_LETTER_TEMPLATE, - templateStatus: 'SUBMITTED', - }); - - const page = await PreviewStandardEnglishLetterTemplateFromMessagePlan({ - params: Promise.resolve({ - routingConfigId: ROUTING_CONFIG.id, - templateId: PDF_LETTER_TEMPLATE.id, - }), - searchParams: Promise.resolve({ - lockNumber: '5', - }), - }); - - const container = render(page); - - expect(getTemplateMock).toHaveBeenCalledWith(PDF_LETTER_TEMPLATE.id); - + it('should have the correct page title', async () => { expect(await generateMetadata()).toEqual({ title: 'Preview letter template - NHS Notify', }); - expect(container.asFragment()).toMatchSnapshot(); }); }); diff --git a/frontend/src/__tests__/app/message-plans/preview-message-plan/__snapshots__/page.test.tsx.snap b/frontend/src/__tests__/app/message-plans/preview-message-plan/__snapshots__/page.test.tsx.snap index fdf1e126c..6cf6ce8e7 100644 --- a/frontend/src/__tests__/app/message-plans/preview-message-plan/__snapshots__/page.test.tsx.snap +++ b/frontend/src/__tests__/app/message-plans/preview-message-plan/__snapshots__/page.test.tsx.snap @@ -101,7 +101,7 @@ exports[`full cascade plan matches snapshot 1`] = ` class="nhsuk-button nhsuk-button--secondary" type="button" > - Open all template previews + Open all digital template previews

    - - letter template name - + authoring letter template name

    + + Preview template (opens in a new tab) +
      - - large print letter template name - + large print letter template name

      + + Preview template (opens in a new tab) + @@ -747,12 +753,15 @@ exports[`full cascade plan matches snapshot 1`] = `

      - - British Sign Language letter template name - + British Sign Language letter template name

      + + Preview template (opens in a new tab) + @@ -773,25 +782,31 @@ exports[`full cascade plan matches snapshot 1`] = ` Other language letters (optional)

      - - letter template name - + authoring letter template name

      -

      + Preview template (opens in a new tab) + +

      - - letter template name - + authoring letter template name

      + + Preview template (opens in a new tab) + diff --git a/frontend/src/__tests__/app/message-plans/preview-message-plan/page.test.tsx b/frontend/src/__tests__/app/message-plans/preview-message-plan/page.test.tsx index ec02b9b40..263c4b0eb 100644 --- a/frontend/src/__tests__/app/message-plans/preview-message-plan/page.test.tsx +++ b/frontend/src/__tests__/app/message-plans/preview-message-plan/page.test.tsx @@ -10,11 +10,11 @@ import { ORDINALS, } from 'nhs-notify-web-template-management-utils'; import { + AUTHORING_LETTER_TEMPLATE, BSL_LETTER_TEMPLATE, EMAIL_TEMPLATE, LARGE_PRINT_LETTER_TEMPLATE, NHS_APP_TEMPLATE, - PDF_LETTER_TEMPLATE, SMS_TEMPLATE, } from '@testhelpers/helpers'; import { RoutingConfigFactory } from '@testhelpers/routing-config-factory'; @@ -77,17 +77,17 @@ const templates: MessagePlanTemplates = { templateStatus: 'SUBMITTED', }, [letterTemplateId]: { - ...PDF_LETTER_TEMPLATE, + ...AUTHORING_LETTER_TEMPLATE, id: letterTemplateId, templateStatus: 'SUBMITTED', }, [kuTemplateId]: { - ...PDF_LETTER_TEMPLATE, + ...AUTHORING_LETTER_TEMPLATE, id: kuTemplateId, templateStatus: 'SUBMITTED', }, [sqTemplateId]: { - ...PDF_LETTER_TEMPLATE, + ...AUTHORING_LETTER_TEMPLATE, id: sqTemplateId, templateStatus: 'SUBMITTED', }, @@ -249,7 +249,7 @@ describe('full cascade plan', () => { await renderPage(routingConfig); const button = screen.getByRole('button', { - name: 'Open all template previews', + name: 'Open all digital template previews', }); const detailsSections = screen @@ -262,7 +262,7 @@ describe('full cascade plan', () => { await user.click(button); - expect(button).toHaveTextContent('Close all template previews'); + expect(button).toHaveTextContent('Close all digital template previews'); for (const section of detailsSections) { expect(section.open).toBe(true); @@ -270,7 +270,7 @@ describe('full cascade plan', () => { await user.click(button); - expect(button).toHaveTextContent('Open all template previews'); + expect(button).toHaveTextContent('Open all digital template previews'); for (const section of detailsSections) { expect(section.open).toBe(false); @@ -366,7 +366,7 @@ describe('letter only', () => { expect( screen.queryByRole('button', { - name: 'Open all template previews', + name: 'Open all digital template previews', }) ).not.toBeInTheDocument(); @@ -374,15 +374,21 @@ describe('letter only', () => { const card = within(block).getByTestId('channel-card'); + const name = within(card).getByTestId('template-name'); + + expect(name).toHaveTextContent(template.name); + const link = within(card).getByRole('link'); - expect(link).toHaveTextContent(template.name); + expect(link).toHaveTextContent('Preview template (opens in a new tab)'); expect(link).toHaveAttribute( 'href', - `/preview-submitted-letter-template/${template.id}` + `/message-plans/preview-message-plan/${routingConfig.id}/preview-template/${template.id}` ); + expect(link).toHaveAttribute('target', '_blank'); + expect( within(block).queryByTestId('conditional-templates') ).not.toBeInTheDocument(); @@ -423,14 +429,20 @@ describe('letter only', () => { within(conditionalTemplatesList).getByTestId('conditional-template-x1') ).getByTestId('channel-card'); + const name = within(largePrintCard).getByTestId('template-name'); + + expect(name).toHaveTextContent(template.name); + const link = within(largePrintCard).getByRole('link'); - expect(link).toHaveTextContent(template.name); + expect(link).toHaveTextContent('Preview template (opens in a new tab)'); expect(link).toHaveAttribute( 'href', - `/preview-submitted-letter-template/${template.id}` + `/message-plans/preview-message-plan/${routingConfig.id}/preview-template/${template.id}` ); + + expect(link).toHaveAttribute('target', '_blank'); }); it('shows the fallback conditions and card for BSL accessible format', async () => { @@ -468,14 +480,20 @@ describe('letter only', () => { within(conditionalTemplatesList).getByTestId('conditional-template-q4') ).getByTestId('channel-card'); + const name = within(bslCard).getByTestId('template-name'); + + expect(name).toHaveTextContent(template.name); + const link = within(bslCard).getByRole('link'); - expect(link).toHaveTextContent(template.name); + expect(link).toHaveTextContent('Preview template (opens in a new tab)'); expect(link).toHaveAttribute( 'href', - `/preview-submitted-letter-template/${template.id}` + `/message-plans/preview-message-plan/${routingConfig.id}/preview-template/${template.id}` ); + + expect(link).toHaveAttribute('target', '_blank'); }); it('shows the card for the other language templates', async () => { @@ -515,8 +533,10 @@ describe('letter only', () => { ).getByTestId('channel-card'); const links = within(languagesCard).getAllByRole('link'); + const names = within(languagesCard).getAllByTestId('template-name'); expect(links).toHaveLength(2); + expect(names).toHaveLength(2); for (const [ index, @@ -524,12 +544,17 @@ describe('letter only', () => { ] of routingConfig.cascade[0].conditionalTemplates!.entries()) { const template = templates[templateId!]; - expect(links[index]).toHaveTextContent(template.name); + expect(names[index]).toHaveTextContent(template.name); + expect(links[index]).toHaveTextContent( + 'Preview template (opens in a new tab)' + ); expect(links[index]).toHaveAttribute( 'href', - `/preview-submitted-letter-template/${template.id}` + `/message-plans/preview-message-plan/${routingConfig.id}/preview-template/${template.id}` ); + + expect(links[index]).toHaveAttribute('target', '_blank'); } }); }); diff --git a/frontend/src/__tests__/app/message-plans/preview-message-plan/preview-template/page.test.tsx b/frontend/src/__tests__/app/message-plans/preview-message-plan/preview-template/page.test.tsx new file mode 100644 index 000000000..c07309d1b --- /dev/null +++ b/frontend/src/__tests__/app/message-plans/preview-message-plan/preview-template/page.test.tsx @@ -0,0 +1,32 @@ +/** + * @jest-environment node + */ +import PreviewLetterTemplateFromPreviewMessagePlan, { + generateMetadata, +} from '@app/message-plans/preview-message-plan/[routingConfigId]/preview-template/[templateId]/page'; +import { SummaryLetterFromMessagePlan } from '@molecules/SummaryLetterFromMessagePlan/SummaryLetterFromMessagePlan'; + +jest.mock( + '@molecules/SummaryLetterFromMessagePlan/SummaryLetterFromMessagePlan' +); + +describe('PreviewLetterTemplateFromPreviewMessagePlan page', () => { + it('should render SummaryLetterFromMessagePlan with authoring letter validator', async () => { + const props = { + params: Promise.resolve({ + routingConfigId: 'routing-config-id', + templateId: 'template-id', + }), + }; + + const page = await PreviewLetterTemplateFromPreviewMessagePlan(props); + + expect(page).toEqual(); + }); + + it('should have the correct page title', async () => { + expect(await generateMetadata()).toEqual({ + title: 'Preview letter template - NHS Notify', + }); + }); +}); diff --git a/frontend/src/__tests__/app/message-plans/review-and-move-to-production/__snapshots__/page.test.tsx.snap b/frontend/src/__tests__/app/message-plans/review-and-move-to-production/__snapshots__/page.test.tsx.snap index 40a309c19..e9ea3c67c 100644 --- a/frontend/src/__tests__/app/message-plans/review-and-move-to-production/__snapshots__/page.test.tsx.snap +++ b/frontend/src/__tests__/app/message-plans/review-and-move-to-production/__snapshots__/page.test.tsx.snap @@ -52,7 +52,7 @@ exports[`Review and move to production page matches snapshot for full cascade 1` class="nhsuk-button nhsuk-button--secondary" type="button" > - Open all template previews + Open all digital template previews

        - - letter template name - + authoring letter template name

        + + Preview template (opens in a new tab) +
          - - large print letter template name - + large print letter template name

          + + Preview template (opens in a new tab) + @@ -698,12 +704,15 @@ exports[`Review and move to production page matches snapshot for full cascade 1`

          - - British Sign Language letter template name - + British Sign Language letter template name

          + + Preview template (opens in a new tab) + @@ -724,25 +733,31 @@ exports[`Review and move to production page matches snapshot for full cascade 1` Other language letters (optional)

          - - letter template name - + authoring letter template name

          -

          + Preview template (opens in a new tab) + +

          - - letter template name - + authoring letter template name

          + + Preview template (opens in a new tab) + diff --git a/frontend/src/__tests__/app/message-plans/review-and-move-to-production/page.test.tsx b/frontend/src/__tests__/app/message-plans/review-and-move-to-production/page.test.tsx index 23bfd7275..adf61dbb4 100644 --- a/frontend/src/__tests__/app/message-plans/review-and-move-to-production/page.test.tsx +++ b/frontend/src/__tests__/app/message-plans/review-and-move-to-production/page.test.tsx @@ -9,8 +9,8 @@ import { EMAIL_TEMPLATE, LARGE_PRINT_LETTER_TEMPLATE, NHS_APP_TEMPLATE, - PDF_LETTER_TEMPLATE, SMS_TEMPLATE, + AUTHORING_LETTER_TEMPLATE, } from '@testhelpers/helpers'; import { RoutingConfigFactory } from '@testhelpers/routing-config-factory'; import { @@ -67,9 +67,21 @@ const templates: MessagePlanTemplates = { [appTemplateId]: { ...NHS_APP_TEMPLATE, id: appTemplateId }, [emailTemplateId]: { ...EMAIL_TEMPLATE, id: emailTemplateId }, [smsTemplateId]: { ...SMS_TEMPLATE, id: smsTemplateId }, - [letterTemplateId]: { ...PDF_LETTER_TEMPLATE, id: letterTemplateId }, - [kuTemplateId]: { ...PDF_LETTER_TEMPLATE, id: kuTemplateId }, - [sqTemplateId]: { ...PDF_LETTER_TEMPLATE, id: sqTemplateId }, + [letterTemplateId]: { + ...AUTHORING_LETTER_TEMPLATE, + id: letterTemplateId, + templateStatus: 'PROOF_APPROVED', + }, + [kuTemplateId]: { + ...AUTHORING_LETTER_TEMPLATE, + id: kuTemplateId, + templateStatus: 'PROOF_APPROVED', + }, + [sqTemplateId]: { + ...AUTHORING_LETTER_TEMPLATE, + id: sqTemplateId, + templateStatus: 'PROOF_APPROVED', + }, [largePrintTemplateId]: { ...LARGE_PRINT_LETTER_TEMPLATE, id: largePrintTemplateId, @@ -263,7 +275,9 @@ describe('Review and move to production page', () => { await renderPage(routingConfig); expect( - screen.getByRole('button', { name: /open all template previews/i }) + screen.getByRole('button', { + name: /open all digital template previews/i, + }) ).toBeInTheDocument(); }); @@ -282,7 +296,9 @@ describe('Review and move to production page', () => { await renderPage(routingConfig); expect( - screen.queryByRole('button', { name: /open all template previews/i }) + screen.queryByRole('button', { + name: /open all digital template previews/i, + }) ).not.toBeInTheDocument(); }); @@ -309,7 +325,7 @@ describe('Review and move to production page', () => { ).toBeInTheDocument(); }); - it('renders letter template as link', async () => { + it('renders letter templates with a link', async () => { const routingConfig = createRoutingConfig({ cascade: [ { @@ -325,13 +341,16 @@ describe('Review and move to production page', () => { const block = screen.getByTestId('message-plan-block-LETTER'); const templateName = within(block).getByTestId('template-name'); - const link = within(templateName).getByRole('link'); - expect(link).toHaveTextContent(templates[letterTemplateId].name); + expect(templateName).toHaveTextContent(templates[letterTemplateId].name); + + const link = within(block).getByRole('link'); + expect(link).toHaveTextContent('Preview template (opens in a new tab)'); expect(link).toHaveAttribute( 'href', - `/preview-letter-template/${letterTemplateId}` + `/message-plans/review-and-move-to-production/${routingConfig.id}/preview-template/${letterTemplateId}` ); + expect(link).toHaveAttribute('target', '_blank'); }); it('renders fallback conditions between channels', async () => { diff --git a/frontend/src/__tests__/app/message-plans/review-and-move-to-production/preview-template/page.test.tsx b/frontend/src/__tests__/app/message-plans/review-and-move-to-production/preview-template/page.test.tsx new file mode 100644 index 000000000..b2efe15e2 --- /dev/null +++ b/frontend/src/__tests__/app/message-plans/review-and-move-to-production/preview-template/page.test.tsx @@ -0,0 +1,33 @@ +/** + * @jest-environment node + */ +import PreviewLetterTemplateFromReviewAndMoveToProduction, { + generateMetadata, +} from '@app/message-plans/review-and-move-to-production/[routingConfigId]/preview-template/[templateId]/page'; +import { SummaryLetterFromMessagePlan } from '@molecules/SummaryLetterFromMessagePlan/SummaryLetterFromMessagePlan'; + +jest.mock( + '@molecules/SummaryLetterFromMessagePlan/SummaryLetterFromMessagePlan' +); + +describe('PreviewLetterTemplateFromReviewAndMoveToProduction page', () => { + it('should render SummaryLetterFromMessagePlan with authoring letter validator', async () => { + const props = { + params: Promise.resolve({ + routingConfigId: 'routing-config-id', + templateId: 'template-id', + }), + }; + + const page = + await PreviewLetterTemplateFromReviewAndMoveToProduction(props); + + expect(page).toEqual(); + }); + + it('should have the correct page title', async () => { + expect(await generateMetadata()).toEqual({ + title: 'Preview letter template - NHS Notify', + }); + }); +}); diff --git a/frontend/src/__tests__/app/review-and-approve-letter-template/__snapshots__/page.test.tsx.snap b/frontend/src/__tests__/app/review-and-approve-letter-template/__snapshots__/page.test.tsx.snap index 8d1b454d9..074365a3a 100644 --- a/frontend/src/__tests__/app/review-and-approve-letter-template/__snapshots__/page.test.tsx.snap +++ b/frontend/src/__tests__/app/review-and-approve-letter-template/__snapshots__/page.test.tsx.snap @@ -169,7 +169,7 @@ exports[`valid authoring letter template matches snapshot 1`] = `