1
- import { AxiosTransformer } from 'axios' ;
2
1
import { Bundle , Patient , Practitioner } from 'shared/src/contrib/aidbox' ;
3
2
4
- import { success } from '../../src/libs/remoteData' ;
3
+ import { failure , success } from '../../src/libs/remoteData' ;
5
4
import {
6
5
create ,
7
6
createFHIRResource ,
8
7
get ,
9
8
getFHIRResource ,
10
9
list ,
11
10
getFHIRResources ,
12
- find ,
13
11
findFHIRResource ,
14
12
update ,
15
13
updateFHIRResource ,
@@ -36,12 +34,13 @@ import {
36
34
import { service } from '../../src/services/service' ;
37
35
38
36
jest . mock ( '../../src/services/service' , ( ) => {
39
- return { service : jest . fn ( ( ) => Promise . resolve ( success ( 'data' ) ) ) } ;
37
+ return { service : jest . fn ( ) } ;
40
38
} ) ;
41
39
42
40
describe ( 'Service `fhir`' , ( ) => {
43
41
beforeEach ( ( ) => {
44
42
jest . clearAllMocks ( ) ;
43
+ ( < jest . Mock > service ) . mockImplementation ( ( ) => Promise . resolve ( success ( 'data' ) ) ) ;
45
44
} ) ;
46
45
47
46
describe ( 'method `create`' , ( ) => {
@@ -361,74 +360,75 @@ describe('Service `fhir`', () => {
361
360
} ) ;
362
361
} ) ;
363
362
364
- describe ( 'method `find `' , ( ) => {
365
- test ( 'has correct behavior ' , async ( ) => {
363
+ describe ( 'method `findFHIRResource `' , ( ) => {
364
+ test ( 'returns failure when nothing found ' , async ( ) => {
366
365
const params = { id : 1 } ;
367
366
const resourceType = 'Patient' ;
368
367
369
- const axiosRequestConfig = find ( resourceType , params ) ;
370
- const transformResponse = axiosRequestConfig . transformResponse as AxiosTransformer ;
368
+ ( < jest . Mock > service ) . mockImplementation ( ( ) => Promise . resolve ( success ( { entry : [ ] } ) ) ) ;
371
369
372
- expect ( axiosRequestConfig ) . toEqual (
373
- expect . objectContaining ( {
374
- method : 'GET' ,
375
- url : '/' + resourceType ,
376
- params : {
377
- 'active:not' : [ false ] ,
378
- id : 1 ,
379
- } ,
370
+ const response = await findFHIRResource ( resourceType , params ) ;
371
+ expect ( service ) . toHaveBeenLastCalledWith ( {
372
+ method : 'GET' ,
373
+ url : `/${ resourceType } ` ,
374
+ params : { ...params , 'active:not' : [ false ] } ,
375
+ } ) ;
376
+ expect ( response ) . toEqual (
377
+ failure ( {
378
+ error_description : 'No resources found' ,
379
+ error : 'no_resources_found' ,
380
380
} )
381
381
) ;
382
-
383
- expect ( ( ) => {
384
- const response = '' ;
385
- transformResponse ( response ) ;
386
- } ) . toThrow ( ) ;
387
-
388
- expect ( ( ) => {
389
- const response = '{"entry":[]}' ;
390
- transformResponse ( response ) ;
391
- } ) . toThrow ( ) ;
392
-
393
- const response = '{"entry":[{"resource": "data"}]}' ;
394
- const transformed = transformResponse ( response ) ;
395
-
396
- expect ( transformed ) . toBe ( 'data' ) ;
397
-
398
- expect ( ( ) => {
399
- const response = '{"entry":[{"resource": "a"}, {"resource": "b"}]}' ;
400
- transformResponse ( response ) ;
401
- } ) . toThrow ( ) ;
402
382
} ) ;
403
383
404
- test ( 'receive extra path argument' , async ( ) => {
405
- const params = { id : 1 } ;
384
+ test ( 'returns failure when multiple resources found' , async ( ) => {
385
+ const id = 'patient-id' ;
386
+ const params = { _id : id } ;
406
387
const resourceType = 'Patient' ;
407
- const extraPath = 'extraPath' ;
388
+ const resource = { resourceType, id } ;
389
+ ( < jest . Mock > service ) . mockImplementation ( ( ) =>
390
+ Promise . resolve ( success ( { entry : [ { resource } , { resource } ] } ) )
391
+ ) ;
408
392
409
- expect ( find ( resourceType , params , extraPath ) ) . toEqual (
410
- expect . objectContaining ( {
411
- method : 'GET' ,
412
- url : '/' + resourceType + '/' + extraPath ,
413
- params : {
414
- 'active:not' : [ false ] ,
415
- id : 1 ,
416
- } ,
393
+ const response = await findFHIRResource ( resourceType , params ) ;
394
+ expect ( service ) . toHaveBeenLastCalledWith ( {
395
+ method : 'GET' ,
396
+ url : `/${ resourceType } ` ,
397
+ params : { ...params , 'active:not' : [ false ] } ,
398
+ } ) ;
399
+ expect ( response ) . toEqual (
400
+ failure ( {
401
+ error_description : 'Too many resources found' ,
402
+ error : 'too_many_resources_found' ,
417
403
} )
418
404
) ;
419
405
} ) ;
420
- } ) ;
421
406
422
- describe ( 'method `findFHIRResource`' , ( ) => {
423
- test ( 'has correct behavior' , async ( ) => {
424
- const params = { id : 1 } ;
407
+ test ( 'returns success when exactly one resource found' , async ( ) => {
408
+ const id = 'patient-id' ;
409
+ const params = { _id : id } ;
425
410
const resourceType = 'Patient' ;
411
+ const resource = { resourceType, id } ;
412
+
413
+ ( < jest . Mock > service ) . mockImplementation ( ( ) =>
414
+ Promise . resolve (
415
+ success ( {
416
+ entry : [
417
+ {
418
+ resource,
419
+ } ,
420
+ ] ,
421
+ } )
422
+ )
423
+ ) ;
426
424
427
- await findFHIRResource ( resourceType , params ) ;
428
- const restFindResult = find ( resourceType , params ) ;
429
- delete restFindResult . transformResponse ;
430
-
431
- expect ( service ) . toHaveBeenLastCalledWith ( expect . objectContaining ( restFindResult ) ) ;
425
+ const response = await findFHIRResource ( resourceType , params ) ;
426
+ expect ( service ) . toHaveBeenLastCalledWith ( {
427
+ method : 'GET' ,
428
+ url : `/${ resourceType } ` ,
429
+ params : { ...params , 'active:not' : [ false ] } ,
430
+ } ) ;
431
+ expect ( response ) . toEqual ( success ( resource ) ) ;
432
432
} ) ;
433
433
434
434
test ( 'receive extra path argument' , async ( ) => {
@@ -438,10 +438,11 @@ describe('Service `fhir`', () => {
438
438
439
439
await findFHIRResource ( resourceType , params , extraPath ) ;
440
440
441
- const restFindResult = find ( resourceType , params , extraPath ) ;
442
- delete restFindResult . transformResponse ;
443
-
444
- expect ( service ) . toHaveBeenLastCalledWith ( expect . objectContaining ( restFindResult ) ) ;
441
+ expect ( service ) . toHaveBeenLastCalledWith ( {
442
+ method : 'GET' ,
443
+ url : `/${ resourceType } /${ extraPath } ` ,
444
+ params : { ...params , 'active:not' : [ false ] } ,
445
+ } ) ;
445
446
} ) ;
446
447
} ) ;
447
448
@@ -627,7 +628,10 @@ describe('Service `fhir`', () => {
627
628
628
629
describe ( 'method `extractBundleResources`' , ( ) => {
629
630
test ( "extract empty object when there's not entry property" , ( ) => {
630
- const bundle : Bundle < Patient | Practitioner > = { resourceType : 'Bundle' , type : 'searchset' } ;
631
+ const bundle : Bundle < Patient | Practitioner > = {
632
+ resourceType : 'Bundle' ,
633
+ type : 'searchset' ,
634
+ } ;
631
635
632
636
expect ( extractBundleResources ( bundle ) . Practitioner ) . toEqual ( [ ] ) ;
633
637
expect ( extractBundleResources ( bundle ) . Patient ) . toEqual ( [ ] ) ;
0 commit comments