Skip to content
This repository has been archived by the owner on Jan 9, 2023. It is now read-only.

refactor(imaging): use react query instead of redux to fetch imaging data #2355

Merged
merged 7 commits into from
Sep 2, 2020
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
5 changes: 2 additions & 3 deletions src/__tests__/HospitalRun.test.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -9,7 +9,7 @@ import thunk from 'redux-thunk'

import Dashboard from '../dashboard/Dashboard'
import HospitalRun from '../HospitalRun'
import ViewImagings from '../imagings/ViewImagings'
import ViewImagings from '../imagings/search/ViewImagings'
import Incidents from '../incidents/Incidents'
import ViewLabs from '../labs/ViewLabs'
import ViewMedications from '../medications/ViewMedications'
Expand Down Expand Up @@ -224,11 +224,10 @@ describe('HospitalRun', () => {

describe('/imaging', () => {
it('should render the Imagings component when /imaging is accessed', async () => {
jest.spyOn(ImagingRepository, 'findAll').mockResolvedValue([])
jest.spyOn(ImagingRepository, 'search').mockResolvedValue([])
const store = mockStore({
title: 'test',
user: { user: { id: '123' }, permissions: [Permissions.ViewImagings] },
imagings: { imagings: [] },
breadcrumbs: { breadcrumbs: [] },
components: { sidebarCollapsed: false },
} as any)
Expand Down
32 changes: 32 additions & 0 deletions src/__tests__/imagings/hooks/useImagingRequest.test.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,32 @@
import { renderHook, act } from '@testing-library/react-hooks'

import useImagingRequest from '../../../imagings/hooks/useImagingRequest'
import ImagingRepository from '../../../shared/db/ImagingRepository'
import Imaging from '../../../shared/model/Imaging'
import waitUntilQueryIsSuccessful from '../../test-utils/wait-for-query.util'

describe('useImagingRequest', () => {
it('should get an imaging request by id', async () => {
const expectedImagingId = 'some id'
const expectedImagingRequest = {
id: expectedImagingId,
patient: 'some patient',
visitId: 'visit id',
status: 'requested',
type: 'some type',
} as Imaging
jest.spyOn(ImagingRepository, 'find').mockResolvedValue(expectedImagingRequest)

let actualData: any
await act(async () => {
const renderHookResult = renderHook(() => useImagingRequest(expectedImagingId))
const { result } = renderHookResult
await waitUntilQueryIsSuccessful(renderHookResult)
actualData = result.current.data
})

expect(ImagingRepository.find).toHaveBeenCalledTimes(1)
expect(ImagingRepository.find).toBeCalledWith(expectedImagingId)
expect(actualData).toEqual(expectedImagingRequest)
})
})
43 changes: 43 additions & 0 deletions src/__tests__/imagings/hooks/useImagingSearch.test.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,43 @@
import { act, renderHook } from '@testing-library/react-hooks'

import useImagingSearch from '../../../imagings/hooks/useImagingSearch'
import ImagingSearchRequest from '../../../imagings/model/ImagingSearchRequest'
import ImagingRepository from '../../../shared/db/ImagingRepository'
import SortRequest from '../../../shared/db/SortRequest'
import Imaging from '../../../shared/model/Imaging'
import waitUntilQueryIsSuccessful from '../../test-utils/wait-for-query.util'

const defaultSortRequest: SortRequest = {
sorts: [
{
field: 'requestedOn',
direction: 'desc',
},
],
}

describe('useImagingSearch', () => {
it('it should search imaging requests', async () => {
const expectedSearchRequest: ImagingSearchRequest = {
status: 'completed',
text: 'some search request',
}
const expectedImagingRequests = [{ id: 'some id' }] as Imaging[]
jest.spyOn(ImagingRepository, 'search').mockResolvedValue(expectedImagingRequests)

let actualData: any
await act(async () => {
const renderHookResult = renderHook(() => useImagingSearch(expectedSearchRequest))
const { result } = renderHookResult
await waitUntilQueryIsSuccessful(renderHookResult)
actualData = result.current.data
})

expect(ImagingRepository.search).toHaveBeenCalledTimes(1)
expect(ImagingRepository.search).toBeCalledWith({
...expectedSearchRequest,
defaultSortRequest,
})
expect(actualData).toEqual(expectedImagingRequests)
})
})
55 changes: 55 additions & 0 deletions src/__tests__/imagings/hooks/useRequestImaging.test.tsx
Original file line number Diff line number Diff line change
@@ -0,0 +1,55 @@
/* eslint-disable no-console */

import useRequestImaging from '../../../imagings/hooks/useRequestImaging'
import { ImagingRequestError } from '../../../imagings/util/validate-imaging-request'
import * as imagingRequestValidator from '../../../imagings/util/validate-imaging-request'
import ImagingRepository from '../../../shared/db/ImagingRepository'
import Imaging from '../../../shared/model/Imaging'
import executeMutation from '../../test-utils/use-mutation.util'

describe('useReportIncident', () => {
beforeEach(() => {
jest.restoreAllMocks()
console.error = jest.fn()
})

it('should save the imaging request with correct data', async () => {
const expectedDate = new Date(Date.now())
Date.now = jest.fn().mockReturnValue(expectedDate)
const givenImagingRequest = {
patient: 'some patient',
fullName: 'some full name',
status: 'requested',
type: 'some type',
notes: 'some notes',
visitId: 'some visit id',
} as Imaging

const expectedImagingRequest = {
...givenImagingRequest,
requestedOn: expectedDate.toISOString(),
requestedBy: 'test',
} as Imaging
jest.spyOn(ImagingRepository, 'save').mockResolvedValue(expectedImagingRequest)

await executeMutation(() => useRequestImaging(), givenImagingRequest)
expect(ImagingRepository.save).toHaveBeenCalledTimes(1)
expect(ImagingRepository.save).toBeCalledWith(expectedImagingRequest)
})

it('should throw an error if validation fails', async () => {
const expectedImagingRequestError = {
patient: 'some patient error',
} as ImagingRequestError

jest.spyOn(imagingRequestValidator, 'default').mockReturnValue(expectedImagingRequestError)
jest.spyOn(ImagingRepository, 'save').mockResolvedValue({} as Imaging)

try {
await executeMutation(() => useRequestImaging(), {})
} catch (e) {
expect(e).toEqual(expectedImagingRequestError)
expect(ImagingRepository.save).not.toHaveBeenCalled()
}
})
})
122 changes: 0 additions & 122 deletions src/__tests__/imagings/imaging-slice.test.ts

This file was deleted.

Loading