Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
Show all changes
68 commits
Select commit Hold shift + click to select a range
177486c
CCM-14758: Preview approved letter template
chris-elliott-nhsd Mar 19, 2026
cfe5482
CCM-14758: Preview approved letter template
chris-elliott-nhsd Mar 19, 2026
cc3f138
CCM-14758: Increase routing e2e test timeout
chris-elliott-nhsd Mar 19, 2026
f8ea071
CCM-14758: Review comments
chris-elliott-nhsd Mar 23, 2026
7acb7fe
CCM-14758: Review comments
chris-elliott-nhsd Mar 23, 2026
e577743
CCM-14758: Fix CI
chris-elliott-nhsd Mar 23, 2026
474e2e1
CCM-14758: Review comments
chris-elliott-nhsd Mar 24, 2026
7ec360a
CCM-14758: Fix accessibility tests
chris-elliott-nhsd Mar 24, 2026
0c7e3bc
CCM-14758: Review comments
chris-elliott-nhsd Mar 24, 2026
edd4409
CCM-14758: empty commit
chris-elliott-nhsd Mar 24, 2026
678f6a2
CCM-14758: some feedback
harrim91 Mar 26, 2026
ed63464
CCM-14758: rename test
harrim91 Mar 26, 2026
7bf5583
CCM-14758: add tabs test
harrim91 Mar 27, 2026
dcb92f5
Merge branch 'main' into feature/CCM-14758_approved-letter-template
harrim91 Mar 27, 2026
7cd9d3d
CCM-14758: lockfile
harrim91 Mar 27, 2026
b9a4c43
CCM-14758: lockfile
harrim91 Mar 30, 2026
ef3ac12
Merge branch 'main' into feature/CCM-14758_approved-letter-template
harrim91 Mar 30, 2026
40081f4
CCM-14758: fix test
harrim91 Mar 30, 2026
e5575c9
CCM-14758: pr feedback
harrim91 Mar 30, 2026
9993ea4
CCM-14758: add variant check in pw test
harrim91 Mar 30, 2026
be3956a
wip
alexnuttall Mar 31, 2026
4a7e8ef
Merge remote-tracking branch 'origin/main' into feature/CCM-14768-pre…
alexnuttall Mar 31, 2026
52f1641
wip
alexnuttall Apr 1, 2026
48c8831
wip
alexnuttall Apr 1, 2026
f3acfd5
test refactor, rm locking on new tab previews
alexnuttall Apr 2, 2026
9605866
wip
alexnuttall Apr 2, 2026
9bee5f8
fix routing component test
alexnuttall Apr 2, 2026
6ebee57
Merge remote-tracking branch 'origin/main' into feature/CCM-14768-pre…
alexnuttall Apr 2, 2026
9211c98
coverage
alexnuttall Apr 2, 2026
062af9d
fix a11y test fixtures
alexnuttall Apr 2, 2026
1990537
e2e fix
alexnuttall Apr 2, 2026
30d00da
Merge remote-tracking branch 'origin/main' into feature/CCM-14768-pre…
alexnuttall Apr 2, 2026
7646a61
iframe assertions
alexnuttall Apr 2, 2026
45ab313
test titles
alexnuttall Apr 2, 2026
7163dc9
add renders to fixtures
alexnuttall Apr 2, 2026
b2d849b
Merge remote-tracking branch 'origin/main' into feature/CCM-14768-pre…
alexnuttall Apr 2, 2026
f74db4f
hide learn more
alexnuttall Apr 7, 2026
a72095c
fix passing learn more prop
alexnuttall Apr 7, 2026
c9502b1
ignore non-ip addr
alexnuttall Apr 7, 2026
4b52ede
ignore non-ip addr
alexnuttall Apr 7, 2026
09cf582
add open in new page attr assertions
alexnuttall Apr 7, 2026
84a1348
fix links for other language and accessible
alexnuttall Apr 7, 2026
c8f9178
Merge remote-tracking branch 'origin/main' into feature/CCM-14768-pre…
alexnuttall Apr 7, 2026
37547f8
add missing unit tests
alexnuttall Apr 7, 2026
f483650
Merge remote-tracking branch 'origin/main' into feature/CCM-14768-pre…
alexnuttall Apr 7, 2026
5346b71
fix post merge
alexnuttall Apr 7, 2026
656b831
fix post merge
alexnuttall Apr 7, 2026
a92b8bd
more target blank assertions
alexnuttall Apr 7, 2026
5ed6d09
add missing iframe tests on BSL
alexnuttall Apr 7, 2026
3bbfed9
routing component test fixes
alexnuttall Apr 7, 2026
daf5bb1
dedupe tests post merge, extend e2e
alexnuttall Apr 8, 2026
1719bf6
lockfile
alexnuttall Apr 8, 2026
561846c
rm unnecessary wrapping in link
alexnuttall Apr 8, 2026
2f3ae72
use NHSNotifyBackLink
alexnuttall Apr 8, 2026
5427efa
use lookup object for iframe content
alexnuttall Apr 8, 2026
6b0b77f
split summary server component
alexnuttall Apr 8, 2026
0fe27b0
bump events version
alexnuttall Apr 8, 2026
245d6f0
revert reformatting due to commit hook
alexnuttall Apr 8, 2026
6b20f34
revert reformatting due to commit hook
alexnuttall Apr 8, 2026
26b4eb8
rm pdf letters support from routing code
alexnuttall Apr 8, 2026
e667993
make test fixture PROOF_APPROVED
alexnuttall Apr 8, 2026
d2912a0
Merge remote-tracking branch 'origin/main' into feature/CCM-14768-pre…
alexnuttall Apr 8, 2026
57b51f3
accessibility test fix
alexnuttall Apr 8, 2026
5e570b0
pw tests on missing variants
alexnuttall Apr 9, 2026
4a22f61
unit tests on missing variants
alexnuttall Apr 9, 2026
8bfce13
fmt
alexnuttall Apr 9, 2026
6d40411
Merge branch 'main' into feature/CCM-14768-preview-from-message-plan
alexnuttall Apr 9, 2026
3615af4
Merge branch 'main' into feature/CCM-14768-preview-from-message-plan
alexnuttall Apr 10, 2026
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
2 changes: 2 additions & 0 deletions .gitleaksignore
Original file line number Diff line number Diff line change
Expand Up @@ -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
Original file line number Diff line number Diff line change
@@ -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(
<SummaryChooseLetter
{...props}
validateTemplate={validateBritishSignLanguageLetterTemplate}
redirectUrlOnLockNumberFailure='/message-plans/edit-message-plan/routing-config-id'
/>
);
});

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();
});
});

This file was deleted.

Original file line number Diff line number Diff line change
@@ -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(
<SummaryChooseLetter
{...props}
validateTemplate={validateLargePrintLetterTemplate}
redirectUrlOnLockNumberFailure='/message-plans/edit-message-plan/routing-config-id'
/>
);
});

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();
});
});
Loading
Loading