Skip to content

Commit 2a35248

Browse files
Dtphelan1jafeltra
authored andcommitted
updates to CTI tests
1 parent c4ad9c6 commit 2a35248

File tree

3 files changed

+23
-46
lines changed

3 files changed

+23
-46
lines changed

src/extractors/CSVClinicalTrialInformationExtractor.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -22,8 +22,8 @@ class CSVClinicalTrialInformationExtractor extends BaseCSVExtractor {
2222
} = clinicalTrialData;
2323
const { clinicalSiteID, clinicalSiteSystem } = this;
2424

25-
if (!(patientId && clinicalSiteID && trialSubjectID && enrollmentStatus && trialResearchID && trialStatus)) {
26-
throw new Error('Clinical trial missing an expected property: patientId, clinicalSiteID, trialSubjectID, enrollmentStatus, trialResearchID, and trialStatus are required.');
25+
if (!(clinicalSiteID && trialSubjectID && enrollmentStatus && trialResearchID && trialStatus)) {
26+
throw new Error('Clinical trial missing an expected property: clinicalSiteID, trialSubjectID, enrollmentStatus, trialResearchID, and trialStatus are required.');
2727
}
2828

2929
// Need separate data objects for ResearchSubject and ResearchStudy so that they get different resource ids

test/extractors/CSVClinicalTrialInformationExtractor.test.js

Lines changed: 9 additions & 39 deletions
Original file line numberDiff line numberDiff line change
@@ -1,9 +1,10 @@
11
const path = require('path');
2-
const rewire = require('rewire');
32
const _ = require('lodash');
43
const { CSVClinicalTrialInformationExtractor } = require('../../src/extractors');
54
const exampleClinicalTrialInformationResponse = require('./fixtures/csv-clinical-trial-information-module-response.json');
65
const exampleClinicalTrialInformationBundle = require('./fixtures/csv-clinical-trial-information-bundle.json');
6+
const { getPatientFromContext } = require('../../src/helpers/contextUtils');
7+
const MOCK_CONTEXT = require('./fixtures/context-with-patient.json');
78

89
// Constants for mock tests
910
const MOCK_CSV_PATH = path.join(__dirname, 'fixtures/example.csv'); // need a valid path/csv here to avoid parse error
@@ -26,34 +27,30 @@ const csvModuleSpy = jest.spyOn(csvModule, 'get');
2627
csvModuleSpy
2728
.mockReturnValue(exampleClinicalTrialInformationResponse);
2829

29-
const getPatientId = rewire('../../src/extractors/CSVClinicalTrialInformationExtractor.js').__get__('getPatientId');
30-
3130
describe('CSVClinicalTrialInformationExtractor', () => {
3231
describe('joinClinicalTrialData', () => {
3332
test('should join clinical trial data appropriately and throw errors when missing required properties', () => {
3433
const firstClinicalTrialInfoResponse = exampleClinicalTrialInformationResponse[0]; // Each patient will only have one entry per clinical trial
35-
const expectedErrorString = 'Clinical trial missing an expected property: patientId, clinicalSiteID, trialSubjectID, enrollmentStatus, trialResearchID, and trialStatus are required.';
34+
const expectedErrorString = 'Clinical trial missing an expected property: clinicalSiteID, trialSubjectID, enrollmentStatus, trialResearchID, and trialStatus are required.';
35+
const patientId = getPatientFromContext(MOCK_CONTEXT).id;
3636

3737
// Test required properties in CSV throw error
3838
Object.keys(firstClinicalTrialInfoResponse).forEach((key) => {
3939
const clonedData = _.cloneDeep(firstClinicalTrialInfoResponse);
40-
expect(csvClinicalTrialInformationExtractor.joinClinicalTrialData(MOCK_PATIENT_MRN, clonedData)).toEqual(expect.anything());
40+
expect(csvClinicalTrialInformationExtractor.joinClinicalTrialData(clonedData, patientId)).toEqual(expect.anything());
4141
if (key === 'mrn') return; // MRN is not required from CSV
4242
if (key === 'trialResearchSystem') return; // trialResearchSystem is an optional field
4343
delete clonedData[key];
44-
expect(() => csvClinicalTrialInformationExtractor.joinClinicalTrialData(MOCK_PATIENT_MRN, clonedData)).toThrow(new Error(expectedErrorString));
44+
expect(() => csvClinicalTrialInformationExtractor.joinClinicalTrialData(clonedData, patientId)).toThrow(new Error(expectedErrorString));
4545
});
4646

47-
// patientId is required to be passed in
48-
expect(() => csvClinicalTrialInformationExtractor.joinClinicalTrialData(undefined, firstClinicalTrialInfoResponse)).toThrow(new Error(expectedErrorString));
49-
5047
// joinClinicalTrialData should return correct format
51-
expect(csvClinicalTrialInformationExtractor.joinClinicalTrialData(MOCK_PATIENT_MRN, firstClinicalTrialInfoResponse)).toEqual({
48+
expect(csvClinicalTrialInformationExtractor.joinClinicalTrialData(firstClinicalTrialInfoResponse, patientId)).toEqual({
5249
formattedDataSubject: {
5350
enrollmentStatus: firstClinicalTrialInfoResponse.enrollmentStatus,
5451
trialSubjectID: firstClinicalTrialInfoResponse.trialSubjectID,
5552
trialResearchID: firstClinicalTrialInfoResponse.trialResearchID,
56-
patientId: MOCK_PATIENT_MRN,
53+
patientId,
5754
trialResearchSystem: firstClinicalTrialInfoResponse.trialResearchSystem,
5855
},
5956
formattedDataStudy: {
@@ -67,36 +64,9 @@ describe('CSVClinicalTrialInformationExtractor', () => {
6764
});
6865
});
6966

70-
describe('getPatientId', () => {
71-
test('should return patient id when patient resource in context', () => {
72-
const contextPatient = {
73-
resourceType: 'Patient',
74-
id: 'context-patient-id',
75-
};
76-
const contextBundle = {
77-
resourceType: 'Bundle',
78-
type: 'collection',
79-
entry: [
80-
{
81-
fullUrl: 'context-url',
82-
resource: contextPatient,
83-
},
84-
],
85-
};
86-
87-
const patientId = getPatientId(contextBundle);
88-
expect(patientId).toEqual(contextPatient.id);
89-
});
90-
91-
test('getPatientId should return undefined when no patient resource in context', () => {
92-
const patientId = getPatientId({});
93-
expect(patientId).toBeUndefined();
94-
});
95-
});
96-
9767
describe('get', () => {
9868
test('should return a bundle with the correct resources', async () => {
99-
const data = await csvClinicalTrialInformationExtractor.get({ mrn: MOCK_PATIENT_MRN });
69+
const data = await csvClinicalTrialInformationExtractor.get({ mrn: MOCK_PATIENT_MRN, context: MOCK_CONTEXT });
10070

10171
expect(data.resourceType).toEqual('Bundle');
10272
expect(data.type).toEqual('collection');

test/extractors/fixtures/csv-clinical-trial-information-bundle.json

Lines changed: 12 additions & 5 deletions
Original file line numberDiff line numberDiff line change
@@ -3,14 +3,16 @@
33
"type": "collection",
44
"entry": [
55
{
6-
"fullUrl": "urn:uuid:f8acc19f44696eea31532ac9d3b658f1fea317eba9455eddc78de0857220d362",
6+
"fullUrl": "urn:uuid:a9235b06dfe8c24b40b938c7a1265ed3087cf0fa43ef0f11375effbb25ecca25",
77
"resource": {
88
"resourceType": "ResearchSubject",
9-
"id": "f8acc19f44696eea31532ac9d3b658f1fea317eba9455eddc78de0857220d362",
9+
"id": "a9235b06dfe8c24b40b938c7a1265ed3087cf0fa43ef0f11375effbb25ecca25",
1010
"identifier": [
1111
{
1212
"system": "http://example.com/clinicaltrialsubjectids",
13-
"type": { "text": "Clinical Trial Subject ID" },
13+
"type": {
14+
"text": "Clinical Trial Subject ID"
15+
},
1416
"value": "example-subjectId"
1517
}
1618
],
@@ -21,7 +23,10 @@
2123
"value": "example-researchId"
2224
}
2325
},
24-
"individual": { "reference": "urn:uuid:EXAMPLE-MRN", "type": "Patient" }
26+
"individual": {
27+
"reference": "urn:uuid:mrn-1",
28+
"type": "Patient"
29+
}
2530
}
2631
},
2732
{
@@ -42,7 +47,9 @@
4247
"identifier": [
4348
{
4449
"system": "example-system",
45-
"type": { "text": "Clinical Trial Research ID" },
50+
"type": {
51+
"text": "Clinical Trial Research ID"
52+
},
4653
"value": "example-researchId"
4754
}
4855
]

0 commit comments

Comments
 (0)