def test_not_eligible_egfr_less_than_45(self):

        obj = self.get_screening_part_three()
        self.assertEqual(obj.eligible_part_one, YES)
        self.assertFalse(obj.reasons_ineligible_part_one)
        self.assertEqual(obj.eligible_part_two, YES)
        self.assertFalse(obj.reasons_ineligible_part_two)

        obj.part_three_report_datetime = get_utcnow()
        obj.part_three_report_datetime = get_utcnow()
        obj.weight = 65
        obj.height = 110
        obj.hba1c_performed = YES
        obj.hba1c_value = 7.0
        obj.creatinine_performed = NO
        obj.creatinine_value = 200
        obj.creatinine_units = MICROMOLES_PER_LITER
        obj.fasting = YES
        obj.fasting_duration_str = "8h"
        obj.ifg_value = 7.0
        obj.ifg_datetime = get_utcnow()
        obj.ogtt_base_datetime = get_utcnow()
        obj.ogtt_value = 7.5
        obj.ogtt_units = MILLIMOLES_PER_LITER
        obj.ogtt_datetime = get_utcnow()
        obj.save()

        self.assertEqual(obj.eligible_part_three, NO)
        self.assertIn(EGFR_LT_45, obj.reasons_ineligible_part_three)
        self.assertFalse(obj.eligible)
        self.assertFalse(obj.consented)
Пример #2
0
 def setUp(self):
     super().setUp()
     self.eligibility_datetime = get_utcnow() - relativedelta(days=1)  # yesterday
     self.subject_screening = self.get_subject_screening(
         report_datetime=get_utcnow(), eligibility_datetime=self.eligibility_datetime
     )
     self.screening_identifier = self.subject_screening.screening_identifier
    def setUp(self):
        self.user = User.objects.create_superuser("user_login",
                                                  "*****@*****.**", "pass")

        site_labs._registry = {}
        site_labs.loaded = False
        site_labs.register(lab_profile=lab_profile)

        register_to_site_reference_configs()
        site_visit_schedules._registry = {}
        site_visit_schedules.loaded = False
        site_visit_schedules.register(visit_schedule)
        site_reference_configs.register_from_visit_schedule(
            visit_models={
                "edc_appointment.appointment": "edc_model_admin.subjectvisit"
            })

        self.subject_identifier = "101-12345"
        SubjectConsent.objects.create(
            subject_identifier=self.subject_identifier,
            consent_datetime=get_utcnow(),
            identity="1111111",
            confirm_identity="1111111",
            visit_schedule_name="visit_schedule",
            schedule_name="schedule",
        )
        appointment = Appointment.objects.get(visit_code="1000")
        self.subject_visit = SubjectVisit.objects.create(
            appointment=appointment,
            report_datetime=get_utcnow(),
            reason=SCHEDULED)
    def test_not_eligible_egfr_less_than_45(self):

        obj = ScreeningPartThree.objects.get(
            screening_identifier=self.screening_identifier)
        self.assertEqual(obj.eligible_part_one, YES)
        self.assertFalse(obj.reasons_ineligible_part_one)
        self.assertEqual(obj.eligible_part_two, YES)
        self.assertFalse(obj.reasons_ineligible_part_two)

        obj.part_three_report_datetime = get_utcnow()
        obj.part_three_report_datetime = get_utcnow()
        obj.weight = 65
        obj.height = 110
        obj.hba1c_performed = YES
        obj.hba1c = 7.0
        obj.creatinine_performed = NO
        obj.creatinine = 200
        obj.creatinine_units = MICROMOLES_PER_LITER
        obj.fasted = YES
        obj.fasted_duration_str = "8h"
        obj.fasting_glucose = 7.0
        obj.fasting_glucose_datetime = get_utcnow()
        obj.ogtt_base_datetime = get_utcnow()
        obj.ogtt_two_hr = 7.5
        obj.ogtt_two_hr_units = MILLIMOLES_PER_LITER
        obj.ogtt_two_hr_datetime = get_utcnow()
        obj.save()

        self.assertEqual(obj.eligible_part_three, NO)
        self.assertIn(EGFR_LT_45, obj.reasons_ineligible_part_three)
        self.assertFalse(obj.eligible)
        self.assertFalse(obj.consented)
Пример #5
0
 def setUp(self):
     self.lab_helper.setup_site_labs()
     self.panel = self.lab_helper.panel
     self.profile_aliquot_count = self.lab_helper.profile_aliquot_count
     self.subject_identifier = "1111111111"
     Site.objects.get_current()
     SubjectConsent.objects.create(
         subject_identifier=self.subject_identifier,
         consent_datetime=get_utcnow(),
         identity="1111111",
         confirm_identity="1111111",
         visit_schedule_name="visit_schedule",
         schedule_name="schedule",
     )
     appointment = Appointment.objects.get(visit_code="1000")
     self.subject_visit = SubjectVisit.objects.create(
         appointment=appointment,
         report_datetime=get_utcnow(),
         reason=SCHEDULED)
     self.requisition = SubjectRequisition.objects.create(
         subject_visit=self.subject_visit,
         panel=self.panel.panel_model_obj,
         protocol_number="999",
         is_drawn=YES,
     )
     self.specimen = Specimen(requisition=self.requisition)
Пример #6
0
    def setUp(self):
        obj = ScreeningPartOne(
            screening_consent=YES,
            report_datetime=get_utcnow(),
            hospital_identifier="111",
            initials="ZZ",
            gender=FEMALE,
            age_in_years=25,
            ethnicity=BLACK,
            hiv_pos=YES,
            art_six_months=YES,
            on_rx_stable=YES,
            lives_nearby=YES,
            staying_nearby=YES,
            pregnant=NOT_APPLICABLE,
        )
        obj.save()
        self.screening_identifier = obj.screening_identifier

        obj = ScreeningPartTwo.objects.get(
            screening_identifier=self.screening_identifier)
        obj.part_two_report_datetime = get_utcnow()
        obj.urine_bhcg_performed = NO
        obj.congestive_heart_failure = NO
        obj.liver_disease = NO
        obj.alcoholism = NO
        obj.acute_metabolic_acidosis = NO
        obj.renal_function_condition = NO
        obj.tissue_hypoxia_condition = NO
        obj.acute_condition = NO
        obj.metformin_sensitivity = NO
        obj.advised_to_fast = YES
        obj.appt_datetime = get_utcnow() + relativedelta(days=1)
        obj.save()
Пример #7
0
 def in_bounds_or_raise(self, age: int = None):
     self.reasons_ineligible = None
     dob = localtime(get_utcnow() - relativedelta(years=age)).date()
     age_units = "years"
     report_datetime = localtime(get_utcnow())
     return super().in_bounds_or_raise(dob=dob,
                                       report_datetime=report_datetime,
                                       age_units=age_units)
Пример #8
0
    def setUp(self):
        self.user = User.objects.create_superuser("user_login",
                                                  "*****@*****.**", "pass")

        site_labs._registry = {}
        site_labs.loaded = False
        site_labs.register(lab_profile=lab_profile)

        register_to_site_reference_configs()
        site_visit_schedules._registry = {}
        site_visit_schedules.loaded = False
        site_visit_schedules.register(visit_schedule)
        site_reference_configs.register_from_visit_schedule(visit_models={
            "edc_appointment.appointment":
            "review_dashboard_app.subjectvisit"
        })

        self.subject_identifiers = ["101-40990028-3", "101-40990029-4"]

        for subject_identifier in self.subject_identifiers:
            subject_consent = SubjectConsent.objects.create(
                subject_identifier=subject_identifier,
                consent_datetime=get_utcnow(),
                identity=subject_identifier,
                confirm_identity=subject_identifier,
                dob=get_utcnow() - relativedelta(years=25),
            )

            for schedule in visit_schedule.schedules.values():
                for visit in schedule.visits.values():
                    appointment = Appointment.objects.create(
                        appt_datetime=get_utcnow(),
                        subject_identifier=subject_identifier,
                        visit_schedule_name="visit_schedule",
                        schedule_name="schedule",
                        timepoint=visit.timepoint,
                        visit_code=visit.code,
                        user_created="user_login",
                    )
                    SubjectVisit.objects.create(
                        appointment=appointment,
                        subject_identifier=subject_identifier,
                        reason=SCHEDULED,
                        user_created="user_login",
                    )
            # put subject on schedule
            _, schedule = site_visit_schedules.get_by_onschedule_model(
                "review_dashboard_app.onschedule")
            schedule.put_on_schedule(
                subject_identifier=subject_consent.subject_identifier,
                onschedule_datetime=subject_consent.consent_datetime,
            )
Пример #9
0
    def test_age(self):
        context = {"reference_datetime": None}
        born = get_utcnow() - relativedelta(years=25)
        self.assertEqual(25, age_in_years(context, born))

        reference_datetime = get_utcnow() - relativedelta(years=25)
        context = {"reference_datetime": reference_datetime}
        born = reference_datetime - relativedelta(years=5)
        self.assertEqual(5, age_in_years(context, born))

        reference_datetime = get_utcnow() - relativedelta(years=25)
        context = {"reference_datetime": reference_datetime}
        born = get_utcnow()
        self.assertEqual(born, age_in_years(context, born))
Пример #10
0
def check_eligible_final(obj):
    """Updates model instance fields `eligible` and `reasons_ineligible`.
    """
    reasons_ineligible = []

    if obj.unsuitable_for_study == YES:
        obj.eligible = False
        reasons_ineligible.append("Subject unsuitable")
    else:
        obj.eligible = True if calculate_eligible_final(obj) == YES else False

    if obj.eligible:
        obj.reasons_ineligible = None
    else:
        if obj.qualifying_condition == NO:
            reasons_ineligible.append("No qualifying condition")
        if obj.lives_nearby == NO:
            reasons_ineligible.append("Not in catchment area")
        if obj.requires_acute_care == YES:
            reasons_ineligible.append("Requires acute care")
        if reasons_ineligible:
            obj.reasons_ineligible = "|".join(reasons_ineligible)
        else:
            obj.reasons_ineligible = None
    obj.eligibility_datetime = get_utcnow()
Пример #11
0
 def get_display_name(self):
     template_name = (f"edc_data_manager/bootstrap{settings.EDC_BOOTSTRAP}/"
                      f"action_item_display_name.html")
     title = getattr(self.reference_obj, "title", "")
     visit_schedule = getattr(self.reference_obj, "visit_schedule", "")
     modified = getattr(self.reference_obj, "modified", None)
     auto = "auto" if getattr(self.reference_obj, "rule_generated",
                              False) else ""
     try:
         query_priority = self.reference_obj.get_query_priority_display()
     except AttributeError:
         query_priority = NORMAL
     context = dict(
         HIGH_PRIORITY=HIGH_PRIORITY,
         auto=auto,
         category=self.get_category(),
         modified=modified,
         object=self.reference_obj,
         query_priority=query_priority,
         title=title,
         utcnow=get_utcnow(),
         visit_schedule=visit_schedule,
     )
     form_and_numbers_to_string = getattr(self.reference_obj,
                                          "form_and_numbers_to_string",
                                          None)
     if form_and_numbers_to_string:
         context.update(form_and_numbers=form_and_numbers_to_string())
     return render_to_string(template_name, context=context)
    def test_redirect_next(self):
        """Assert redirects to "dashboard_url" as give in the
        query_string "next=".
        """
        self.login()

        self.app.get(
            reverse("dashboard_app:dashboard_url",
                    args=(self.subject_identifier, )),
            user=self.user,
            status=200,
        )

        CrfOne.objects.create(subject_visit=self.subject_visit,
                              report_datetime=get_utcnow())

        model = "redirectnextmodel"
        query_string = ("next=dashboard_app:dashboard_url,subject_identifier&"
                        f"subject_identifier={self.subject_identifier}")

        url = reverse(
            f"admin:edc_model_admin_{model}_add") + "?" + query_string

        response = self.app.get(url, user=self.user)
        response.form["subject_identifier"] = self.subject_identifier
        response = response.form.submit(name="_save").follow()

        self.assertIn("You are at the subject dashboard", response)
        self.assertIn(self.subject_identifier, response)
Пример #13
0
def check_eligible_final(obj):
    """Updates model instance fields `eligible` and `reasons_ineligible`.
    """
    reasons_ineligible = []

    if obj.unsuitable_for_study == YES:
        obj.eligible = False
        reasons_ineligible.append("Subject unsuitable")
    else:
        obj.eligible = True if calculate_eligible_final(obj) == YES else False

    if obj.eligible:
        obj.reasons_ineligible = None
    else:
        if obj.reasons_ineligible_part_one:
            reasons_ineligible.append(obj.reasons_ineligible_part_one)
        if obj.reasons_ineligible_part_two:
            reasons_ineligible.append(obj.reasons_ineligible_part_two)
        if obj.reasons_ineligible_part_three:
            reasons_ineligible.append(obj.reasons_ineligible_part_three)
        if reasons_ineligible:
            obj.reasons_ineligible = "|".join(reasons_ineligible)
        else:
            obj.reasons_ineligible = None
    obj.eligibility_datetime = get_utcnow()
Пример #14
0
    def get_subject_screening(self, report_datetime=None, eligibility_datetime=None, **kwargs):
        data = {
            "screening_consent": YES,
            "age_in_years": 25,
            "clinic_type": HIV_CLINIC,
            "gender": MALE,
            "hospital_identifier": "13343322",
            "initials": "EW",
            "lives_nearby": YES,
            "qualifying_condition": YES,
            "report_datetime": report_datetime or get_utcnow(),
            "requires_acute_care": NO,
            "selection_method": RANDOM_SAMPLING,
            "unsuitable_agreed": NOT_APPLICABLE,
            "unsuitable_for_study": NO,
        }
        data.update(**kwargs)
        form = SubjectScreeningForm(data=data, instance=None)
        form.save()

        subject_screening = SubjectScreening.objects.get(
            screening_identifier=form.instance.screening_identifier
        )

        self.assertTrue(subject_screening.eligible)

        if eligibility_datetime:
            subject_screening.eligibility_datetime = eligibility_datetime
            subject_screening.save()

        return subject_screening
Пример #15
0
 def try_to_resolve_auto_generated_query(self):
     if (not self.dm_resolved and self.rule_generated
             and self.site_response_status == RESOLVED
             and self.site_response_text
             and self.site_response_text.strip() == AUTO_RESOLVED):
         self.status = CLOSED
         self.resolved_datetime = get_utcnow()
         self.dm_user = self.sender
Пример #16
0
    def validate_reportable_fields(self):

        reportables = self.reportables_cls(
            self.reference_range_collection_name,
            cleaned_data=copy(self.cleaned_data),
            gender=MALE,
            dob=get_utcnow() - relativedelta(years=25),
            report_datetime=get_utcnow(),
        )
        reportables.validate_reportable_fields()

        reportables.validate_results_abnormal_field()

        self.applicable_if(YES,
                           field="results_abnormal",
                           field_applicable="results_reportable")

        reportables.validate_results_reportable_field()
 def get_subject_consent(self, subject_screening):
     return mommy.make_recipe(
         "meta_consent.subjectconsent",
         user_created="erikvw",
         user_modified="erikvw",
         screening_identifier=subject_screening.screening_identifier,
         initials=subject_screening.initials,
         dob=get_utcnow().date() -
         relativedelta(years=subject_screening.age_in_years),
         site=Site.objects.get(name="hindu_mandal"),
     )
Пример #18
0
 def setUp(self):
     site_visit_schedules._registry = {}
     site_visit_schedules.register(visit_schedule)
     self.subject_identifier = "1111111111"
     self.lab_helper.setup_site_labs()
     self.panel = self.lab_helper.panel
     SubjectConsent.objects.create(
         subject_identifier=self.subject_identifier,
         consent_datetime=get_utcnow(),
         identity="1111111",
         confirm_identity="1111111",
         visit_schedule_name="visit_schedule",
         schedule_name="schedule",
         site=Site.objects.get_current(),
     )
     appointment = Appointment.objects.get(visit_code="1000")
     self.subject_visit = SubjectVisit.objects.create(
         appointment=appointment,
         report_datetime=get_utcnow(),
         reason=SCHEDULED)
Пример #19
0
 def get_subject_consent(self, subject_screening, site_name=None):
     site_name = site_name or "kinoni"
     return baker.make_recipe(
         "inte_consent.subjectconsent",
         user_created="erikvw",
         user_modified="erikvw",
         screening_identifier=subject_screening.screening_identifier,
         initials=subject_screening.initials,
         dob=get_utcnow().date() -
         relativedelta(years=subject_screening.age_in_years),
         site=Site.objects.get(name=site_name),
     )
Пример #20
0
    def test_creates_icp_referral(self):
        obj = ScreeningPartThree.objects.get(
            screening_identifier=self.screening_identifier)

        self.assertEqual(obj.eligible_part_one, YES)
        self.assertFalse(obj.reasons_ineligible_part_one)
        self.assertEqual(obj.eligible_part_two, YES)
        self.assertFalse(obj.reasons_ineligible_part_two)

        obj.part_three_report_datetime = get_utcnow()
        obj.weight = 65
        obj.height = 110
        obj.hba1c_performed = YES
        obj.hba1c_value = 7.0
        obj.creatinine_performed = YES
        obj.creatinine_value = 100
        obj.creatinine_units = MICROMOLES_PER_LITER
        obj.fasting = YES
        obj.fasting_duration_str = "8h"
        obj.ifg_value = 7.5
        obj.ifg_datetime = get_utcnow()
        obj.ogtt_base_datetime = get_utcnow()
        obj.ogtt_value = 12.0
        obj.ogtt_units = MILLIMOLES_PER_LITER
        obj.ogtt_datetime = get_utcnow()
        obj.save()

        self.assertTrue(obj.reasons_ineligible_part_three)
        self.assertEqual(obj.eligible_part_three, NO)
        self.assertFalse(obj.eligible)
        self.assertFalse(obj.consented)

        self.assertTrue(refer_to_icp(obj))

        try:
            IcpReferral.objects.get(subject_screening=obj)
        except ObjectDoesNotExist as e:
            self.fail(f"ObjectDoesNotExist unexpectedly raised. Got {e}")
Пример #21
0
 def get_subject_consent(self, subject_screening, site_name=None, **kwargs):
     site_name = site_name or "kinoni"
     options = dict(
         user_created="erikvw",
         user_modified="erikvw",
         screening_identifier=subject_screening.screening_identifier,
         initials=subject_screening.initials,
         dob=get_utcnow().date()
             - relativedelta(years=subject_screening.age_in_years),
         site=Site.objects.get(name=site_name),
         clinic_type=HIV_CLINIC,
     )
     options.update(**kwargs)
     return baker.make_recipe("inte_consent.subjectconsent", **options)
Пример #22
0
    def setUp(self):
        import_holidays()
        self.user = User.objects.create_superuser("user_login",
                                                  "*****@*****.**", "pass")

        site_labs._registry = {}
        site_labs.loaded = False
        site_labs.register(lab_profile=lab_profile)

        site_visit_schedules._registry = {}
        site_visit_schedules.loaded = False
        site_visit_schedules.register(visit_schedule)

        populate_visit_schedule()

        site_reference_configs.register_from_visit_schedule(
            visit_models={
                "edc_appointment.appointment": "data_manager_app.subjectvisit"
            })

        self.subject_identifier = "101-40990029-4"
        identity = "123456789"
        subject_consent = SubjectConsent.objects.create(
            subject_identifier=self.subject_identifier,
            consent_datetime=get_utcnow() - relativedelta(days=10),
            identity=identity,
            confirm_identity=identity,
            dob=get_utcnow() - relativedelta(years=25),
        )

        # put subject on schedule
        _, schedule = site_visit_schedules.get_by_onschedule_model(
            "data_manager_app.onschedule")
        schedule.put_on_schedule(
            subject_identifier=subject_consent.subject_identifier,
            onschedule_datetime=subject_consent.consent_datetime,
        )
Пример #23
0
 def get_data(self):
     return {
         "screening_consent": YES,
         "selection_method": RANDOM_SAMPLING,
         "report_datetime": get_utcnow(),
         "initials": "EW",
         "gender": MALE,
         "age_in_years": 25,
         "clinic_type": NCD_CLINIC,
         "qualifying_condition": YES,
         "lives_nearby": YES,
         "requires_acute_care": NO,
         "unsuitable_for_study": NO,
         "unsuitable_agreed": NOT_APPLICABLE,
     }
    def test_redirect_on_delete_with_url_name_is_none(self):
        self.login()

        crfsix = CrfSix.objects.create(subject_visit=self.subject_visit,
                                       report_datetime=get_utcnow())

        model = "crfsix"
        url = reverse(f"admin:edc_model_admin_{model}_change",
                      args=(crfsix.id, ))
        response = self.app.get(url, user=self.user)
        delete_url = reverse(f"admin:edc_model_admin_{model}_delete",
                             args=(crfsix.id, ))
        response = response.click(href=delete_url)
        response = response.form.submit().follow()
        self.assertRaises(ObjectDoesNotExist, CrfSix.objects.get, id=crfsix.id)
        self.assertIn("changelist", response)
    def test_redirect_on_delete_with_url_name_from_settings(self):

        self.login()

        self.app.get(
            reverse("dashboard_app:dashboard_url",
                    args=(self.subject_identifier, )),
            user=self.user,
            status=200,
        )

        model = "crffour"
        query_string = ("next=dashboard_app:dashboard_url,subject_identifier&"
                        f"subject_identifier={self.subject_identifier}")
        url = reverse(
            f"admin:edc_model_admin_{model}_add") + "?" + query_string

        form_data = {
            "subject_visit": str(self.subject_visit.id),
            "report_datetime_0": get_utcnow().strftime("%Y-%m-%d"),
            "report_datetime_1": "00:00:00",
        }
        response = self.app.get(url, user=self.user)
        for key, value in form_data.items():
            response.form[key] = value
        response = response.form.submit(name="_save").follow()

        # delete
        crffour = CrfFour.objects.all()[0]
        url = (reverse(f"admin:edc_model_admin_{model}_change",
                       args=(crffour.id, )) + "?" + query_string)
        response = self.app.get(url, user=self.user)
        delete_url = reverse(f"admin:edc_model_admin_{model}_delete",
                             args=(crffour.id, ))
        response = response.click(href=delete_url)

        # submit confirmation page
        response = response.form.submit().follow()

        # redirects to the dashboard
        self.assertIn("You are at the subject dashboard", response)
        self.assertRaises(ObjectDoesNotExist,
                          CrfFour.objects.get,
                          id=crffour.id)
Пример #26
0
 def setUp(self):
     super().setUp()
     self.subject_visit = self.get_subject_visit()
     symptoms = BaselineSymptoms.objects.filter(name=NONE)
     arv_regimen = ArvRegimens.objects.get(name="TDF_3TC_ATV_r")
     oi_prophylaxis = OiProphylaxis.objects.filter(
         name__in=["fluconazole", "isoniazid"]
     )
     diabetes_symptoms = DiabetesSymptoms.objects.all()
     self.options = {
         "current_arv_regimen": arv_regimen.id,
         "current_smoker": YES,
         "dia_blood_pressure": 80,
         "diabetes_in_family": NO,
         "diabetes_symptoms": diabetes_symptoms,
         "family_diabetics": NO,
         "former_smoker": NOT_APPLICABLE,
         "has_abdominal_tenderness": NO,
         "has_enlarged_liver": NO,
         "has_previous_arv_regimen": NO,
         "heart_rate": 65,
         "hypertension_diagnosis": NO,
         "hypertension_treatment": None,
         "is_heartbeat_regular": YES,
         "jaundice": YES,
         "oi_prophylaxis": oi_prophylaxis,
         "on_hypertension_treatment": NO,
         "on_oi_prophylaxis": YES,
         "other_diabetes_symptoms": "erik",
         "past_year_symptoms": None,
         "peripheral_oedema": YES,
         "previous_arv_regimen": None,
         "previous_arv_regimen": [],
         "report_datetime": get_utcnow(),
         "respiratory_rate": 12,
         "subject_visit": self.subject_visit.pk,
         "symptoms": None,
         "symptoms": symptoms,
         "sys_blood_pressure": 120,
         "taking_statins": YES,
         "temperature": 37,
         "waist_circumference": 61,
         "weight": 65,
     }
Пример #27
0
    def get_subject_consent(subject_screening,
                            consent_datetime=None,
                            **kwargs):
        dob = (consent_datetime or get_utcnow()).date() - relativedelta(
            years=subject_screening.age_in_years)
        consent_datetime = consent_datetime or subject_screening.report_datetime

        options = dict(
            user_created="erikvw",
            user_modified="erikvw",
            screening_identifier=subject_screening.screening_identifier,
            initials=subject_screening.initials,
            dob=dob,
            site=Site.objects.get(id=settings.SITE_ID),
            clinic_type=HIV_CLINIC,
            consent_datetime=consent_datetime,
        )
        options.update(**kwargs)
        return baker.make_recipe("inte_consent.subjectconsent", **options)
Пример #28
0
    def test_screening_two_urine_bhcg_pregnant_na(self):
        instance = self.complete_part_one(gender=FEMALE,
                                          pregnant=NOT_APPLICABLE)
        instance = self.complete_part_two(instance=instance)

        # if pregnant == NOT_APPLICABLE, urine_bhcg_performed is not applicable
        try:
            ScreeningPartThreeForm(
                data=dict(urine_bhcg=NOT_APPLICABLE,
                          urine_bhcg_performed=NOT_APPLICABLE),
                instance=instance,
            )
        except AssertionError:
            self.fail("AssertionError unexpectedly raised.")

        self.assertRaises(
            AssertionError,
            self.complete_part_three,
            instance=instance,
            urine_bhcg=NOT_APPLICABLE,
            urine_bhcg_performed=YES,
        )
        self.assertIn("urine_bhcg_performed", self.part_three_form._errors)
        self.assertIn(
            "This field is not applicable",
            self.part_three_form._errors.get("urine_bhcg_performed")[0],
        )

        self.assertRaises(
            AssertionError,
            self.complete_part_three,
            instance=instance,
            urine_bhcg_date=get_utcnow().date(),
            urine_bhcg_performed=NOT_APPLICABLE,
        )
        self.assertIn("urine_bhcg_date", self.part_three_form._errors)
        self.assertIn(
            "This field is not required",
            self.part_three_form._errors.get("urine_bhcg_date")[0],
        )
Пример #29
0
    def test_eligible(self):

        obj = ScreeningPartTwo.objects.get(
            screening_identifier=self.screening_identifier)
        self.assertEqual(obj.eligible_part_one, YES)
        self.assertTrue(obj.reasons_ineligible_part_one == "")

        for k, v in part_two_eligible_options.items():
            setattr(obj, k, v)
        obj.acute_condition = None
        obj.metformin_sensitivity = None
        obj.advised_to_fast = NO
        obj.appt_datetime = None
        obj.save()

        self.assertEqual(obj.eligible_part_two, TBD)
        self.assertFalse(obj.reasons_ineligible_part_two)
        self.assertFalse(obj.eligible)
        self.assertFalse(obj.consented)

        obj.acute_condition = NO
        obj.metformin_sensitivity = YES
        obj.save()

        self.assertEqual(obj.eligible_part_two, NO)
        self.assertIn("Metformin", obj.reasons_ineligible_part_two)
        self.assertFalse(obj.eligible)
        self.assertFalse(obj.consented)

        obj.acute_condition = NO
        obj.metformin_sensitivity = NO
        obj.advised_to_fast = YES
        obj.appt_datetime = get_utcnow() + relativedelta(days=1)
        obj.save()

        self.assertEqual(obj.eligible_part_two, YES)
        self.assertFalse(obj.reasons_ineligible_part_two)
        self.assertFalse(obj.eligible)
        self.assertFalse(obj.consented)
 def test_ineligible(self):
     obj = ScreeningPartOne(
         report_datetime=get_utcnow(),
         hospital_identifier="111",
         initials="ZZ",
         gender=FEMALE,
         age_in_years=25,
         ethnicity=BLACK,
         hiv_pos=YES,
         art_six_months=YES,
         on_rx_stable=YES,
         lives_nearby=YES,
         staying_nearby=NO,
         pregnant=NOT_APPLICABLE,
     )
     obj.save()
     self.assertEqual(obj.eligible_part_one, NO)
     self.assertIn("Unable/Unwilling to stay nearby",
                   obj.reasons_ineligible_part_one)
     obj.staying_nearby = YES
     obj.save()
     self.assertEqual(obj.eligible_part_one, YES)
     self.assertTrue(obj.reasons_ineligible_part_one == "")