Skip to content

Commit 61fbfca

Browse files
[PRME-170] Move startUpload call into the DocumentUploadingStage (#743)
* [PRME-170] Move start upload trigger to uploading page * [PRME-170] rearrange tests accoding to updated logic * clean up imports --------- Co-authored-by: Adam Whiting <[email protected]>
1 parent e21d3a6 commit 61fbfca

File tree

6 files changed

+35
-27
lines changed

6 files changed

+35
-27
lines changed

app/src/components/blocks/_documentUpload/documentSelectOrderStage/DocumentSelectOrderStage.tsx

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -162,10 +162,10 @@ const DocumentSelectOrderStage = ({ documents, setDocuments, setMergedPdfBlob }:
162162

163163
const submitDocuments = () => {
164164
updateDocumentPositions();
165-
// if (documents.length === 1) {
166-
// navigate(routeChildren.DOCUMENT_UPLOAD_UPLOADING);
167-
// return;
168-
// }
165+
if (documents.length === 1) {
166+
navigate(routeChildren.DOCUMENT_UPLOAD_UPLOADING);
167+
return;
168+
}
169169
navigate(routeChildren.DOCUMENT_UPLOAD_CONFIRMATION);
170170
};
171171

app/src/components/blocks/_documentUpload/documentUploadConfirmStage/DocumentUploadConfirmStage.test.tsx

Lines changed: 4 additions & 6 deletions
Original file line numberDiff line numberDiff line change
@@ -12,7 +12,7 @@ import {
1212
import * as ReactRouter from 'react-router-dom';
1313
import { MemoryHistory, createMemoryHistory } from 'history';
1414
import userEvent from '@testing-library/user-event';
15-
import { routes } from '../../../../types/generic/routes';
15+
import { routeChildren, routes } from '../../../../types/generic/routes';
1616

1717
const mockedUseNavigate = vi.fn();
1818
vi.mock('../../../../helpers/hooks/usePatient');
@@ -34,8 +34,6 @@ let history = createMemoryHistory({
3434
});
3535

3636
describe('DocumentUploadCompleteStage', () => {
37-
const mockStartUpload = vi.fn();
38-
3937
beforeEach(() => {
4038
vi.mocked(usePatient).mockReturnValue(patientDetails);
4139

@@ -54,13 +52,13 @@ describe('DocumentUploadCompleteStage', () => {
5452
});
5553
});
5654

57-
it('should trigger start upload when confirm button is clicked', async () => {
55+
it('should navigate to next screen when confirm button is clicked', async () => {
5856
renderApp(history, 1);
5957

6058
userEvent.click(await screen.findByTestId('confirm-button'));
6159

6260
await waitFor(() => {
63-
expect(mockStartUpload).toHaveBeenCalled();
61+
expect(mockedUseNavigate).toHaveBeenCalledWith(routeChildren.DOCUMENT_UPLOAD_UPLOADING);
6462
});
6563
});
6664

@@ -130,7 +128,7 @@ describe('DocumentUploadCompleteStage', () => {
130128

131129
return render(
132130
<ReactRouter.Router navigator={history} location={history.location}>
133-
<DocumentUploadConfirmStage documents={documents} startUpload={mockStartUpload} />
131+
<DocumentUploadConfirmStage documents={documents} />
134132
</ReactRouter.Router>,
135133
);
136134
};

app/src/components/blocks/_documentUpload/documentUploadConfirmStage/DocumentUploadConfirmStage.tsx

Lines changed: 6 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -3,17 +3,16 @@ import useTitle from '../../../../helpers/hooks/useTitle';
33
import { DOCUMENT_TYPE, UploadDocument } from '../../../../types/pages/UploadDocumentsPage/types';
44
import BackButton from '../../../generic/backButton/BackButton';
55
import { useNavigate } from 'react-router-dom';
6-
import { routes } from '../../../../types/generic/routes';
6+
import { routeChildren, routes } from '../../../../types/generic/routes';
77
import { useState } from 'react';
88
import Pagination from '../../../generic/pagination/Pagination';
99
import PatientSummary, { PatientInfo } from '../../../generic/patientSummary/PatientSummary';
1010

1111
type Props = {
1212
documents: UploadDocument[];
13-
startUpload: () => Promise<void>;
1413
};
1514

16-
const DocumentUploadConfirmStage = ({ documents, startUpload }: Props) => {
15+
const DocumentUploadConfirmStage = ({ documents }: Props) => {
1716
const [currentPage, setCurrentPage] = useState<number>(0);
1817
const navigate = useNavigate();
1918
const pageSize = 10;
@@ -103,7 +102,10 @@ const DocumentUploadConfirmStage = ({ documents, startUpload }: Props) => {
103102
setCurrentPage={setCurrentPage}
104103
/>
105104

106-
<Button data-testid="confirm-button" onClick={startUpload}>
105+
<Button
106+
data-testid="confirm-button"
107+
onClick={() => navigate(routeChildren.DOCUMENT_UPLOAD_UPLOADING)}
108+
>
107109
Confirm file order and upload files
108110
</Button>
109111
</div>

app/src/components/blocks/_documentUpload/documentUploadingStage/DocumentUploadingStage.test.tsx

Lines changed: 10 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -12,6 +12,7 @@ URL.createObjectURL = vi.fn();
1212

1313
describe('DocumentUploadCompleteStage', () => {
1414
let documents: UploadDocument[];
15+
const mockStartUpload = vi.fn();
1516
beforeEach(() => {
1617
import.meta.env.VITE_ENVIRONMENT = 'vitest';
1718
documents = [];
@@ -22,13 +23,21 @@ describe('DocumentUploadCompleteStage', () => {
2223

2324
describe('Rendering', () => {
2425
it('renders', async () => {
25-
render(<DocumentUploadingStage documents={documents} />);
26+
render(<DocumentUploadingStage documents={documents} startUpload={mockStartUpload} />);
2627

2728
await waitFor(async () => {
2829
expect(
2930
screen.queryAllByText('Your documents are uploading')[0],
3031
).toBeInTheDocument();
3132
});
3233
});
34+
35+
it('should trigger start upload when page is loaded', async () => {
36+
render(<DocumentUploadingStage documents={documents} startUpload={mockStartUpload} />);
37+
38+
await waitFor(() => {
39+
expect(mockStartUpload).toHaveBeenCalledTimes(1);
40+
});
41+
});
3342
});
3443
});

app/src/components/blocks/_documentUpload/documentUploadingStage/DocumentUploadingStage.tsx

Lines changed: 7 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,25 @@
11
import { Table, WarningCallout } from 'nhsuk-react-components';
22
import useTitle from '../../../../helpers/hooks/useTitle';
3-
import { getUploadMessage } from '../../../../helpers/utils/uploadDocumentHelpers';
43
import {
54
DOCUMENT_TYPE,
65
DOCUMENT_UPLOAD_STATE,
76
UploadDocument,
87
} from '../../../../types/pages/UploadDocumentsPage/types';
8+
import { useEffect } from 'react';
99

1010
type Props = {
1111
documents: UploadDocument[];
12+
startUpload: () => Promise<void>;
1213
};
1314

14-
const DocumentUploadingStage = ({ documents }: Props) => {
15+
const DocumentUploadingStage = ({ documents, startUpload }: Props) => {
1516
const pageHeader = 'Your documents are uploading';
1617
useTitle({ pageTitle: 'Uploading documents' });
1718

19+
useEffect(() => {
20+
startUpload();
21+
}, []);
22+
1823
return (
1924
<>
2025
<h1 data-testid="arf-upload-uploading-stage-header">{pageHeader}</h1>

app/src/pages/documentUploadPage/DocumentUploadPage.tsx

Lines changed: 4 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -37,8 +37,6 @@ import DocumentUploadCompleteStage from '../../components/blocks/_documentUpload
3737
import DocumentUploadRemoveFilesStage from '../../components/blocks/_documentUpload/documentUploadRemoveFilesStage/DocumentUploadRemoveFilesStage';
3838
import useConfig from '../../helpers/hooks/useConfig';
3939
import DocumentUploadInfectedStage from '../../components/blocks/_documentUpload/documentUploadInfectedStage/DocumentUploadInfectedStage';
40-
import { formatDateWithDashes } from '../../helpers/utils/formatDate';
41-
import { PatientDetails } from '../../types/generic/patientDetails';
4240

4341
function DocumentUploadPage() {
4442
const patientDetails = usePatient();
@@ -152,7 +150,7 @@ function DocumentUploadPage() {
152150
return session;
153151
};
154152

155-
const submitDocuments = async () => {
153+
const startUpload = async () => {
156154
try {
157155
let reducedDocuments = documents;
158156

@@ -194,8 +192,6 @@ function DocumentUploadPage() {
194192

195193
const updateStateInterval = startIntervalTimer(uploadingDocuments);
196194
setIntervalTimer(updateStateInterval);
197-
198-
navigate(routeChildren.DOCUMENT_UPLOAD_UPLOADING);
199195
} catch (e) {
200196
const error = e as AxiosError;
201197
if (error.response?.status === 403) {
@@ -207,6 +203,7 @@ function DocumentUploadPage() {
207203
state: DOCUMENT_UPLOAD_STATE.SUCCEEDED,
208204
})),
209205
);
206+
window.clearInterval(intervalTimer);
210207
navigate(routeChildren.DOCUMENT_UPLOAD_COMPLETED);
211208
} else {
212209
navigate(routes.SERVER_ERROR + errorToParams(error));
@@ -336,15 +333,12 @@ function DocumentUploadPage() {
336333
<Route
337334
path={getLastURLPath(routeChildren.DOCUMENT_UPLOAD_CONFIRMATION) + '/*'}
338335
element={
339-
<DocumentUploadConfirmStage
340-
documents={documents}
341-
startUpload={submitDocuments}
342-
/>
336+
<DocumentUploadConfirmStage documents={documents} />
343337
}
344338
/>
345339
<Route
346340
path={getLastURLPath(routeChildren.DOCUMENT_UPLOAD_UPLOADING) + '/*'}
347-
element={<DocumentUploadingStage documents={documents} />}
341+
element={<DocumentUploadingStage documents={documents} startUpload={startUpload} />}
348342
/>
349343
<Route
350344
path={getLastURLPath(routeChildren.DOCUMENT_UPLOAD_COMPLETED) + '/*'}

0 commit comments

Comments
 (0)