def test_get_dates_status_from_arm(self, patient_data, exp_date_assigned, exp_date_on, exp_date_off, exp_status): p = Patient(patient_data) (date_assigned, date_on, date_off, status) = p.get_dates_status_from_arm() self.assertEqual(date_assigned, exp_date_assigned) self.assertEqual(date_on, exp_date_on) self.assertEqual(date_off, exp_date_off) self.assertEqual(status, exp_status)
def test_match(self, patient_type, add_patient_by_type_expected, mock_assignment_record, mock_sum_rpt): sr = mock_sum_rpt.return_value ar = mock_assignment_record.return_value orig_create_assignment_record = Refresher._create_assignment_record orig_determine_patient_classification_by_dates = Refresher._determine_patient_classification_by_dates Refresher._determine_patient_classification_by_dates = \ MagicMock(name='patient_type', return_value=patient_type) Refresher._create_assignment_record = MagicMock(name='_create_assignment_record', return_value=ar) try: patient = Patient(pd.create_patient()) Refresher._match(patient, sr) self.maxDiff = None if add_patient_by_type_expected: sr.add_patient_by_type.assert_called_once_with(patient_type, ar) else: sr.add_patient_by_type.assert_not_called() finally: # Because these are static methods, they must be reassigned to the original function or else # their mocking will persist to other test cases. Refresher._create_assignment_record = orig_create_assignment_record Refresher._determine_patient_classification_by_dates = orig_determine_patient_classification_by_dates
def test_update_summary_report(self, patients, ta_data_for_sum_rpt, expected_sum_rpt_json, expected_ar_patients, mock_ta_accessor, mock_patient_accessor, mock_create_token, mock_logging): self.maxDiff = None ar_records = [] for patient in expected_ar_patients: assmt_rec = Refresher._create_assignment_record(Patient(patient), ta_data_for_sum_rpt['treatmentArmId']) ar_records.append(assmt_rec.get_json()) expected_sum_rpt_json['assignmentRecords'] = SummaryReport._finalize_assignment_records(ar_records) # Set up the mocked PatientAccessor pa_instance = mock_patient_accessor.return_value pa_instance.get_patients_by_treatment_arm_id.return_value = patients # Set up the mocked TreatmentArmsAccessor taa_instance = mock_ta_accessor.return_value taa_instance.update_summary_report = lambda _id, json: self.assertEqual(json, expected_sum_rpt_json) # Set up the mocked create_authentication_token method mock_create_token.return_value = "Bearer my_fake_authentication_token" sum_rpt = SummaryReport(ta_data_for_sum_rpt) r = Refresher() r._update_summary_report(sum_rpt)
def _update_summary_report(self, sum_rpt): """ Update the given summary report with counts and assignment records. :param sum_rpt: The summary report of a treatment arm that requires updating. """ # Get all patients associated with the Treatment Arm of the given Summary Report. # Patients are sorted by patientSequenceNumber (ascending) and patientAssignments.dateConfirmed (descending). # patients = [Patient(p) for p in self.pat_accessor.get_patients_by_treatment_arm_id(sum_rpt.treatmentArmId)] patients = [ Patient(p) for p in self.pat_accessor.get_patients_by_treatment_arm_id( sum_rpt.treatmentArmId, self.token) ] self.logger.info("{cnt} patients returned for '{trtmt_id}".format( cnt=len(patients), trtmt_id=sum_rpt.treatmentArmId)) # Update the summary report object for any patients that meet the criteria. pat_id = [] for pat in patients: # Only match the patient the first time he/she is encountered. (A patient can be assigned to an arm more # than once [different versions], but only the most recent occurrence should be counted.) if pat.patientSequenceNumber not in pat_id: Refresher._match(pat, sum_rpt) pat_id.append(pat.patientSequenceNumber) # Update the summary report in the treatmentArms collection on the database return self.ta_accessor.update_summary_report(sum_rpt._id, sum_rpt.get_json())
def test_constructor_and_get(self): p = Patient(pd.TEST_PATIENT) self.assertEqual(p.diseases, pd.TEST_PATIENT['diseases']) self.assertEqual(p.currentTreatmentArm, pd.TEST_PATIENT['currentTreatmentArm']) self.assertEqual(p.currentPatientStatus, pd.TEST_PATIENT['currentPatientStatus']) self.assertEqual(p.currentStepNumber, pd.TEST_PATIENT['currentStepNumber']) self.assertEqual(p.patientTriggers, pd.TEST_PATIENT['patientTriggers']) self.assertEqual(p.patientAssignments, pd.TEST_PATIENT['patientAssignments']) self.assertEqual(p.patientAssignmentIdx, pd.TEST_PATIENT['patientAssignmentIdx']) self.assertEqual(p.get_patient_assignment_step_number(), pd.DEFAULT_PAT_ASSNMNT_STEP_NUM)
def test_trigger_belongs_to_assignment(self, trigger, assignment_date, exp_result): # assignment_date_ts = pd.datetime_to_timestamp(assignment_date) # result = Patient._trigger_belongs_to_assignment(trigger, assignment_date_ts) result = Patient._trigger_belongs_to_assignment( trigger, assignment_date) self.assertEqual(result, exp_result)
def test_create_assignment_record(self, patient, trtmt_id, ar_constructor_args): exp_ar = AssignmentRecord(*ar_constructor_args) ar = Refresher._create_assignment_record(Patient(patient), trtmt_id) self.assertEqual(ar.patient_sequence_number, exp_ar.patient_sequence_number) self.assertEqual(ar.patient_type, exp_ar.patient_type) self.assertEqual(ar.treatment_arm_version, exp_ar.treatment_arm_version) self.assertEqual(ar.assignment_status_outcome, exp_ar.assignment_status_outcome) self.assertEqual(ar.analysis_id, exp_ar.analysis_id) self.assertEqual(ar.biopsy_seq_num, exp_ar.biopsy_seq_num) self.assertEqual(ar.patient_assmt_idx, exp_ar.patient_assmt_idx) self.assertEqual(ar.date_selected, exp_ar.date_selected) self.assertEqual(ar.date_on_arm, exp_ar.date_on_arm) self.assertEqual(ar.date_off_arm, exp_ar.date_off_arm) self.assertEqual(ar.step_number, exp_ar.step_number) self.assertEqual(ar.diseases, exp_ar.diseases) self.assertEqual(ar.assignment_reason, exp_ar.assignment_reason)
def test_get_assignment_reason(self, treatment_id, treatment_version, exp_reason): p = Patient(pd.TEST_PATIENT) self.assertEqual( p.get_assignment_reason(treatment_id, treatment_version), exp_reason)
def test_find_trigger_by_status(self, status, exp_trigger): p = Patient(pd.TEST_PATIENT) self.assertEqual(p.find_trigger_by_status(status), exp_trigger)
def test_treatment_arm_version(self, patient_json, exp_trtmt_ver): patient = Patient(patient_json) self.assertEqual(patient.treatment_arm_version(), exp_trtmt_ver)
def test_get_patient_assignment_step_number(self, patient_json, exp_step_number): p = Patient(patient_json) step_number = p.get_patient_assignment_step_number() self.assertEqual(step_number, exp_step_number)
def test_get_analysis_id_and_bsn(self, biopsies, exp_analysis_id, exp_biopsy_seq_num): p = Patient(pd.create_patient(biopsies=biopsies)) analysis_id, biopsy_seq_num = p.get_analysis_id_and_bsn() self.assertEqual(analysis_id, exp_analysis_id) self.assertEqual(biopsy_seq_num, exp_biopsy_seq_num)
def test_get_date_assigned(self, patient_data, exp_date): p = Patient(patient_data) assd_date = p.get_date_assigned() self.assertEqual(assd_date, exp_date)