Skip to content

Commit a65fa99

Browse files
authored
CCM-7649 launch template preview from manage templates page (#218)
1 parent ec9ed05 commit a65fa99

File tree

93 files changed

+4295
-1697
lines changed

Some content is hidden

Large Commits have some content hidden by default. Use the searchbox below for content that may be hidden.

93 files changed

+4295
-1697
lines changed

.gitignore

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -81,3 +81,4 @@ tests/test-team/playwright/.cache/
8181
sandbox_cognito_auth_token.json
8282

8383
frontend/public/testing
84+
.vscode/launch.json

frontend/src/__tests__/app/manage-templates/page.test.tsx

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -3,11 +3,11 @@ import { render, screen } from '@testing-library/react';
33
import ManageTemplatesPage from '@app/manage-templates/page';
44
import content from '@content/content';
55
import { getTemplates } from '@utils/form-actions';
6-
import { Template } from 'nhs-notify-web-template-management-utils/src/types';
76
import {
7+
Template,
88
TemplateStatus,
99
TemplateType,
10-
} from 'nhs-notify-web-template-management-utils/src/enum';
10+
} from 'nhs-notify-web-template-management-utils';
1111

1212
const manageTemplatesContent = content.pages.manageTemplates;
1313

Lines changed: 123 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,123 @@
1+
/**
2+
* @jest-environment node
3+
*/
4+
import ViewSubmittedEmailTemplatePage from '@app/view-submitted-email-template/[templateId]/page';
5+
import { ViewEmailTemplate } from '@molecules/ViewEmailTemplate/ViewEmailTemplate';
6+
import {
7+
SubmittedEmailTemplate,
8+
TemplateType,
9+
TemplateStatus,
10+
} from 'nhs-notify-web-template-management-utils';
11+
import { getTemplate } from '@utils/form-actions';
12+
import { redirect } from 'next/navigation';
13+
14+
jest.mock('@utils/form-actions');
15+
jest.mock('next/navigation');
16+
17+
const redirectMock = jest.mocked(redirect);
18+
const getTemplateMock = jest.mocked(getTemplate);
19+
20+
describe('ViewSubmittedEmailTemplatePage', () => {
21+
beforeEach(jest.resetAllMocks);
22+
23+
it('should load page', async () => {
24+
const state: SubmittedEmailTemplate = {
25+
id: 'template-id',
26+
version: 1,
27+
templateType: TemplateType.EMAIL,
28+
templateStatus: TemplateStatus.SUBMITTED,
29+
name: 'template-name',
30+
subject: 'template-subject-line',
31+
message: 'template-message',
32+
};
33+
34+
getTemplateMock.mockResolvedValueOnce(state);
35+
36+
const page = await ViewSubmittedEmailTemplatePage({
37+
params: {
38+
templateId: 'template-id',
39+
},
40+
});
41+
42+
expect(page).toEqual(<ViewEmailTemplate initialState={state} />);
43+
});
44+
45+
it('should redirect to invalid-template when no templateId is found', async () => {
46+
await ViewSubmittedEmailTemplatePage({
47+
params: {
48+
templateId: 'template-id',
49+
},
50+
});
51+
52+
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
53+
});
54+
55+
test.each([
56+
{
57+
templateType: TemplateType.SMS,
58+
name: 'template-name',
59+
subject: 'template-subject-line',
60+
message: 'template-message',
61+
templateStatus: TemplateStatus.SUBMITTED,
62+
},
63+
{
64+
templateType: TemplateType.NHS_APP,
65+
name: 'template-name',
66+
subject: 'template-subject-line',
67+
message: 'template-message',
68+
templateStatus: TemplateStatus.SUBMITTED,
69+
},
70+
{
71+
templateType: TemplateType.EMAIL,
72+
name: undefined as unknown as string,
73+
subject: 'template-subject-line',
74+
message: 'template-message',
75+
templateStatus: TemplateStatus.SUBMITTED,
76+
},
77+
{
78+
templateType: TemplateType.EMAIL,
79+
name: 'template-name',
80+
subject: undefined as unknown as string,
81+
message: 'template-message',
82+
templateStatus: TemplateStatus.SUBMITTED,
83+
},
84+
{
85+
templateType: TemplateType.EMAIL,
86+
name: 'template-name',
87+
subject: 'template-subject-line',
88+
message: undefined as unknown as string,
89+
templateStatus: TemplateStatus.SUBMITTED,
90+
},
91+
{
92+
templateType: TemplateType.EMAIL,
93+
name: 'template-name',
94+
subject: 'template-subject-line',
95+
message: null as unknown as string,
96+
templateStatus: TemplateStatus.SUBMITTED,
97+
},
98+
{
99+
templateType: TemplateType.EMAIL,
100+
name: 'template-name',
101+
subject: 'template-subject-line',
102+
message: 'template-message',
103+
templateStatus: TemplateStatus.NOT_YET_SUBMITTED,
104+
},
105+
])(
106+
'should redirect to invalid-template when template is $templateType, name is $name, subjectLine is $subject, message is $message, and status is $templateStatus',
107+
async (value) => {
108+
getTemplateMock.mockResolvedValueOnce({
109+
id: 'template-id',
110+
version: 1,
111+
...value,
112+
});
113+
114+
await ViewSubmittedEmailTemplatePage({
115+
params: {
116+
templateId: 'template-id',
117+
},
118+
});
119+
120+
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
121+
}
122+
);
123+
});
Lines changed: 115 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,115 @@
1+
/**
2+
* @jest-environment node
3+
*/
4+
import ViewSubmittedNHSAppTemplatePage from '@app/view-submitted-nhs-app-template/[templateId]/page';
5+
import { ViewNHSAppTemplate } from '@molecules/ViewNHSAppTemplate/ViewNHSAppTemplate';
6+
import {
7+
SubmittedNHSAppTemplate,
8+
TemplateType,
9+
TemplateStatus,
10+
} from 'nhs-notify-web-template-management-utils';
11+
import { getTemplate } from '@utils/form-actions';
12+
import { redirect } from 'next/navigation';
13+
14+
jest.mock('@utils/form-actions');
15+
jest.mock('next/navigation');
16+
17+
const redirectMock = jest.mocked(redirect);
18+
const getTemplateMock = jest.mocked(getTemplate);
19+
20+
describe('ViewSubmittedNHSAppTemplatePage', () => {
21+
beforeEach(jest.resetAllMocks);
22+
23+
it('should load page', async () => {
24+
const state: SubmittedNHSAppTemplate = {
25+
id: 'template-id',
26+
version: 1,
27+
templateType: TemplateType.NHS_APP,
28+
templateStatus: TemplateStatus.SUBMITTED,
29+
name: 'template-name',
30+
message: 'template-message',
31+
};
32+
33+
getTemplateMock.mockResolvedValueOnce(state);
34+
35+
const page = await ViewSubmittedNHSAppTemplatePage({
36+
params: {
37+
templateId: 'template-id',
38+
},
39+
});
40+
41+
expect(page).toEqual(<ViewNHSAppTemplate initialState={state} />);
42+
});
43+
44+
it('should redirect to invalid-template when no template is found', async () => {
45+
await ViewSubmittedNHSAppTemplatePage({
46+
params: {
47+
templateId: 'template-id',
48+
},
49+
});
50+
51+
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
52+
});
53+
54+
test.each([
55+
{
56+
templateType: TemplateType.EMAIL,
57+
name: 'template-name',
58+
message: 'template-message',
59+
templateStatus: TemplateStatus.SUBMITTED,
60+
},
61+
{
62+
templateType: TemplateType.SMS,
63+
name: 'template-name',
64+
message: 'template-message',
65+
templateStatus: TemplateStatus.SUBMITTED,
66+
},
67+
{
68+
templateType: TemplateType.NHS_APP,
69+
name: 'template-name',
70+
message: undefined as unknown as string,
71+
templateStatus: TemplateStatus.SUBMITTED,
72+
},
73+
{
74+
templateType: TemplateType.NHS_APP,
75+
name: undefined as unknown as string,
76+
message: 'template-message',
77+
templateStatus: TemplateStatus.SUBMITTED,
78+
},
79+
{
80+
templateType: TemplateType.NHS_APP,
81+
name: null as unknown as string,
82+
message: null as unknown as string,
83+
templateStatus: TemplateStatus.SUBMITTED,
84+
},
85+
{
86+
templateType: TemplateType.NHS_APP,
87+
name: null as unknown as string,
88+
message: null as unknown as string,
89+
templateStatus: TemplateStatus.SUBMITTED,
90+
},
91+
{
92+
templateType: TemplateType.NHS_APP,
93+
name: 'template-name',
94+
message: 'template-message',
95+
templateStatus: TemplateStatus.NOT_YET_SUBMITTED,
96+
},
97+
])(
98+
'should redirect to invalid-template when template is $templateType, name is $name, message is $message, and status is $templateStatus',
99+
async (value) => {
100+
getTemplateMock.mockResolvedValueOnce({
101+
id: 'template-id',
102+
version: 1,
103+
...value,
104+
});
105+
106+
await ViewSubmittedNHSAppTemplatePage({
107+
params: {
108+
templateId: 'template-id',
109+
},
110+
});
111+
112+
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
113+
}
114+
);
115+
});
Lines changed: 109 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,109 @@
1+
/**
2+
* @jest-environment node
3+
*/
4+
import ViewSubmittedSMSTemplatePage from '@app/view-submitted-text-message-template/[templateId]/page';
5+
import { ViewSMSTemplate } from '@molecules/ViewSMSTemplate/ViewSMSTemplate';
6+
import {
7+
SubmittedSMSTemplate,
8+
TemplateType,
9+
TemplateStatus,
10+
} from 'nhs-notify-web-template-management-utils';
11+
import { getTemplate } from '@utils/form-actions';
12+
import { redirect } from 'next/navigation';
13+
14+
jest.mock('@utils/form-actions');
15+
jest.mock('next/navigation');
16+
17+
const redirectMock = jest.mocked(redirect);
18+
const getTemplateMock = jest.mocked(getTemplate);
19+
20+
describe('ViewSubmittedSMSTemplatePage', () => {
21+
beforeEach(jest.resetAllMocks);
22+
23+
it('should load page', async () => {
24+
const state: SubmittedSMSTemplate = {
25+
id: 'template-id',
26+
version: 1,
27+
templateType: TemplateType.SMS,
28+
templateStatus: TemplateStatus.SUBMITTED,
29+
name: 'template-name',
30+
message: 'template-message',
31+
};
32+
33+
getTemplateMock.mockResolvedValueOnce(state);
34+
35+
const page = await ViewSubmittedSMSTemplatePage({
36+
params: {
37+
templateId: 'template-id',
38+
},
39+
});
40+
41+
expect(page).toEqual(<ViewSMSTemplate initialState={state} />);
42+
});
43+
44+
it('should redirect to invalid-template when no template is found', async () => {
45+
await ViewSubmittedSMSTemplatePage({
46+
params: {
47+
templateId: 'template-id',
48+
},
49+
});
50+
51+
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
52+
});
53+
54+
test.each([
55+
{
56+
templateType: TemplateType.EMAIL,
57+
name: 'template-name',
58+
message: 'template-message',
59+
templateStatus: TemplateStatus.SUBMITTED,
60+
},
61+
{
62+
templateType: TemplateType.NHS_APP,
63+
name: 'template-name',
64+
message: 'template-message',
65+
templateStatus: TemplateStatus.SUBMITTED,
66+
},
67+
{
68+
templateType: TemplateType.SMS,
69+
name: 'template-name',
70+
message: undefined as unknown as string,
71+
templateStatus: TemplateStatus.SUBMITTED,
72+
},
73+
{
74+
templateType: TemplateType.SMS,
75+
name: undefined as unknown as string,
76+
message: 'template-message',
77+
templateStatus: TemplateStatus.SUBMITTED,
78+
},
79+
{
80+
templateType: TemplateType.SMS,
81+
name: null as unknown as string,
82+
message: null as unknown as string,
83+
templateStatus: TemplateStatus.SUBMITTED,
84+
},
85+
{
86+
templateType: TemplateType.SMS,
87+
name: 'template-name',
88+
message: 'template-message',
89+
templateStatus: TemplateStatus.NOT_YET_SUBMITTED,
90+
},
91+
])(
92+
'should redirect to invalid-template when template is $templateType, name is $name, message is $message, and status is $templateStatus',
93+
async (value) => {
94+
getTemplateMock.mockResolvedValueOnce({
95+
id: 'template-id',
96+
version: 1,
97+
...value,
98+
});
99+
100+
await ViewSubmittedSMSTemplatePage({
101+
params: {
102+
templateId: 'template-id',
103+
},
104+
});
105+
106+
expect(redirectMock).toHaveBeenCalledWith('/invalid-template', 'replace');
107+
}
108+
);
109+
});

frontend/src/__tests__/components/forms/EmailTemplateForm/server-action.test.ts

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -104,7 +104,7 @@ describe('CreateEmailTemplate server actions', () => {
104104
});
105105

106106
expect(redirectMock).toHaveBeenCalledWith(
107-
'/preview-email-template/template-id',
107+
'/preview-email-template/template-id?from=edit',
108108
'push'
109109
);
110110
});
@@ -137,7 +137,7 @@ describe('CreateEmailTemplate server actions', () => {
137137
});
138138

139139
expect(redirectMock).toHaveBeenCalledWith(
140-
'/preview-email-template/new-template-id',
140+
'/preview-email-template/new-template-id?from=edit',
141141
'push'
142142
);
143143
});

0 commit comments

Comments
 (0)