Skip to content

Commit 232e1ec

Browse files
committed
Use new context util function
1 parent 7fe076c commit 232e1ec

File tree

3 files changed

+9
-31
lines changed

3 files changed

+9
-31
lines changed

src/client/BaseClient.js

Lines changed: 1 addition & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -39,6 +39,7 @@ class BaseClient {
3939
});
4040
}
4141

42+
// NOTE: Async because in other clients that extend this, we need async helper functions (ex. auth)
4243
async init() {
4344
return this.initializeExtractors(this.extractorConfig, this.commonExtractorArgs);
4445
}

src/extractors/BaseFHIRExtractor.js

Lines changed: 5 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -1,13 +1,9 @@
11
const { Extractor } = require('./Extractor');
22
const { BaseFHIRModule } = require('../modules');
3-
const { determineVersion, mapFHIRVersions, isBundleEmpty, getBundleResourcesByType } = require('../helpers/fhirUtils');
3+
const { determineVersion, mapFHIRVersions, isBundleEmpty } = require('../helpers/fhirUtils');
4+
const { getPatientFromContext } = require('../helpers/contextUtils');
45
const logger = require('../helpers/logger');
56

6-
function parseContextForPatientId(context) {
7-
const patientInContext = getBundleResourcesByType(context, 'Patient', {}, true);
8-
return patientInContext ? patientInContext.id : undefined;
9-
}
10-
117
class BaseFHIRExtractor extends Extractor {
128
constructor({ baseFhirUrl, requestHeaders, version, resourceType }) {
139
super();
@@ -22,14 +18,9 @@ class BaseFHIRExtractor extends Extractor {
2218

2319
/* eslint-disable class-methods-use-this */
2420
// Use context to get PatientId by default; common need across almost all extractors
25-
async parametrizeArgsForFHIRModule({ context }) {
26-
const idFromContext = parseContextForPatientId(context);
27-
if (idFromContext) {
28-
logger.debug('Patient found in context');
29-
return { patient: idFromContext };
30-
}
31-
32-
throw new Error('BaseFHIRExtractor could not find Patient resource in context. Use an extractor to get a Patient resource first.');
21+
async parametrizeArgsForFHIRModule({ mrn, context }) {
22+
const patient = getPatientFromContext(mrn, context);
23+
return { patient: patient.id };
3324
}
3425
/* eslint-enable class-methods-use-this */
3526

test/extractors/BaseFHIRExtractor.test.js

Lines changed: 3 additions & 17 deletions
Original file line numberDiff line numberDiff line change
@@ -1,11 +1,8 @@
11
const { when } = require('jest-when');
2-
const rewire = require('rewire');
32
const { BaseFHIRExtractor } = require('../../src/extractors');
43
const examplePatientBundle = require('./fixtures/patient-bundle.json');
54
const exampleConditionBundle = require('./fixtures/condition-bundle.json');
65

7-
const BaseFHIRExtractorRewired = rewire('../../src/extractors/BaseFHIRExtractor.js');
8-
96
// Constants for mock tests
107
const MOCK_URL = 'http://localhost';
118
const MOCK_REQUEST_HEADERS = {
@@ -44,33 +41,22 @@ describe('BaseFhirExtractor', () => {
4441
expect(moduleRequestHeadersSpy).toHaveBeenCalledWith(MOCK_REQUEST_HEADERS);
4542
});
4643

47-
const parseContextForPatientId = BaseFHIRExtractorRewired.__get__('parseContextForPatientId');
48-
test('parseContextForPatientId returns undefined when no context is provided', () => {
49-
const emptyValue = parseContextForPatientId({});
50-
expect(emptyValue).toBeUndefined();
51-
});
52-
53-
test('parseContextForPatientId returns the patient ID when one exists on the contextBundle', () => {
54-
const idValue = parseContextForPatientId(MOCK_CONTEXT);
55-
expect(idValue).toEqual(MOCK_CONTEXT.entry[0].resource.id);
56-
});
57-
5844
test('parametrizeArgsForFHIRModule parses data off of context if available', async () => {
5945
baseFHIRModuleSearchSpy.mockClear();
60-
const paramsBasedOnContext = await baseFHIRExtractor.parametrizeArgsForFHIRModule({ context: MOCK_CONTEXT });
46+
const paramsBasedOnContext = await baseFHIRExtractor.parametrizeArgsForFHIRModule({ mrn: MOCK_PATIENT_MRN, context: MOCK_CONTEXT });
6147
expect(baseFHIRModuleSearchSpy).not.toHaveBeenCalled();
6248
expect(paramsBasedOnContext).toHaveProperty('patient');
6349
expect(paramsBasedOnContext.patient).toEqual(MOCK_CONTEXT.entry[0].resource.id);
6450
});
6551

6652
test('parametrizeArgsForFHIRModule throws an error if context has no relevant ID', async () => {
6753
baseFHIRModuleSearchSpy.mockClear();
68-
await expect(baseFHIRExtractor.parametrizeArgsForFHIRModule({})).rejects.toThrowError('BaseFHIRExtractor could not find Patient resource in context.');
54+
await expect(baseFHIRExtractor.parametrizeArgsForFHIRModule({ mrn: MOCK_PATIENT_MRN, context: {} })).rejects.toThrow();
6955
expect(baseFHIRModuleSearchSpy).not.toHaveBeenCalled();
7056
});
7157

7258
test('get should return a condition resource', async () => {
73-
const data = await baseFHIRExtractor.get({ context: MOCK_CONTEXT });
59+
const data = await baseFHIRExtractor.get({ mrn: MOCK_PATIENT_MRN, context: MOCK_CONTEXT });
7460
expect(data.resourceType).toEqual('Bundle');
7561
expect(data.entry).toBeDefined();
7662
expect(data.entry.length).toBeGreaterThan(0);

0 commit comments

Comments
 (0)