Skip to content
Open
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
Original file line number Diff line number Diff line change
Expand Up @@ -6,9 +6,11 @@ import * as documentTypeModule from '../../../../helpers/utils/documentType';
import { ReviewDetails } from '../../../../types/generic/reviews';
import ReviewDetailsAddMoreChoiceStage from './ReviewDetailsAddMoreChoiceStage';
import { DOCUMENT_TYPE } from '../../../../helpers/utils/documentType';
import useReviewId from '../../../../helpers/hooks/useReviewId';

const mockNavigate = vi.fn();
const mockReviewId = 'test-review-123';
const mockUseReviewId = useReviewId as Mock;
const testData = {
yesText: 'Yes, I have more scanned paper notes to add for this patient',
noText: "No, I don't have anymore scanned paper notes to add for this patient",
Expand All @@ -19,9 +21,9 @@ vi.mock('react-router-dom', async (): Promise<unknown> => {
return {
...actual,
useNavigate: (): Mock => mockNavigate,
useParams: (): { reviewId: string } => ({ reviewId: mockReviewId }),
};
});
vi.mock('../../../../helpers/hooks/useReviewId');

describe('ReviewDetailsAddMoreChoiceStage', () => {
const mockReviewData = {
Expand All @@ -40,6 +42,7 @@ describe('ReviewDetailsAddMoreChoiceStage', () => {
addMoreFilesRadioYesText: testData.yesText,
},
} as any);
mockUseReviewId.mockReturnValue(mockReviewId);
});

afterEach(() => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,10 +1,11 @@
import React, { useState } from 'react';
import { Button, Fieldset, HintText, Radios } from 'nhsuk-react-components';
import { useNavigate, useParams } from 'react-router-dom';
import { useNavigate } from 'react-router-dom';
import { navigateUrlParam, routeChildren } from '../../../../types/generic/routes';
import BackButton from '../../../generic/backButton/BackButton';
import { ReviewDetails } from '../../../../types/generic/reviews';
import { getConfigForDocType } from '../../../../helpers/utils/documentType';
import useReviewId from '../../../../helpers/hooks/useReviewId';

type ReviewDetailsAddMoreChoicePageProps = {
reviewData: ReviewDetails | null;
Expand All @@ -18,7 +19,7 @@ const ReviewDetailsAddMoreChoiceStage: React.FC<ReviewDetailsAddMoreChoicePagePr
const navigate = useNavigate();
const [addMoreChoice, setAddMoreChoice] = useState<AddMoreChoice>('');
const [showError, setShowError] = useState(false);
const { reviewId } = useParams<{ reviewId: string }>();
const reviewId = useReviewId();

if (!reviewData) {
navigate(routeChildren.ADMIN_REVIEW);
Expand Down
Original file line number Diff line number Diff line change
Expand Up @@ -12,6 +12,7 @@ import { ReviewDetails } from '../../../../types/generic/reviews';
import * as getReviewsModule from '../../../../helpers/requests/getReviews';
import { DOCUMENT_TYPE } from '../../../../helpers/utils/documentType';
import { buildPatientDetails } from '../../../../helpers/test/testBuilders';
import useReviewId from '../../../../helpers/hooks/useReviewId';

const mockedUseNavigate = vi.fn();
const mockSetPatientDetails = vi.fn();
Expand Down Expand Up @@ -96,9 +97,11 @@ vi.mock(
vi.mock('../../../../providers/patientProvider/PatientProvider', () => ({
usePatientDetailsContext: (): unknown => mockUsePatientDetailsContext(),
}));
vi.mock('../../../../helpers/hooks/useReviewId');

const mockSetReviewData = vi.fn();
const mockSetDownloadStage = vi.fn();
const mockUseReviewId = useReviewId as Mock;

const createMockReviewData = (
canBeUpdated = true,
Expand Down Expand Up @@ -179,6 +182,7 @@ describe('ReviewDetailsAssessmentStage', () => {
beforeEach(() => {
vi.clearAllMocks();
mockUsePatientDetailsContext.mockReturnValue([null, mockSetPatientDetails]);
mockUseReviewId.mockReturnValue('test-review-id.v1');
});

describe('Rendering', () => {
Expand Down
Original file line number Diff line number Diff line change
@@ -1,6 +1,6 @@
import { Button, ErrorSummary, Fieldset, Radios, Table } from 'nhsuk-react-components';
import { Dispatch, JSX, useRef, useState } from 'react';
import { useNavigate, useParams } from 'react-router-dom';
import { useNavigate } from 'react-router-dom';
import useTitle from '../../../../helpers/hooks/useTitle';
import { getConfigForDocType } from '../../../../helpers/utils/documentType';
import { getPdfObjectUrl } from '../../../../helpers/utils/getPdfObjectUrl';
Expand Down Expand Up @@ -32,6 +32,7 @@ import { AxiosError } from 'axios';
import { errorToParams } from '../../../../helpers/utils/errorToParams';
import PatientSummary, { PatientInfo } from '../../../generic/patientSummary/PatientSummary';
import { CreatedByText } from '../../../generic/createdBy/createdBy';
import useReviewId from '../../../../helpers/hooks/useReviewId';

type FileAction = 'add-all' | 'choose-files' | 'duplicate' | 'accept' | 'reject' | '';

Expand All @@ -55,7 +56,7 @@ const ReviewDetailsAssessmentStage = ({
hasExistingRecordInStorage,
}: ReviewDetailsAssessmentStageProps): JSX.Element => {
useTitle({ pageTitle: 'Admin - Review Assessment' });
const { reviewId } = useParams<{ reviewId: string }>();
const reviewId = useReviewId();
const navigate = useNavigate();

const [selectedFile, setSelectedFile] = useState<SelectedFile | null>(null);
Expand Down
Original file line number Diff line number Diff line change
@@ -1,5 +1,5 @@
import React, { Dispatch, JSX, SetStateAction } from 'react';
import { useNavigate, useParams } from 'react-router-dom';
import { useNavigate } from 'react-router-dom';
import { navigateUrlParam, routeChildren } from '../../../../types/generic/routes';
import { ReviewDetails } from '../../../../types/generic/reviews';
import {
Expand All @@ -9,6 +9,7 @@ import {
import Spinner from '../../../generic/spinner/Spinner';
import DocumentUploadRemoveFilesStage from '../../_documentManagement/documentUploadRemoveFilesStage/DocumentUploadRemoveFilesStage';
import BackButton from '../../../generic/backButton/BackButton';
import useReviewId from '../../../../helpers/hooks/useReviewId';

type ReviewDetailsDocumentRemoveAllStageProps = {
reviewData: ReviewDetails | null;
Expand All @@ -22,7 +23,7 @@ const ReviewDetailsDocumentRemoveAllStage = ({
setDocuments,
}: ReviewDetailsDocumentRemoveAllStageProps): JSX.Element => {
const navigate = useNavigate();
const { reviewId } = useParams<{ reviewId: string }>();
const reviewId = useReviewId();

if (!reviewData) {
return <Spinner status={'Loading'} />;
Expand Down
Original file line number Diff line number Diff line change
@@ -0,0 +1,95 @@
import { render, screen, within } from '@testing-library/react';
import userEvent from '@testing-library/user-event';
import { afterEach, beforeEach, describe, expect, it, vi, Mock } from 'vitest';
import ReviewDetailsDontKnowNHSNumberConfirmStage from './ReviewDetailsDontKnowNHSNumberConfirmStage';
import useReviewId from '../../../../helpers/hooks/useReviewId';

vi.mock('../../../../helpers/utils/documentType');
vi.mock('../../../../helpers/hooks/useReviewId');

const mockReviewId = 'test-review-123';
const mockNavigate = vi.fn();
const mockUseReviewId = useReviewId as Mock;

vi.mock('react-router-dom', async (): Promise<unknown> => {
const actual = await vi.importActual('react-router-dom');
return {
...actual,
useNavigate: (): Mock => mockNavigate,
useParams: (): { reviewId: string } => ({ reviewId: mockReviewId }),
Link: ({ children, to, ...props }: any) => (
<a href={to} {...props}>
{children}
</a>
),
};
});

describe('ReviewDetailsDontKnowNHSNumberConfirmStage', () => {
beforeEach(() => {
vi.clearAllMocks();
import.meta.env.VITE_ENVIRONMENT = 'vitest';
mockUseReviewId.mockReturnValue(mockReviewId);
});

afterEach(() => {
vi.clearAllMocks();
});

describe('Rendering', () => {
it('renders the page content', () => {
render(<ReviewDetailsDontKnowNHSNumberConfirmStage />);

expect(
screen.getByRole('heading', {
name: 'Check this document has downloaded to your computer',
}),
).toBeInTheDocument();

const callout = screen.getByTestId('review-notification');
expect(callout).toBeInTheDocument();
expect(
within(callout).getByText(
/check this document has downloaded to your computer\. When you finish reviewing/i,
),
).toBeInTheDocument();

expect(screen.getByTestId('back-button')).toBeInTheDocument();

expect(
screen.getByRole('button', { name: 'Finish reviewing this document' }),
).toBeInTheDocument();

expect(
screen.getByRole('link', { name: 'Go back to download the document' }),
).toBeInTheDocument();
});
});

describe('Navigation', () => {
it('navigates to the complete patient unknown route when finish reviewing is clicked', async () => {
const user = userEvent.setup();
render(<ReviewDetailsDontKnowNHSNumberConfirmStage />);

await user.click(
screen.getByRole('button', { name: 'Finish reviewing this document' }),
);

expect(mockNavigate).toHaveBeenCalledWith(
`/admin/reviews/${mockReviewId}/complete/patient-unknown`,
undefined,
);
});

it('calls navigate(-1) when the go back link is clicked', async () => {
const user = userEvent.setup();
render(<ReviewDetailsDontKnowNHSNumberConfirmStage />);

await user.click(
screen.getByRole('link', { name: 'Go back to download the document' }),
);

expect(mockNavigate).toHaveBeenCalledWith(-1);
});
});
});
Original file line number Diff line number Diff line change
@@ -0,0 +1,67 @@
import { Button, WarningCallout } from 'nhsuk-react-components';
import { JSX } from 'react';
import { useNavigate } from 'react-router-dom';
import { navigateUrlParam, routeChildren } from '../../../../types/generic/routes';
import BackButton from '../../../generic/backButton/BackButton';
import useReviewId from '../../../../helpers/hooks/useReviewId';

const ReviewDetailsDontKnowNHSNumberConfirmStage = (): JSX.Element => {
const navigate = useNavigate();
const reviewId = useReviewId();

const handleFinishReviewing = async (e: React.MouseEvent<HTMLElement>): Promise<void> => {
if (!reviewId) {
return;
}

navigateUrlParam(
routeChildren.ADMIN_REVIEW_COMPLETE_PATIENT_UNKNOWN,
{ reviewId },
navigate,
);
};

return (
<div className="nhsuk-width-container">
<BackButton dataTestid="back-button" />
<h1 className="nhsuk-heading-l">Check this document has downloaded to your computer</h1>

<WarningCallout data-testid="review-notification">
<WarningCallout.Label>Important</WarningCallout.Label>
<p>
Check this document has downloaded to your computer. When you finish reviewing
this document, it will be removed from your list of documents to review and you
will not be able to access it again.
</p>
</WarningCallout>

<div className="d-flex align-center">
<Button
type="submit"
id="finish-review-button"
className="mr-9 mb-1"
onClick={handleFinishReviewing}
>
Finish reviewing this document
</Button>

<a
href={routeChildren.ADMIN_REVIEW_DONT_KNOW_NHS_NUMBER.replaceAll(
':reviewId',
reviewId!,
)}
id="go-back-download-link"
className="nhsuk-link"
onClick={(e): void => {
e.preventDefault();
navigate(-1);
}}
>
Go back to download the document
</a>
</div>
</div>
);
};

export default ReviewDetailsDontKnowNHSNumberConfirmStage;
Loading
Loading