Skip to content

Commit 7d5dca3

Browse files
authored
Merge pull request #4528 from dfe-analytical-services/EES-4737
EES-4737 show error if get data file replacement plan fails
2 parents 1fea685 + 9305ea1 commit 7d5dca3

2 files changed

Lines changed: 97 additions & 2 deletions

File tree

src/explore-education-statistics-admin/src/pages/release/data/ReleaseDataFileReplacementCompletePage.tsx

Lines changed: 21 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,7 +22,11 @@ const ReleaseDataFileReplacementCompletePage = ({
2222

2323
// Run the replacement plan against itself so we can just get the
2424
// data blocks and footnotes in a convenient way.
25-
const { value: plan, isLoading } = useAsyncRetry(
25+
const {
26+
value: plan,
27+
isLoading,
28+
error,
29+
} = useAsyncRetry(
2630
() => dataReplacementService.getReplacementPlan(releaseId, fileId, fileId),
2731
[releaseId, fileId],
2832
);
@@ -36,6 +40,19 @@ const ReleaseDataFileReplacementCompletePage = ({
3640
},
3741
);
3842

43+
if (error) {
44+
return (
45+
<>
46+
<WarningMessage>
47+
There was a problem with the data replacement.
48+
</WarningMessage>
49+
<Link back className="govuk-!-margin-bottom-6" to={dataFilePath}>
50+
Back
51+
</Link>
52+
</>
53+
);
54+
}
55+
3956
return (
4057
<>
4158
<Link back className="govuk-!-margin-bottom-6" to={dataFilePath}>
@@ -103,7 +120,9 @@ const ReleaseDataFileReplacementCompletePage = ({
103120
},
104121
)}
105122
>
106-
{sanitizeHtml(footnote.content, { allowedTags: [] })}
123+
{sanitizeHtml(footnote.content, {
124+
allowedTags: [],
125+
})}
107126
</Link>
108127
</li>
109128
))}
Lines changed: 76 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,76 @@
1+
import ReleaseDataFileReplacementCompletePage from '@admin/pages/release/data/ReleaseDataFileReplacementCompletePage';
2+
import {
3+
releaseDataFileReplacementCompleteRoute,
4+
ReleaseDataFileRouteParams,
5+
} from '@admin/routes/releaseRoutes';
6+
import _dataReplacementService, {
7+
DataReplacementPlan,
8+
} from '@admin/services/dataReplacementService';
9+
import { render, screen, waitFor } from '@testing-library/react';
10+
import { createMemoryHistory, MemoryHistory } from 'history';
11+
import React from 'react';
12+
import { generatePath, Route, Router } from 'react-router-dom';
13+
14+
jest.mock('@admin/services/dataReplacementService');
15+
16+
const dataReplacementService = _dataReplacementService as jest.Mocked<
17+
typeof _dataReplacementService
18+
>;
19+
20+
describe('ReleaseDataFilePage', () => {
21+
const testValidReplacementPlan: DataReplacementPlan = {
22+
dataBlocks: [],
23+
footnotes: [],
24+
originalSubjectId: 'subject-1',
25+
replacementSubjectId: 'subject-2',
26+
valid: true,
27+
};
28+
29+
test('renders the page when successfully loads the replacement plan', async () => {
30+
dataReplacementService.getReplacementPlan.mockResolvedValue(
31+
testValidReplacementPlan,
32+
);
33+
34+
await renderPage();
35+
36+
expect(
37+
screen.getByRole('heading', { name: 'Data replacement complete' }),
38+
).toBeInTheDocument();
39+
});
40+
41+
test('renders error message if there is an error loading replacement plan', async () => {
42+
dataReplacementService.getReplacementPlan.mockRejectedValue(
43+
new Error('Something went wrong'),
44+
);
45+
46+
await renderPage();
47+
48+
await waitFor(() => {
49+
expect(
50+
screen.getByText('There was a problem with the data replacement.'),
51+
).toBeInTheDocument();
52+
});
53+
});
54+
55+
async function renderPage(history: MemoryHistory = createMemoryHistory()) {
56+
history.push(
57+
generatePath<ReleaseDataFileRouteParams>(
58+
releaseDataFileReplacementCompleteRoute.path,
59+
{
60+
publicationId: 'publication-1',
61+
releaseId: 'release-1',
62+
fileId: 'file-1',
63+
},
64+
),
65+
);
66+
67+
render(
68+
<Router history={history}>
69+
<Route
70+
path={releaseDataFileReplacementCompleteRoute.path}
71+
component={ReleaseDataFileReplacementCompletePage}
72+
/>
73+
</Router>,
74+
);
75+
}
76+
});

0 commit comments

Comments
 (0)