Skip to content

Commit c3cd961

Browse files
Fix error display after record deletion
1 parent ac3b5ea commit c3cd961

File tree

7 files changed

+69
-16
lines changed

7 files changed

+69
-16
lines changed

app/cypress/e2e/0-ndr-core-tests/gp_user_workflows/view_lloyd_george_is_bsol_workflow.cy.js

Lines changed: 13 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -216,15 +216,9 @@ describe('GP Workflow: View Lloyd George record', () => {
216216
() => {
217217
beforeEachConfiguration(Roles.GP_ADMIN);
218218

219-
let request = 0;
220-
const replies = [
221-
{ statusCode: 200, body: viewLloydGeorgePayload },
222-
{ statusCode: 404 },
223-
];
224-
225-
cy.intercept('GET', '/LloydGeorgeStitch*', (req) => {
226-
req.reply(replies[request]);
227-
request = request + 1;
219+
cy.intercept('GET', '/LloydGeorgeStitch*', {
220+
statusCode: 200,
221+
body: viewLloydGeorgePayload,
228222
}).as('lloydGeorgeStitch');
229223

230224
cy.intercept('GET', '/SearchDocumentReferences*', {
@@ -276,7 +270,17 @@ describe('GP Workflow: View Lloyd George record', () => {
276270
`NHS number: ${formatNhsNumber(searchPatientPayload.nhsNumber)}`,
277271
).should('be.visible');
278272

273+
cy.intercept('GET', '/LloydGeorgeStitch*', {
274+
statusCode: 404,
275+
}).as('lg-reload');
279276
cy.getByTestId('lg-return-btn').click();
277+
cy.wait('@lg-reload');
278+
279+
// Assert
280+
cy.getByTestId('pdf-card').should('include.text', 'Lloyd George record');
281+
cy.getByTestId('no-records-title').should('be.visible');
282+
cy.getByTestId('upload-patient-record-text').should('be.visible');
283+
cy.getByTestId('upload-patient-record-button').should('be.visible');
280284
},
281285
);
282286

app/src/components/blocks/_delete/deleteSubmitStage/DeleteSubmitStage.test.tsx

Lines changed: 22 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -39,7 +39,7 @@ let history: MemoryHistory = createMemoryHistory({
3939
const mockedUseRole = useRole as jest.Mock;
4040
const mockedAxios = axios as jest.Mocked<typeof axios>;
4141
const mockedUsePatient = usePatient as jest.Mock;
42-
42+
const mockResetDocState = jest.fn();
4343
const mockPatientDetails = buildPatientDetails();
4444
const mockLgSearchResult = buildLgSearchResult();
4545

@@ -168,6 +168,26 @@ describe('DeleteSubmitStage', () => {
168168
});
169169
});
170170

171+
it('calls resetDocState when the Yes is selected and Continue clicked', async () => {
172+
mockedUseRole.mockReturnValue(REPOSITORY_ROLE.GP_ADMIN);
173+
174+
mockedAxios.delete.mockReturnValue(Promise.resolve({ status: 200, data: 'Success' }));
175+
176+
renderComponent(DOCUMENT_TYPE.LLOYD_GEORGE, history);
177+
178+
expect(screen.getByRole('radio', { name: 'Yes' })).toBeInTheDocument();
179+
expect(screen.getByRole('button', { name: 'Continue' })).toBeInTheDocument();
180+
181+
act(() => {
182+
userEvent.click(screen.getByRole('radio', { name: 'Yes' }));
183+
userEvent.click(screen.getByRole('button', { name: 'Continue' }));
184+
});
185+
186+
await waitFor(() => {
187+
expect(mockResetDocState).toHaveBeenCalled();
188+
});
189+
});
190+
171191
it('renders DeletionConfirmationStage when the Yes is selected and Continue clicked, when user role is PCSE', async () => {
172192
mockedUseRole.mockReturnValue(REPOSITORY_ROLE.PCSE);
173193

@@ -343,6 +363,7 @@ const renderComponent = (docType: DOCUMENT_TYPE, history: MemoryHistory) => {
343363
numberOfFiles: mockLgSearchResult.number_of_files,
344364
docType,
345365
recordType: docType.toString(),
366+
resetDocState: mockResetDocState,
346367
};
347368

348369
return render(

app/src/components/blocks/_delete/deleteSubmitStage/DeleteSubmitStage.tsx

Lines changed: 17 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -32,6 +32,7 @@ export type Props = {
3232
numberOfFiles: number;
3333
setDownloadStage?: Dispatch<SetStateAction<DOWNLOAD_STAGE>>;
3434
recordType: string;
35+
resetDocState: () => void;
3536
};
3637

3738
enum DELETE_DOCUMENTS_OPTION {
@@ -42,9 +43,10 @@ enum DELETE_DOCUMENTS_OPTION {
4243
type IndexViewProps = {
4344
docType: DOCUMENT_TYPE;
4445
recordType: string;
46+
resetDocState: () => void;
4547
};
4648

47-
const DeleteSubmitStageIndexView = ({ docType, recordType }: IndexViewProps) => {
49+
const DeleteSubmitStageIndexView = ({ docType, recordType, resetDocState }: IndexViewProps) => {
4850
const patientDetails = usePatient();
4951
const role = useRole();
5052
const { register, handleSubmit } = useForm();
@@ -62,6 +64,7 @@ const DeleteSubmitStageIndexView = ({ docType, recordType }: IndexViewProps) =>
6264

6365
const handleYesOption = async () => {
6466
const onSuccess = () => {
67+
resetDocState();
6568
setDeletionStage(SUBMISSION_STATE.SUCCEEDED);
6669
if (userIsGP) {
6770
navigate(routeChildren.LLOYD_GEORGE_DELETE_COMPLETE);
@@ -189,7 +192,13 @@ const DeleteSubmitStageIndexView = ({ docType, recordType }: IndexViewProps) =>
189192
);
190193
};
191194

192-
function DeleteSubmitStage({ docType, numberOfFiles, setDownloadStage, recordType }: Props) {
195+
function DeleteSubmitStage({
196+
docType,
197+
numberOfFiles,
198+
setDownloadStage,
199+
recordType,
200+
resetDocState,
201+
}: Props) {
193202
useTitle({ pageTitle: 'Delete files' });
194203

195204
return (
@@ -198,7 +207,11 @@ function DeleteSubmitStage({ docType, numberOfFiles, setDownloadStage, recordTyp
198207
<Route
199208
index
200209
element={
201-
<DeleteSubmitStageIndexView docType={docType} recordType={recordType} />
210+
<DeleteSubmitStageIndexView
211+
docType={docType}
212+
recordType={recordType}
213+
resetDocState={resetDocState}
214+
/>
202215
}
203216
/>
204217
<Route
@@ -208,6 +221,7 @@ function DeleteSubmitStage({ docType, numberOfFiles, setDownloadStage, recordTyp
208221
docType={docType}
209222
numberOfFiles={numberOfFiles}
210223
recordType={recordType}
224+
resetDocState={resetDocState}
211225
/>
212226
}
213227
></Route>

app/src/components/blocks/_delete/removeRecordStage/RemoveRecordStage.test.tsx

Lines changed: 2 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -25,6 +25,7 @@ const mockUseNavigate = jest.fn();
2525
const mockUsePatient = usePatient as jest.Mock;
2626
const mockPatientDetails = buildPatientDetails();
2727
const mockDownloadStage = jest.fn();
28+
const mockResetDocState = jest.fn();
2829

2930
const testFileName1 = 'John_1';
3031
const testFileName2 = 'John_2';
@@ -178,6 +179,7 @@ const renderComponent = (history: MemoryHistory, numberOfFiles: number, recordTy
178179
numberOfFiles={numberOfFiles}
179180
recordType={recordType}
180181
setDownloadStage={mockDownloadStage}
182+
resetDocState={mockResetDocState}
181183
/>
182184
</ReactRouter.Router>,
183185
);

app/src/components/blocks/_delete/removeRecordStage/RemoveRecordStage.tsx

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -29,9 +29,10 @@ export type Props = {
2929
numberOfFiles: number;
3030
recordType: string;
3131
setDownloadStage: Dispatch<SetStateAction<DOWNLOAD_STAGE>>;
32+
resetDocState: () => void;
3233
};
3334

34-
function RemoveRecordStage({ numberOfFiles, recordType, setDownloadStage }: Props) {
35+
function RemoveRecordStage({ numberOfFiles, recordType, setDownloadStage, resetDocState }: Props) {
3536
useTitle({ pageTitle: 'Remove record' });
3637
const patientDetails = usePatient();
3738
const [submissionState, setSubmissionState] = useState(SUBMISSION_STATE.PENDING);
@@ -191,6 +192,7 @@ function RemoveRecordStage({ numberOfFiles, recordType, setDownloadStage }: Prop
191192
docType={DOCUMENT_TYPE.LLOYD_GEORGE}
192193
numberOfFiles={numberOfFiles}
193194
recordType="Lloyd George"
195+
resetDocState={resetDocState}
194196
/>
195197
}
196198
></Route>
@@ -201,6 +203,7 @@ function RemoveRecordStage({ numberOfFiles, recordType, setDownloadStage }: Prop
201203
docType={DOCUMENT_TYPE.LLOYD_GEORGE}
202204
numberOfFiles={numberOfFiles}
203205
recordType="ARF"
206+
resetDocState={resetDocState}
204207
/>
205208
}
206209
></Route>

app/src/pages/documentSearchResultsPage/DocumentSearchResultsPage.tsx

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -34,8 +34,8 @@ function DocumentSearchResultsPage() {
3434
const baseUrl = useBaseAPIUrl();
3535
const baseHeaders = useBaseAPIHeaders();
3636
const config = useConfig();
37-
3837
const mounted = useRef(false);
38+
3939
useEffect(() => {
4040
const onPageLoad = async () => {
4141
setSubmissionState(SUBMISSION_STATE.PENDING);
@@ -101,6 +101,7 @@ function DocumentSearchResultsPage() {
101101
recordType="ARF"
102102
numberOfFiles={searchResults.length}
103103
docType={DOCUMENT_TYPE.ALL}
104+
resetDocState={() => null}
104105
/>
105106
}
106107
/>

app/src/pages/lloydGeorgeRecordPage/LloydGeorgeRecordPage.tsx

Lines changed: 9 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -40,6 +40,14 @@ function LloydGeorgeRecordPage() {
4040
const [lastUpdated, setLastUpdated] = useState('');
4141
const [cloudFrontUrl, setCloudFrontUrl] = useState('');
4242

43+
const resetDocState = () => {
44+
setNumberOfFiles(0);
45+
setLastUpdated('');
46+
setTotalFileSizeInByte(0);
47+
setCloudFrontUrl('');
48+
setDownloadStage(DOWNLOAD_STAGE.INITIAL);
49+
};
50+
4351
const refreshRecord = async () => {
4452
const onSuccess = (
4553
files_count: number,
@@ -51,7 +59,6 @@ function LloydGeorgeRecordPage() {
5159
setLastUpdated(getFormattedDatetime(new Date(updated_date)));
5260
setDownloadStage(DOWNLOAD_STAGE.SUCCEEDED);
5361
setTotalFileSizeInByte(file_size);
54-
setDownloadStage(DOWNLOAD_STAGE.SUCCEEDED);
5562
setCloudFrontUrl(presign_url);
5663
};
5764

@@ -135,6 +142,7 @@ function LloydGeorgeRecordPage() {
135142
setDownloadStage={setDownloadStage}
136143
numberOfFiles={numberOfFiles}
137144
recordType="Lloyd George"
145+
resetDocState={resetDocState}
138146
/>
139147
}
140148
/>

0 commit comments

Comments
 (0)