class TestSiteVisitSchedule(TestCase): def setUp(self): self.visit_schedule = VisitSchedule( name="visit_schedule", verbose_name="Visit Schedule", offstudy_model="visit_schedule_app.subjectoffstudy", death_report_model="visit_schedule_app.deathreport", ) def test_register_no_schedules(self): site_visit_schedules._registry = {} self.assertRaises(SiteVisitScheduleError, site_visit_schedules.register, self.visit_schedule) def test_already_registered(self): site_visit_schedules._registry = {} schedule = Schedule( name="schedule", onschedule_model="visit_schedule_app.onschedule", offschedule_model="visit_schedule_app.offschedule", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) self.visit_schedule.add_schedule(schedule) site_visit_schedules.register(self.visit_schedule) self.assertRaises( AlreadyRegisteredVisitSchedule, site_visit_schedules.register, self.visit_schedule, )
def test_schedule_bad_crf_model(self): site_visit_schedules._registry = {} visit_schedule = VisitSchedule( name="visit_schedule", verbose_name="Visit Schedule", offstudy_model="visit_schedule_app.subjectoffstudy", death_report_model="visit_schedule_app.deathreport", ) schedule = Schedule( name="schedule", onschedule_model="visit_schedule_app.onschedule", offschedule_model="visit_schedule_app.offschedule", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) crfs = FormsCollection( Crf(show_order=10, model="blah.CrfOne"), Crf(show_order=20, model="blah.CrfTwo"), Crf(show_order=30, model="blah.CrfThree"), ) visit = Visit( code="1000", rbase=relativedelta(days=0), rlower=relativedelta(days=0), rupper=relativedelta(days=6), facility_name="default", crfs=crfs, timepoint=1, ) schedule.add_visit(visit) visit_schedule.add_schedule(schedule) site_visit_schedules.register(visit_schedule) errors = visit_schedule_check(app_configs=django_apps.get_app_configs()) self.assertEqual(len(errors), 1) self.assertEqual("edc_visit_schedule.visits", errors[0].id)
def setUp(self): self.visit_schedule = VisitSchedule( name="visit_schedule", verbose_name="Visit Schedule", offstudy_model="visit_schedule_app.subjectoffstudy", death_report_model="visit_schedule_app.deathreport", )
def setUp(self): v1_consent = Consent( "visit_schedule_app.subjectconsent", version="1", start=Protocol().study_open_datetime, end=Protocol().study_close_datetime, age_min=18, age_is_adult=18, age_max=64, gender=[MALE, FEMALE], ) import_holidays() site_consents.registry = {} site_consents.register(v1_consent) self.visit_schedule = VisitSchedule( name="visit_schedule", verbose_name="Visit Schedule", offstudy_model="visit_schedule_app.subjectoffstudy", death_report_model="visit_schedule_app.deathreport", ) self.schedule = Schedule( name="schedule", onschedule_model="visit_schedule_app.onschedule", offschedule_model="visit_schedule_app.offschedule", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) visit = Visit( code="1000", rbase=relativedelta(days=0), rlower=relativedelta(days=0), rupper=relativedelta(days=6), timepoint=1, ) self.schedule.add_visit(visit) self.visit_schedule.add_schedule(self.schedule) site_visit_schedules._registry = {} site_visit_schedules.register(self.visit_schedule) site_reference_configs.registry = {} site_reference_configs.register_from_visit_schedule(visit_models={ "edc_appointment.appointment": "visit_schedule_app.subjectvisit" }) self.subject_consent = SubjectConsent.objects.create( subject_identifier="12345", consent_datetime=get_utcnow() - relativedelta(seconds=1), dob=date(1995, 1, 1), identity="11111", confirm_identity="11111", ) self.subject_identifier = self.subject_consent.subject_identifier
def test_visit_schedule_repr(self): """Asserts repr evaluates correctly.""" v = VisitSchedule( name="visit_schedule", verbose_name="Visit Schedule", offstudy_model="visit_schedule_app.deathreport", death_report_model="visit_schedule_app.deathreport", ) self.assertTrue(v.__repr__())
def test_visit_schedule_validates(self): visit_schedule = VisitSchedule( name="visit_schedule", verbose_name="Visit Schedule", offstudy_model="visit_schedule_app.subjectoffstudy", death_report_model="visit_schedule_app.deathreport", ) errors = visit_schedule.check() if errors: self.fail("visit_schedule.check() unexpectedly failed")
def setUp(self): import_holidays() v1_consent = Consent( "visit_schedule_app.subjectconsent", version="1", start=Protocol().study_open_datetime, end=Protocol().study_close_datetime, age_min=18, age_is_adult=18, age_max=64, gender=[MALE, FEMALE], ) site_consents.registry = {} site_consents.register(v1_consent) self.visit_schedule = VisitSchedule( name="visit_schedule", verbose_name="Visit Schedule", offstudy_model="visit_schedule_app.subjectoffstudy", death_report_model="visit_schedule_app.deathreport", ) self.schedule = Schedule( name="schedule", onschedule_model="visit_schedule_app.onschedule", offschedule_model="visit_schedule_app.offschedule", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) self.schedule2 = Schedule( name="schedule_two", onschedule_model="visit_schedule_app.onscheduletwo", offschedule_model="visit_schedule_app.offscheduletwo", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) self.schedule3 = Schedule( name="schedule_three", onschedule_model="visit_schedule_app.onschedulethree", offschedule_model="visit_schedule_app.offschedulethree", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", )
def test_visit_schedule_ok(self): site_visit_schedules._registry = {} visit_schedule = VisitSchedule( name="visit_schedule", verbose_name="Visit Schedule", offstudy_model="visit_schedule_app.subjectoffstudy", death_report_model="visit_schedule_app.deathreport", ) schedule = Schedule( name="schedule", onschedule_model="visit_schedule_app.onschedule", offschedule_model="visit_schedule_app.offschedule", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) visit_schedule.add_schedule(schedule) site_visit_schedules.register(visit_schedule) errors = visit_schedule_check(app_configs=django_apps.get_app_configs()) self.assertEqual(len(errors), 0)
def setUp(self): self.visit_schedule = VisitSchedule( name="visit_schedule", verbose_name="Visit Schedule", offstudy_model="visit_schedule_app.subjectoffstudy", death_report_model="visit_schedule_app.deathreport", ) self.schedule = Schedule( name="schedule", onschedule_model="visit_schedule_app.onschedule", offschedule_model="visit_schedule_app.offschedule", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) self.visit_schedule.add_schedule(self.schedule) self.visit_schedule_two = VisitSchedule( name="visit_schedule_two", verbose_name="Visit Schedule Two", offstudy_model="visit_schedule_app.subjectoffstudy", death_report_model="visit_schedule_app.deathreport", ) self.schedule_two = Schedule( name="schedule_two", onschedule_model="visit_schedule_app.onscheduletwo", offschedule_model="visit_schedule_app.offscheduletwo", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) self.visit_schedule_two.add_schedule(self.schedule_two) site_visit_schedules._registry = {} site_visit_schedules.register(self.visit_schedule) site_visit_schedules.register(self.visit_schedule_two)
schedule = Schedule( name="schedule", onschedule_model="visit_schedule_app.onschedule", offschedule_model="visit_schedule_app.offschedule", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) schedule.add_visit(visit0) schedule.add_visit(visit1) schedule.add_visit(visit2) schedule.add_visit(visit3) visit_schedule = VisitSchedule( name="visit_schedule", offstudy_model="visit_schedule_app.subjectoffstudy", death_report_model="visit_schedule_app.deathreport", ) visit_schedule.add_schedule(schedule) # visit_schedule2 schedule2 = Schedule( name="schedule2", onschedule_model="visit_schedule_app.onschedule2", offschedule_model="visit_schedule_app.offschedule2", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) schedule2.add_visit(visit3)
visit3 = Visit( code="4000", title="Day 4", timepoint=3, rbase=relativedelta(days=3), rlower=relativedelta(days=0), rupper=relativedelta(days=6), crfs=crfs, ) schedule = Schedule( name="schedule", onschedule_model="visit_schedule_app.onschedule", offschedule_model="visit_schedule_app.offschedule", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) schedule.add_visit(visit0) schedule.add_visit(visit1) schedule.add_visit(visit2) schedule.add_visit(visit3) visit_schedule = VisitSchedule( name="visit_schedule", offstudy_model="visit_schedule_app.subjectoffstudy", death_report_model="visit_schedule_app.deathreport", ) visit_schedule.add_schedule(schedule)
def setUp(self): v1_consent = Consent( "visit_schedule_app.subjectconsent", version="1", start=Protocol().study_open_datetime, end=Protocol().study_close_datetime, age_min=18, age_is_adult=18, age_max=64, gender=[MALE, FEMALE], ) site_consents.registry = {} site_consents.register(v1_consent) site_visit_schedules._registry = {} self.visit_schedule = VisitSchedule( name="visit_schedule", verbose_name="Visit Schedule", offstudy_model="visit_schedule_app.SubjectOffstudy", death_report_model="visit_schedule_app.DeathReport", ) self.schedule = Schedule( name="schedule", onschedule_model="visit_schedule_app.OnSchedule", offschedule_model="visit_schedule_app.OffSchedule", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) self.schedule3 = Schedule( name="schedule_three", onschedule_model="visit_schedule_app.OnScheduleThree", offschedule_model="visit_schedule_app.OffScheduleThree", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) self.visit_schedule.add_schedule(self.schedule) self.visit_schedule.add_schedule(self.schedule3) site_visit_schedules.register(self.visit_schedule) self.visit_schedule_two = VisitSchedule( name="visit_schedule_two", verbose_name="Visit Schedule Two", offstudy_model="visit_schedule_app.SubjectOffstudy", death_report_model="visit_schedule_app.DeathReport", ) self.schedule_two_1 = Schedule( name="schedule_two", onschedule_model="visit_schedule_app.OnScheduleTwo", offschedule_model="visit_schedule_app.OffScheduleTwo", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) self.schedule_two_2 = Schedule( name="schedule_four", onschedule_model="visit_schedule_app.OnScheduleFour", offschedule_model="visit_schedule_app.OffScheduleFour", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) self.visit_schedule_two.add_schedule(self.schedule_two_1) self.visit_schedule_two.add_schedule(self.schedule_two_2) site_visit_schedules.register(self.visit_schedule_two) self.subject_identifier = "111111" SubjectConsent.objects.create( subject_identifier=self.subject_identifier)
class TestVisitSchedule3(SiteTestCaseMixin, TestCase): def setUp(self): v1_consent = Consent( "visit_schedule_app.subjectconsent", version="1", start=Protocol().study_open_datetime, end=Protocol().study_close_datetime, age_min=18, age_is_adult=18, age_max=64, gender=[MALE, FEMALE], ) import_holidays() site_consents.registry = {} site_consents.register(v1_consent) self.visit_schedule = VisitSchedule( name="visit_schedule", verbose_name="Visit Schedule", offstudy_model="visit_schedule_app.subjectoffstudy", death_report_model="visit_schedule_app.deathreport", ) self.schedule = Schedule( name="schedule", onschedule_model="visit_schedule_app.onschedule", offschedule_model="visit_schedule_app.offschedule", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) visit = Visit( code="1000", rbase=relativedelta(days=0), rlower=relativedelta(days=0), rupper=relativedelta(days=6), timepoint=1, ) self.schedule.add_visit(visit) self.visit_schedule.add_schedule(self.schedule) site_visit_schedules._registry = {} site_visit_schedules.register(self.visit_schedule) site_reference_configs.registry = {} site_reference_configs.register_from_visit_schedule(visit_models={ "edc_appointment.appointment": "visit_schedule_app.subjectvisit" }) self.subject_consent = SubjectConsent.objects.create( subject_identifier="12345", consent_datetime=get_utcnow() - relativedelta(seconds=1), dob=date(1995, 1, 1), identity="11111", confirm_identity="11111", ) self.subject_identifier = self.subject_consent.subject_identifier def test_put_on_schedule_creates_history(self): self.schedule.put_on_schedule( subject_identifier=self.subject_identifier, onschedule_datetime=get_utcnow()) self.assertEqual( SubjectScheduleHistory.objects.filter( subject_identifier=self.subject_identifier).count(), 1, ) def test_onschedule_creates_history(self): onschedule_model_obj = OnSchedule.objects.create( subject_identifier=self.subject_identifier, onschedule_datetime=get_utcnow()) self.assertEqual( SubjectScheduleHistory.objects.filter( subject_identifier=self.subject_identifier).count(), 1, ) history_obj = SubjectScheduleHistory.objects.get( subject_identifier=self.subject_identifier) self.assertIsNone(history_obj.__dict__.get("offschedule_datetime")) self.assertEqual( history_obj.__dict__.get("onschedule_datetime"), onschedule_model_obj.onschedule_datetime, ) self.assertEqual(history_obj.__dict__.get("schedule_status"), ON_SCHEDULE) def test_can_create_offschedule_with_onschedule(self): # signal puts on schedule OnSchedule.objects.create(subject_identifier=self.subject_identifier, onschedule_datetime=get_utcnow()) try: OffSchedule.objects.create( subject_identifier=self.subject_identifier, offschedule_datetime=get_utcnow(), ) except Exception as e: self.fail(f"Exception unexpectedly raised. Got {e}.") def test_creates_appointments(self): # signal puts on schedule onschedule_datetime = get_utcnow() - relativedelta(years=4) OnSchedule.objects.create( subject_identifier=self.subject_identifier, onschedule_datetime=onschedule_datetime, ) self.assertGreater(Appointment.objects.all().count(), 0) def test_creates_appointments_starting_with_onschedule_datetime(self): """Will pass as long as this is not a holiday""" onschedule_datetime = datetime(2017, 7, 19, 15, 29, 44, 903192, tzinfo=tzutc()) _, schedule = site_visit_schedules.get_by_onschedule_model( "visit_schedule_app.onschedule") schedule.put_on_schedule( subject_identifier=self.subject_identifier, onschedule_datetime=onschedule_datetime, ) appointment = Appointment.objects.all().order_by( "appt_datetime").first() self.assertEqual(appointment.appt_datetime, onschedule_datetime) def test_cannot_create_offschedule_without_onschedule(self): self.assertEqual( OnSchedule.objects.filter( subject_identifier=self.subject_identifier).count(), 0, ) self.assertRaises( NotOnScheduleError, OffSchedule.objects.create, subject_identifier=self.subject_identifier, ) def test_cannot_create_offschedule_before_onschedule(self): onschedule_datetime = get_utcnow() - relativedelta(years=4) OnSchedule.objects.create( subject_identifier=self.subject_identifier, onschedule_datetime=onschedule_datetime, ) self.assertRaises( InvalidOffscheduleDate, OffSchedule.objects.create, subject_identifier=self.subject_identifier, offschedule_datetime=onschedule_datetime - relativedelta(months=2), ) def test_cannot_create_offschedule_before_last_visit(self): onschedule_datetime = get_utcnow() - relativedelta(years=4) _, schedule = site_visit_schedules.get_by_onschedule_model( "visit_schedule_app.onschedule") schedule.put_on_schedule( subject_identifier=self.subject_identifier, onschedule_datetime=onschedule_datetime, ) appointments = Appointment.objects.all() SubjectVisit.objects.create( appointment=appointments[0], subject_identifier=self.subject_identifier, report_datetime=appointments[0].appt_datetime, reason=SCHEDULED, ) self.assertRaises( InvalidOffscheduleDate, schedule.take_off_schedule, subject_identifier=self.subject_identifier, offschedule_datetime=appointments[0].appt_datetime - relativedelta(days=1), ) def test_cannot_put_on_schedule_if_visit_schedule_not_registered_subject( self): onschedule_datetime = get_utcnow() - relativedelta(years=4) _, schedule = site_visit_schedules.get_by_onschedule_model( "visit_schedule_app.onschedule") RegisteredSubject.objects.all().delete() self.assertRaises( UnknownSubjectError, schedule.put_on_schedule, subject_identifier=self.subject_identifier, onschedule_datetime=onschedule_datetime, ) def test_cannot_put_on_schedule_if_visit_schedule_not_consented(self): onschedule_datetime = get_utcnow() - relativedelta(years=4) _, schedule = site_visit_schedules.get_by_onschedule_model( "visit_schedule_app.onschedule") SubjectConsent.objects.all().delete() self.assertRaises( NotConsentedError, schedule.put_on_schedule, subject_identifier=self.subject_identifier, onschedule_datetime=onschedule_datetime, ) def test_cannot_put_on_schedule_if_schedule_not_added(self): self.assertRaises(SiteVisitScheduleError, OnScheduleThree.objects.create)
class TestVisitSchedule2(SiteTestCaseMixin, TestCase): def setUp(self): import_holidays() v1_consent = Consent( "visit_schedule_app.subjectconsent", version="1", start=Protocol().study_open_datetime, end=Protocol().study_close_datetime, age_min=18, age_is_adult=18, age_max=64, gender=[MALE, FEMALE], ) site_consents.registry = {} site_consents.register(v1_consent) self.visit_schedule = VisitSchedule( name="visit_schedule", verbose_name="Visit Schedule", offstudy_model="visit_schedule_app.subjectoffstudy", death_report_model="visit_schedule_app.deathreport", ) self.schedule = Schedule( name="schedule", onschedule_model="visit_schedule_app.onschedule", offschedule_model="visit_schedule_app.offschedule", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) self.schedule2 = Schedule( name="schedule_two", onschedule_model="visit_schedule_app.onscheduletwo", offschedule_model="visit_schedule_app.offscheduletwo", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) self.schedule3 = Schedule( name="schedule_three", onschedule_model="visit_schedule_app.onschedulethree", offschedule_model="visit_schedule_app.offschedulethree", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) def test_visit_schedule_add_schedule(self): try: self.visit_schedule.add_schedule(self.schedule) except AlreadyRegisteredSchedule: self.fail("AlreadyRegisteredSchedule unexpectedly raised.") def test_visit_schedule_add_schedule_invalid_appointment_model(self): self.assertRaises( AttributeError, Schedule, name="schedule_bad", onschedule_model="visit_schedule_app.onschedule", offschedule_model="visit_schedule_app.offschedule", appointment_model=None, consent_model="visit_schedule_app.subjectconsent", ) def test_visit_schedule_add_schedule_with_appointment_model(self): self.visit_schedule.add_schedule(self.schedule3) for schedule in self.visit_schedule.schedules.values(): self.assertEqual(schedule.appointment_model, "edc_appointment.appointment") def test_visit_already_added_to_schedule(self): self.visit_schedule.add_schedule(self.schedule) self.assertRaises(AlreadyRegisteredSchedule, self.visit_schedule.add_schedule, self.schedule) def test_visit_schedule_get_schedules(self): self.visit_schedule.add_schedule(self.schedule) self.assertIn(self.schedule, self.visit_schedule.schedules.values()) self.visit_schedule.add_schedule(self.schedule3) self.assertIn(self.schedule3, self.visit_schedule.schedules.values()) def test_crfs_unique_show_order(self): self.assertRaises( FormsCollectionError, FormsCollection, Crf(show_order=10, model="edc_example.CrfOne"), Crf(show_order=20, model="edc_example.CrfTwo"), Crf(show_order=20, model="edc_example.CrfThree"), )
try: map_area = site_mappers.current_map_area except AttributeError as e: sys.stdout.write( style.ERROR( ' * ERROR: visit schedule requires the current map area. ' 'Either the site mapper is not set or the current map area ' 'is not a valid \'community\'.\n Got {} ({})\n'.format( site_mappers.current_map_area, str(e)))) visit_schedule_bhs = VisitSchedule( name='visit_schedule_bhs', verbose_name='BCPP Baseline Survey', app_label=app_label, enrollment_model=f'{app_label}.enrollmentbhs', disenrollment_model=f'{app_label}.disenrollmentbhs', visit_model=f'{app_label}.subjectvisit', offstudy_model=f'{app_label}.subjectoffstudy', previous_visit_schedule=None, ) visit_schedule_bhs.add_schedule(bhs_schedule) visit_schedule_ahs = VisitSchedule( name='visit_schedule_ahs', verbose_name='BCPP Annual Surveys', app_label=app_label, enrollment_model=f'{app_label}.enrollmentahs', disenrollment_model=f'{app_label}.disenrollmentahs', visit_model=f'{app_label}.subjectvisit', offstudy_model=f'{app_label}.subjectoffstudy', previous_visit_schedule=visit_schedule_bhs,
class TestVisitSchedule4(SiteTestCaseMixin, TestCase): def setUp(self): v1_consent = Consent( "visit_schedule_app.subjectconsent", version="1", start=Protocol().study_open_datetime, end=Protocol().study_close_datetime, age_min=18, age_is_adult=18, age_max=64, gender=[MALE, FEMALE], ) import_holidays() site_consents.registry = {} site_consents.register(v1_consent) self.visit_schedule = VisitSchedule( name="visit_schedule", verbose_name="Visit Schedule", offstudy_model="visit_schedule_app.subjectoffstudy", death_report_model="visit_schedule_app.deathreport", ) self.schedule = Schedule( name="schedule", onschedule_model="visit_schedule_app.onschedule", offschedule_model="visit_schedule_app.offschedule", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) visit = Visit( code="1000", rbase=relativedelta(days=0), rlower=relativedelta(days=0), rupper=relativedelta(days=6), timepoint=1, ) self.schedule.add_visit(visit) visit = Visit( code="1010", rbase=relativedelta(days=28), rlower=relativedelta(days=0), rupper=relativedelta(days=6), timepoint=2, ) self.schedule.add_visit(visit) self.visit_schedule.add_schedule(self.schedule) site_visit_schedules._registry = {} site_visit_schedules.register(self.visit_schedule) site_reference_configs.registry = {} site_reference_configs.register_from_visit_schedule(visit_models={ "edc_appointment.appointment": "visit_schedule_app.subjectvisit" }) self.subject_consent = SubjectConsent.objects.create( subject_identifier="12345", consent_datetime=get_utcnow() - relativedelta(seconds=1), dob=date(1995, 1, 1), identity="11111", confirm_identity="11111", ) self.subject_identifier = self.subject_consent.subject_identifier onschedule_datetime = get_utcnow() - relativedelta(years=4) _, schedule = site_visit_schedules.get_by_onschedule_model( "visit_schedule_app.onschedule") schedule.put_on_schedule( subject_identifier=self.subject_identifier, onschedule_datetime=onschedule_datetime, ) self.appointments = Appointment.objects.all() def test_is_baseline(self): subject_visit_0 = SubjectVisit.objects.create( appointment=self.appointments[0], subject_identifier=self.subject_identifier, report_datetime=self.appointments[0].appt_datetime, reason=SCHEDULED, ) subject_visit_1 = SubjectVisit.objects.create( appointment=self.appointments[1], subject_identifier=self.subject_identifier, report_datetime=self.appointments[1].appt_datetime, reason=SCHEDULED, ) self.assertTrue(is_baseline(subject_visit_0)) self.assertFalse(is_baseline(subject_visit_1))
class TestViewMixin(SiteTestCaseMixin, TestCase): def setUp(self): v1_consent = Consent( "visit_schedule_app.subjectconsent", version="1", start=Protocol().study_open_datetime, end=Protocol().study_close_datetime, age_min=18, age_is_adult=18, age_max=64, gender=[MALE, FEMALE], ) site_consents.registry = {} site_consents.register(v1_consent) self.visit_schedule = VisitSchedule( name="visit_schedule", verbose_name="Visit Schedule", offstudy_model="visit_schedule_app.SubjectOffstudy", death_report_model="visit_schedule_app.DeathReport", ) self.schedule = Schedule( name="schedule", onschedule_model="visit_schedule_app.OnSchedule", offschedule_model="visit_schedule_app.OffSchedule", consent_model="visit_schedule_app.subjectconsent", appointment_model="edc_appointment.appointment", ) self.schedule3 = Schedule( name="schedule_three", onschedule_model="visit_schedule_app.OnScheduleThree", offschedule_model="visit_schedule_app.OffScheduleThree", consent_model="visit_schedule_app.subjectconsent", appointment_model="edc_appointment.appointment", ) self.visit_schedule.add_schedule(self.schedule) self.visit_schedule.add_schedule(self.schedule3) site_visit_schedules._registry = {} site_visit_schedules.register(self.visit_schedule) self.subject_identifier = "12345" self.view = MyView() self.view.kwargs = dict(subject_identifier=self.subject_identifier) self.view.subject_identifier = self.subject_identifier self.view.request = RequestFactory() self.view.request.META = {"HTTP_CLIENT_IP": "1.1.1.1"} self.view_current = MyViewCurrent() self.view_current.kwargs = dict( subject_identifier=self.subject_identifier) self.view_current.subject_identifier = self.subject_identifier self.view_current.request = RequestFactory() self.view_current.request.META = {"HTTP_CLIENT_IP": "1.1.1.1"} self.subject_consent = SubjectConsent.objects.create( subject_identifier="12345", consent_datetime=get_utcnow() - relativedelta(seconds=1), dob=date(1995, 1, 1), identity="11111", confirm_identity="11111", ) def test_context(self): context = self.view.get_context_data() self.assertIn("visit_schedules", context) self.assertIn("onschedule_models", context) def test_context_not_on_schedule(self): context = self.view.get_context_data() self.assertEqual(context.get("visit_schedules"), {}) self.assertEqual(context.get("onschedule_models"), []) def test_context_on_schedule(self): obj = OnSchedule.objects.create( subject_identifier=self.subject_identifier) context = self.view.get_context_data() self.assertEqual( context.get("visit_schedules"), {self.visit_schedule.name: self.visit_schedule}, ) self.assertEqual(context.get("onschedule_models"), [obj]) def test_context_enrolled_current(self): obj = OnSchedule.objects.create( subject_identifier=self.subject_identifier) context = self.view_current.get_context_data() self.assertEqual(context.get("current_onschedule_model"), obj) context.get("current_onschedule_model")
class TestSiteVisitSchedule1(TestCase): def setUp(self): self.visit_schedule = VisitSchedule( name="visit_schedule", verbose_name="Visit Schedule", offstudy_model="visit_schedule_app.subjectoffstudy", death_report_model="visit_schedule_app.deathreport", ) self.schedule = Schedule( name="schedule", onschedule_model="visit_schedule_app.onschedule", offschedule_model="visit_schedule_app.offschedule", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) self.visit_schedule.add_schedule(self.schedule) self.visit_schedule_two = VisitSchedule( name="visit_schedule_two", verbose_name="Visit Schedule Two", offstudy_model="visit_schedule_app.subjectoffstudy", death_report_model="visit_schedule_app.deathreport", ) self.schedule_two = Schedule( name="schedule_two", onschedule_model="visit_schedule_app.onscheduletwo", offschedule_model="visit_schedule_app.offscheduletwo", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) self.visit_schedule_two.add_schedule(self.schedule_two) site_visit_schedules._registry = {} site_visit_schedules.register(self.visit_schedule) site_visit_schedules.register(self.visit_schedule_two) def test_visit_schedules(self): self.assertIn(self.visit_schedule, site_visit_schedules.visit_schedules.values()) self.assertIn(self.visit_schedule_two, site_visit_schedules.visit_schedules.values()) def test_get_visit_schedules(self): """Asserts returns a dictionary of visit schedules.""" self.assertEqual(len(site_visit_schedules.get_visit_schedules()), 2) def test_get_visit_schedule_by_name(self): visit_schedule_name = self.visit_schedule.name self.assertEqual( self.visit_schedule, site_visit_schedules.get_visit_schedule(visit_schedule_name), ) def test_get_visit_schedule_by_name_raises(self): visit_schedule_name = "blahblah" self.assertRaises( SiteVisitScheduleError, site_visit_schedules.get_visit_schedule, visit_schedule_name, ) def test_get_visit_schedule_by_name_raises2(self): visit_schedule_name = "blah." self.assertRaises( SiteVisitScheduleError, site_visit_schedules.get_visit_schedule, visit_schedule_name, ) def test_get_visit_schedule_by_name_raises3(self): visit_schedule_name = ".blah" self.assertRaises( SiteVisitScheduleError, site_visit_schedules.get_visit_schedule, visit_schedule_name, ) def test_get_schedule_by_onschedule_model(self): _, schedule = site_visit_schedules.get_by_onschedule_model( "visit_schedule_app.onschedule") self.assertEqual(schedule.onschedule_model_cls, OnSchedule) def test_get_schedule_by_offschedule_model(self): _, schedule = site_visit_schedules.get_by_offschedule_model( "visit_schedule_app.offschedule") self.assertEqual(schedule.offschedule_model_cls, OffSchedule)
def setUp(self): v1_consent = Consent( "visit_schedule_app.subjectconsent", version="1", start=Protocol().study_open_datetime, end=Protocol().study_close_datetime, age_min=18, age_is_adult=18, age_max=64, gender=[MALE, FEMALE], ) site_consents.registry = {} site_consents.register(v1_consent) self.visit_schedule = VisitSchedule( name="visit_schedule", verbose_name="Visit Schedule", offstudy_model="visit_schedule_app.SubjectOffstudy", death_report_model="visit_schedule_app.DeathReport", ) self.schedule = Schedule( name="schedule", onschedule_model="visit_schedule_app.OnSchedule", offschedule_model="visit_schedule_app.OffSchedule", consent_model="visit_schedule_app.subjectconsent", appointment_model="edc_appointment.appointment", ) self.schedule3 = Schedule( name="schedule_three", onschedule_model="visit_schedule_app.OnScheduleThree", offschedule_model="visit_schedule_app.OffScheduleThree", consent_model="visit_schedule_app.subjectconsent", appointment_model="edc_appointment.appointment", ) self.visit_schedule.add_schedule(self.schedule) self.visit_schedule.add_schedule(self.schedule3) site_visit_schedules._registry = {} site_visit_schedules.register(self.visit_schedule) self.subject_identifier = "12345" self.view = MyView() self.view.kwargs = dict(subject_identifier=self.subject_identifier) self.view.subject_identifier = self.subject_identifier self.view.request = RequestFactory() self.view.request.META = {"HTTP_CLIENT_IP": "1.1.1.1"} self.view_current = MyViewCurrent() self.view_current.kwargs = dict( subject_identifier=self.subject_identifier) self.view_current.subject_identifier = self.subject_identifier self.view_current.request = RequestFactory() self.view_current.request.META = {"HTTP_CLIENT_IP": "1.1.1.1"} self.subject_consent = SubjectConsent.objects.create( subject_identifier="12345", consent_datetime=get_utcnow() - relativedelta(seconds=1), dob=date(1995, 1, 1), identity="11111", confirm_identity="11111", )
from edc_visit_schedule.visit import FormsCollection, Crf, Visit from edc_visit_schedule.visit_schedule import VisitSchedule from dateutil.relativedelta import relativedelta crfs = FormsCollection( Crf(show_order=1, model=f'edc_reference.crfone', required=True), ) visit0 = Visit(code='1000', title='Day 1', timepoint=0, rbase=relativedelta(days=0), rlower=relativedelta(days=0), rupper=relativedelta(days=6), crfs=crfs, facility_name='default') schedule = Schedule(name='schedule', onschedule_model='edc_reference.onschedule', offschedule_model='edc_reference.offschedule', appointment_model='edc_appointment.appointment', consent_model='edc_reference.subjectconsent') schedule.add_visit(visit0) visit_schedule = VisitSchedule(name='visit_schedule', offstudy_model='edc_reference.subjectoffstudy', death_report_model='edc_reference.deathreport') visit_schedule.add_schedule(schedule)
class TestSubjectSchedule(SiteTestCaseMixin, TestCase): def setUp(self): v1_consent = Consent( "visit_schedule_app.subjectconsent", version="1", start=Protocol().study_open_datetime, end=Protocol().study_close_datetime, age_min=18, age_is_adult=18, age_max=64, gender=[MALE, FEMALE], ) site_consents.registry = {} site_consents.register(v1_consent) site_visit_schedules._registry = {} self.visit_schedule = VisitSchedule( name="visit_schedule", verbose_name="Visit Schedule", offstudy_model="visit_schedule_app.SubjectOffstudy", death_report_model="visit_schedule_app.DeathReport", ) self.schedule = Schedule( name="schedule", onschedule_model="visit_schedule_app.OnSchedule", offschedule_model="visit_schedule_app.OffSchedule", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) self.schedule3 = Schedule( name="schedule_three", onschedule_model="visit_schedule_app.OnScheduleThree", offschedule_model="visit_schedule_app.OffScheduleThree", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) self.visit_schedule.add_schedule(self.schedule) self.visit_schedule.add_schedule(self.schedule3) site_visit_schedules.register(self.visit_schedule) self.visit_schedule_two = VisitSchedule( name="visit_schedule_two", verbose_name="Visit Schedule Two", offstudy_model="visit_schedule_app.SubjectOffstudy", death_report_model="visit_schedule_app.DeathReport", ) self.schedule_two_1 = Schedule( name="schedule_two", onschedule_model="visit_schedule_app.OnScheduleTwo", offschedule_model="visit_schedule_app.OffScheduleTwo", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) self.schedule_two_2 = Schedule( name="schedule_four", onschedule_model="visit_schedule_app.OnScheduleFour", offschedule_model="visit_schedule_app.OffScheduleFour", appointment_model="edc_appointment.appointment", consent_model="visit_schedule_app.subjectconsent", ) self.visit_schedule_two.add_schedule(self.schedule_two_1) self.visit_schedule_two.add_schedule(self.schedule_two_2) site_visit_schedules.register(self.visit_schedule_two) self.subject_identifier = "111111" SubjectConsent.objects.create( subject_identifier=self.subject_identifier) def test_onschedule_updates_history(self): """Asserts returns the correct instances for the schedule.""" for onschedule_model, schedule_name in [ ("visit_schedule_app.onscheduletwo", "schedule_two"), ("visit_schedule_app.onschedulefour", "schedule_four"), ]: with self.subTest(onschedule_model=onschedule_model, schedule_name=schedule_name): visit_schedule, schedule = site_visit_schedules.get_by_onschedule_model( onschedule_model) subject_schedule = SubjectSchedule( visit_schedule=visit_schedule, schedule=schedule) subject_schedule.put_on_schedule( subject_identifier=self.subject_identifier, onschedule_datetime=get_utcnow(), ) try: SubjectScheduleHistory.objects.get( subject_identifier=self.subject_identifier, schedule_name=schedule_name, ) except ObjectDoesNotExist: self.fail("ObjectDoesNotExist unexpectedly raised") def test_multpile_consents(self): """Asserts does not raise if more than one consent for this subject """ subject_identifier = "ABCDEF" SubjectConsent.objects.create(subject_identifier=subject_identifier, version="1") SubjectConsent.objects.create(subject_identifier=subject_identifier, version="2") visit_schedule, schedule = site_visit_schedules.get_by_onschedule_model( "visit_schedule_app.onscheduletwo") subject_schedule = SubjectSchedule(visit_schedule=visit_schedule, schedule=schedule) try: subject_schedule.put_on_schedule( subject_identifier=subject_identifier, onschedule_datetime=get_utcnow()) except SubjectScheduleError: self.fail("SubjectScheduleError unexpectedly raised.") def test_resave(self): """Asserts returns the correct instances for the schedule.""" visit_schedule, schedule = site_visit_schedules.get_by_onschedule_model( "visit_schedule_app.onscheduletwo") subject_schedule = SubjectSchedule(visit_schedule=visit_schedule, schedule=schedule) subject_schedule.put_on_schedule( subject_identifier=self.subject_identifier, onschedule_datetime=get_utcnow()) subject_schedule.resave(subject_identifier=self.subject_identifier) def test_put_on_schedule(self): _, schedule = site_visit_schedules.get_by_onschedule_model( "visit_schedule_app.onschedule") self.assertRaises( ObjectDoesNotExist, OnSchedule.objects.get, subject_identifier=self.subject_identifier, ) schedule.put_on_schedule(subject_identifier=self.subject_identifier, onschedule_datetime=get_utcnow()) try: OnSchedule.objects.get(subject_identifier=self.subject_identifier) except ObjectDoesNotExist: self.fail("ObjectDoesNotExist unexpectedly raised") def test_take_off_schedule(self): visit_schedule = site_visit_schedules.get_visit_schedule( visit_schedule_name="visit_schedule") schedule = visit_schedule.schedules.get("schedule") schedule.put_on_schedule(subject_identifier=self.subject_identifier) schedule.take_off_schedule( subject_identifier=self.subject_identifier, offschedule_datetime=get_utcnow(), ) try: OffSchedule.objects.get(subject_identifier=self.subject_identifier) except ObjectDoesNotExist: self.fail("ObjectDoesNotExist unexpectedly raised")