Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
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
1 change: 1 addition & 0 deletions .gitleaksignore
Original file line number Diff line number Diff line change
Expand Up @@ -7,3 +7,4 @@ b19d88d1d92b0530f065feefcf25d8cdd82a876a:tests/test-team/auth/user.json:jwt:15
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
Original file line number Diff line number Diff line change
@@ -1,9 +1,35 @@
// Jest Snapshot v1, https://goo.gl/fbAQLP

exports[`UploadLetterTemplatePage should render UploadLetterTemplatePage 1`] = `
exports[`UploadLetterTemplatePage should render UploadLetterTemplatePage with campaignId field when campaignIds is not available 1`] = `
<LetterTemplateForm
campaignIds={
[
"campaign-id",
]
}
initialState={
{
"campaignId": "campaign-id",
"language": "en",
"letterType": "x0",
"name": "",
"templateType": "LETTER",
}
}
/>
`;

exports[`UploadLetterTemplatePage should render UploadLetterTemplatePage with campaignIds field when available 1`] = `
<LetterTemplateForm
campaignIds={
[
"campaign-id",
"other-campaign-id",
]
}
initialState={
{
"campaignId": "",
"language": "en",
"letterType": "x0",
"name": "",
Expand Down
75 changes: 69 additions & 6 deletions frontend/src/__tests__/app/upload-letter-template/page.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -23,7 +23,7 @@ describe('UploadLetterTemplatePage', () => {
jest.resetAllMocks();
});

it('should render UploadLetterTemplatePage', async () => {
it('should check client ID and campaign ID', async () => {
mockGetSessionServer.mockResolvedValueOnce({
accessToken: 'mocktoken',
clientId: 'client1',
Expand All @@ -35,28 +35,67 @@ describe('UploadLetterTemplatePage', () => {
},
});

await UploadLetterTemplatePage();

expect(mockGetSessionServer).toHaveBeenCalled();
expect(mockFetchClient).toHaveBeenCalled();
});

it('should render UploadLetterTemplatePage with campaignIds field when available', async () => {
mockGetSessionServer.mockResolvedValueOnce({
accessToken: 'mocktoken',
clientId: 'client1',
});
mockFetchClient.mockResolvedValueOnce({
data: {
campaignIds: ['campaign-id', 'other-campaign-id'],
campaignId: 'campaign-id',
features: {},
},
});

const page = await UploadLetterTemplatePage();

expect(await generateMetadata()).toEqual({ title: pageTitle });
expect(page).toMatchSnapshot();
});

it('should check client ID and campaign ID', async () => {
it('should render UploadLetterTemplatePage with campaignId field when campaignIds is not available', async () => {
mockGetSessionServer.mockResolvedValueOnce({
accessToken: 'mocktoken',
clientId: 'client1',
});
mockFetchClient.mockResolvedValueOnce({
data: {
campaignId: 'campaign2',
campaignIds: undefined,
campaignId: 'campaign-id',
features: {},
},
});

const page = await UploadLetterTemplatePage();

expect(await generateMetadata()).toEqual({ title: pageTitle });
expect(page).toMatchSnapshot();
});

it('should redirect to error page when client configuration is not present', async () => {
const mockRedirect = jest.mocked(redirect);

mockGetSessionServer.mockResolvedValueOnce({
accessToken: 'mocktoken',
clientId: 'client-id',
});
mockFetchClient.mockResolvedValueOnce({
data: null,
});

await UploadLetterTemplatePage();

expect(mockGetSessionServer).toHaveBeenCalled();
expect(mockFetchClient).toHaveBeenCalled();
expect(mockRedirect).toHaveBeenCalledWith(
'/upload-letter-template/client-id-and-campaign-id-required',
RedirectType.replace
);
});

it('should redirect to error page when client ID is not present', async () => {
Expand All @@ -81,7 +120,30 @@ describe('UploadLetterTemplatePage', () => {
);
});

it('should redirect to error page when campaign ID is not present', async () => {
it('should redirect to error page when campaignIds is present and empty', async () => {
const mockRedirect = jest.mocked(redirect);

mockGetSessionServer.mockResolvedValueOnce({
accessToken: 'mocktoken',
clientId: 'client2',
});
mockFetchClient.mockResolvedValueOnce({
data: {
campaignIds: [],
campaignId: 'campaign-id',
features: {},
},
});

await UploadLetterTemplatePage();

expect(mockRedirect).toHaveBeenCalledWith(
'/upload-letter-template/client-id-and-campaign-id-required',
RedirectType.replace
);
});

it('should redirect to error page when neither campaignIds nor campaignId is present', async () => {
const mockRedirect = jest.mocked(redirect);

mockGetSessionServer.mockResolvedValueOnce({
Expand All @@ -90,6 +152,7 @@ describe('UploadLetterTemplatePage', () => {
});
mockFetchClient.mockResolvedValueOnce({
data: {
campaignIds: undefined,
campaignId: undefined,
features: {},
},
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -2,7 +2,7 @@ import { fireEvent, render, screen } from '@testing-library/react';
import { mockDeep } from 'jest-mock-extended';
import {
TemplateFormState,
LetterTemplate,
UploadLetterTemplate,
} from 'nhs-notify-web-template-management-utils';
import { LetterTemplateForm } from '@forms/LetterTemplateForm/LetterTemplateForm';

Expand All @@ -26,12 +26,30 @@ jest.mock('react', () => {
test('renders page with preloaded field values', () => {
const container = render(
<LetterTemplateForm
initialState={mockDeep<TemplateFormState<LetterTemplate>>({
initialState={mockDeep<TemplateFormState<UploadLetterTemplate>>({
campaignId: 'campaign-id',
errorState: undefined,
name: 'template-name',
letterType: 'x1',
language: 'ar',
})}
campaignIds={['campaign-id']}
/>
);
expect(container.asFragment()).toMatchSnapshot();
});

test('renders page with multiple campaign ids', () => {
const container = render(
<LetterTemplateForm
initialState={mockDeep<TemplateFormState<UploadLetterTemplate>>({
campaignId: 'campaign-id',
errorState: undefined,
name: 'template-name',
letterType: 'x1',
language: 'ar',
})}
campaignIds={['campaign-id', 'other-campaign-id']}
/>
);
expect(container.asFragment()).toMatchSnapshot();
Expand All @@ -43,12 +61,14 @@ test('shows right-to-left language warning when language changes', () => {

const container = render(
<LetterTemplateForm
initialState={mockDeep<TemplateFormState<LetterTemplate>>({
initialState={mockDeep<TemplateFormState<UploadLetterTemplate>>({
campaignId: 'campaign-id',
errorState: undefined,
name: 'template-name',
letterType: 'x1',
language: initialLanguage,
})}
campaignIds={['campaign-id']}
/>
);

Expand All @@ -68,12 +88,14 @@ test('hides right-to-left language warning when language changes', () => {

const container = render(
<LetterTemplateForm
initialState={mockDeep<TemplateFormState<LetterTemplate>>({
initialState={mockDeep<TemplateFormState<UploadLetterTemplate>>({
campaignId: 'campaign-id',
errorState: undefined,
name: 'template-name',
letterType: 'x1',
language: initialLanguage,
})}
campaignIds={['campaign-id']}
/>
);

Expand All @@ -90,7 +112,8 @@ test('hides right-to-left language warning when language changes', () => {
test('renders page one error', () => {
const container = render(
<LetterTemplateForm
initialState={mockDeep<TemplateFormState<LetterTemplate>>({
initialState={mockDeep<TemplateFormState<UploadLetterTemplate>>({
campaignId: 'campaign-id',
errorState: {
formErrors: [],
fieldErrors: {
Expand All @@ -101,6 +124,7 @@ test('renders page one error', () => {
letterType: 'x0',
language: 'en',
})}
campaignIds={['campaign-id']}
/>
);
expect(container.asFragment()).toMatchSnapshot();
Expand All @@ -109,7 +133,8 @@ test('renders page one error', () => {
test('renders page with multiple errors', () => {
const container = render(
<LetterTemplateForm
initialState={mockDeep<TemplateFormState<LetterTemplate>>({
initialState={mockDeep<TemplateFormState<UploadLetterTemplate>>({
campaignId: 'campaign-id',
errorState: {
formErrors: [],
fieldErrors: {
Expand All @@ -124,6 +149,7 @@ test('renders page with multiple errors', () => {
letterType: undefined,
language: undefined,
})}
campaignIds={['campaign-id']}
/>
);
expect(container.asFragment()).toMatchSnapshot();
Expand All @@ -132,12 +158,14 @@ test('renders page with multiple errors', () => {
test('Client-side validation triggers', () => {
const container = render(
<LetterTemplateForm
initialState={mockDeep<TemplateFormState<LetterTemplate>>({
initialState={mockDeep<TemplateFormState<UploadLetterTemplate>>({
campaignId: 'campaign-id',
errorState: undefined,
name: undefined,
letterType: undefined,
language: undefined,
})}
campaignIds={['campaign-id']}
/>
);
const submitButton = screen.getByTestId('submit-button');
Expand Down
Loading
Loading