Exemple #1
0
    def test_lab_add_view_with_perm(self):
        """User with lab permissions is able to add lab"""
        log_in_user(self.client,
                    build_user([user_factories.CaseManagerGroupFactory]))

        assert ContinuousMeasurement.objects.count() == 2
        assert DiscreteMeasurement.objects.count() == 1
        assert Lab.objects.count() == 1

        url = reverse('labs:new-lab', kwargs={'pt_id': self.pt.id})
        response = self.client.get(url)

        response = self.client.post(url, self.submitted_form_step1)
        assert response.status_code == 302

        # Successfully redirect to step 2 view
        url = reverse('labs:new-full-lab',
                      kwargs={
                          'pt_id': self.pt.id,
                          'lab_type_id': self.ua.id
                      })
        assert response.url == url

        response = self.client.post(url, self.submitted_form_step2)
        assert response.status_code == 302

        # Successfully added lab and measurement objects
        assert ContinuousMeasurement.objects.count() == 4
        assert DiscreteMeasurement.objects.count() == 2
        assert Lab.objects.count() == 2

        # Successfully redirect back to table view
        url = reverse("labs:all-labs-table", kwargs={'pt_id': self.pt.id})
        assert response.url == url
Exemple #2
0
    def test_workup_update(self):
        '''
        Updating should be possible always for attendings, only without
        attestation for non-attendings.
        '''

        # if the wu is unsigned, all can access update.
        for role in user_factories.all_roles:
            log_in_user(self.client, build_user([role]))
            response = self.client.get(
                reverse('workup-update', args=(self.wu.id, )))
            assert response.status_code == 200

        signer = build_user([user_factories.AttendingGroupFactory])
        self.wu.sign(signer, signer.groups.first())
        self.wu.save()

        # nonattesting cannot access while attesting can
        for role in user_factories.all_roles:
            log_in_user(self.client, build_user([role]))
            response = self.client.get(
                reverse('workup-update', args=(self.wu.id, )))
            if role in user_factories.attesting_roles:
                assert response.status_code == 200
            else:
                self.assertRedirects(response,
                                     reverse('workup', args=(self.wu.id, )))
Exemple #3
0
    def setUp(self):
        self.user = build_user()

        log_in_user(self.client, self.user)

        self.contact_method = ContactMethod.objects.create(
            name="Carrier Pidgeon")

        self.contact_result = ContactResult.objects.create(
            name="Reached on phone", patient_reached=True)

        self.pt = Patient.objects.create(
            first_name="Juggie",
            last_name="Brodeltein",
            middle_name="Bayer",
            phone='+49 178 236 5288',
            gender=Gender.objects.first(),
            address='Schulstrasse 9',
            city='Munich',
            state='BA',
            zip_code='63108',
            pcp_preferred_zip='63018',
            date_of_birth=datetime.date(1990, 1, 1),
            patient_comfortable_with_english=False,
            preferred_contact_method=self.contact_method,
        )

        self.reftype = ReferralType.objects.create(
            name="Specialty", is_fqhc=False)
        self.refloc = ReferralLocation.objects.create(
            name='COH', address='Euclid Ave.')
        self.refloc.care_availiable.add(self.reftype)

        self.no_show_reason = NoShowReason.objects.create(name="Hella busy.")
Exemple #4
0
    def test_AttestableBasicNote_signing(self):
        """Verify that signing is possible for those with relevant permission.
        """

        sign_url = "attestable-basic-note-sign"

        note = models.AttestableBasicNote.objects.create(**self.note_data)

        # Fresh notes should be unsigned
        assert not note.signed()

        # Providers with can_attend == False should not be able to sign
        can_sign_group = user_factories.PermGroupFactory(
            permissions=['workup.sign_AttestableBasicNote'])
        cannot_sign_group = user_factories.NoPermGroupFactory()

        can_sign = user_factories.UserFactory(groups=[can_sign_group])
        cannot_sign = user_factories.UserFactory(groups=[cannot_sign_group])

        for user in [can_sign, cannot_sign]:
            log_in_user(self.client, user)
            response = self.client.get(reverse(sign_url, args=(note.id, )))
            detail_url = reverse('attestable-basic-note-detail',
                                 args=(note.id, ))
            self.assertRedirects(response, detail_url)
            assert models.AttestableBasicNote.objects.get(
                pk=note.id).signed() == (user == can_sign)
            note.signer = None
            note.save()
Exemple #5
0
    def setUp(self):

        self.user = build_user()

        log_in_user(self.client, self.user)

        self.unit = factories.MeasuringUnitFactory(name='different_unit')
        self.category = factories.DrugCategoryFactory(name='different_category')
        self.manufacturer = factories.ManufacturerFactory(name='different_manufacturer')

        self.diff_drug = {
                            'name': 'Differentdrug',
                            'unit': self.unit.pk,
                            'dose': 500.0,
                            'stock': 5,
                            'expiration_date': '2100-01-01',
                            'lot_number': 'HGFEDCBA',
                            'category': self.category.pk,
                            'manufacturer': self.manufacturer.pk
                        }
        self.drug = factories.DrugFactory()

        self.pt = core_factories.PatientFactory()

        self.encounter = core_factories.EncounterFactory(patient=self.pt)
Exemple #6
0
    def test_workup_submit(self):
        """verify we can submit a valid workup as a signer and nonsigner"""

        for role in user_factories.all_roles:
            user = build_user([role])
            log_in_user(self.client, user)

            wu_count = models.Workup.objects.all().count()
            wu_data = wu_dict(units=True, dx_category=True)
            pt = wu_data['patient']
            wu_data['patient'] = pt.id
            wu_data['author'] = user.id
            wu_data['author_type'] = user.groups.first().id
            e = wu_data['encounter']
            wu_data['encounter'] = e.id

            response = self.client.post(reverse('new-workup', args=(pt.id, )),
                                        data=wu_data)
            self.assertRedirects(
                response, reverse("core:patient-detail", args=(pt.id, )))

            can_attest = role in user_factories.attesting_roles
            assert models.Workup.objects.all().count() == wu_count + 1
            new = models.Workup.objects.get(patient=pt)
            assert new.signed() == can_attest
Exemple #7
0
    def setUp(self):
        self.ua = factories.LabTypeFactory(name='Urinalysis')
        self.ua_pH = factories.ContinuousMeasurementTypeFactory(
            long_name='Urine pH', short_name='pH', lab_type=self.ua)
        self.ua_glucose = factories.ContinuousMeasurementTypeFactory(
            long_name='Urine glucose', short_name='glucose', lab_type=self.ua)
        self.ua_blood = factories.DiscreteMeasurementTypeFactory(
            long_name='Urine blood', short_name='blood', lab_type=self.ua)

        self.disc_result_neg = factories.DiscreteResultTypeFactory(name='neg')
        self.disc_result_neg.measurement_type.set([self.ua_blood])

        self.pt = core_factories.PatientFactory()
        self.lab = factories.LabFactory(patient=self.pt, lab_type=self.ua)

        lab_ua_pH = factories.ContinuousMeasurementFactory(
            measurement_type=self.ua_pH, lab=self.lab)
        lab_ua_glucose = factories.ContinuousMeasurementFactory(
            measurement_type=self.ua_glucose, lab=self.lab)
        lab_ua_blood = factories.DiscreteMeasurementFactory(
            measurement_type=self.ua_blood, lab=self.lab)

        log_in_user(self.client, build_user())

        self.submitted_form_step1 = {"lab_type": self.ua.id}

        self.submitted_form_step2 = {
            'lab_time': now().strftime("%Y-%m-%d %H:%M:%S"),
            'pH': '5',
            'glucose': '1',
            'blood': self.disc_result_neg.name
        }
Exemple #8
0
    def setUp(self):
        self.user = build_user()

        log_in_user(self.client, self.user)

        self.pt = core_factories.PatientFactory(case_managers=[self.user])

        self.series_type = factories.VaccineSeriesTypeFactory()
Exemple #9
0
    def test_lab_add_view_no_perm(self):
        """User without lab permissions can't add lab"""
        log_in_user(self.client,
                    build_user([user_factories.NoPermGroupFactory]))

        url = reverse('labs:new-lab', kwargs={'pt_id': self.pt.id})
        response = self.client.get(url, follow=True)
        assert response.status_code == 403
Exemple #10
0
    def setUp(self):

        self.user = build_user()
        log_in_user(self.client, self.user)

        self.note_data = note_dict(user=self.user)

        self.wu = models.Workup.objects.create(**wu_dict(user=self.user))
        self.form_data = note_dict(user=self.user, encounter_pk=False)
Exemple #11
0
    def test_lab_edit_view_no_perm(self):
        """User without lab permissions can't edit lab"""
        log_in_user(self.client,
                    build_user([user_factories.NoPermGroupFactory]))

        lab = self.lab
        url = reverse('labs:lab-edit', kwargs={'pk': lab.id})
        response = self.client.get(url, follow=True)
        assert response.status_code == 403
Exemple #12
0
    def setUp(self):

        self.user = build_user([user_factories.AttendingGroupFactory])
        log_in_user(self.client, self.user)

        models.ClinicType.objects.create(name="Basic Care Clinic")
        models.ClinicDate.objects.create(
            clinic_type=models.ClinicType.objects.first(),
            clinic_date=now().date())
Exemple #13
0
    def setUp(self):

        log_in_user(self.client, build_user())

        models.IncomeRange.objects.create(name="Default")
        models.EducationLevel.objects.create(name="Default")
        models.WorkStatus.objects.create(name="Default")
        models.ResourceAccess.objects.create(name="Default")
        models.ChronicCondition.objects.create(name="Default")
        models.TransportationOption.objects.create(name="Default")
Exemple #14
0
    def setUp(self):

        self.user = build_user()
        log_in_user(self.client, self.user)

        self.note_data = note_dict(user=self.user)

        models.ClinicDate.objects.create(
            clinic_type=models.ClinicType.objects.first(),
            clinic_date=now().date())
Exemple #15
0
    def setUp(self):

        models.ClinicDate.objects.create(
            clinic_type=models.ClinicType.objects.first(),
            clinic_date=now().date())

        self.user = build_user()
        log_in_user(self.client, self.user)

        self.wu = models.Workup.objects.create(**wu_dict(user=self.user))
Exemple #16
0
    def setUp(self):

        # build an attending and a clinical student
        self.attending = build_user([user_factories.AttendingGroupFactory])
        self.clinical_student = build_user()
        log_in_user(self.client, self.attending)

        self.wu_info = dict(chief_complaint="SOB",
                            diagnosis="MI",
                            hpi="A",
                            pmh="B",
                            psh="W",
                            meds="C",
                            allergies="D",
                            fam_hx="E",
                            soc_hx="F",
                            ros="",
                            pe="",
                            a_and_p="")

        # prepare a patient with an unsigned wu today, in addition to
        # what comes in in the fixture

        self.pt2 = Patient.objects.create(
            first_name="Arthur",
            last_name="Miller",
            middle_name="",
            phone='+49 178 236 5288',
            gender=Gender.objects.first(),
            address='Schulstrasse 9',
            city='Munich',
            state='BA',
            zip_code='63108',
            pcp_preferred_zip='63018',
            date_of_birth=datetime.date(1994, 1, 22),
            patient_comfortable_with_english=False,
            preferred_contact_method=ContactMethod.objects.first(),
        )

        EncounterStatus.objects.create(name="Active", is_active=True)

        self.encounter_info = dict(clinic_day=now().date(),
                                   status=EncounterStatus.objects.first())

        Encounter.objects.create(patient=Patient.objects.first(),
                                 **self.encounter_info)

        self.wu2 = Workup.objects.create(
            encounter=Encounter.objects.create(patient=self.pt2,
                                               **self.encounter_info),
            author=self.clinical_student,
            author_type=self.clinical_student.groups.first(),
            patient=self.pt2,
            **self.wu_info)
Exemple #17
0
    def setUp(self):
        self.user = build_user()

        log_in_user(self.client, self.user)

        self.ai = ActionItem.objects.create(
            due_date=datetime.date(2020, 1, 1),
            author=self.user,
            instruction=ActionInstruction.objects.create(
                instruction="Follow up on labs"),
            comments="I hate tests",
            author_type=self.user.groups.first(),
            patient=Patient.objects.all()[0])
Exemple #18
0
    def setUp(self):

        self.user = build_user()

        log_in_user(self.client, self.user)

        self.apt = models.Appointment.objects.create(
            comment='test this stuff',
            clindate=now().date(),
            clintime=time(9, 0),
            appointment_type='PSYCH_NIGHT',
            author=self.user,
            author_type=self.user.groups.first(),
            patient=Patient.objects.first())
Exemple #19
0
    def setUp(self):
        self.user = build_user()

        log_in_user(self.client, self.user)

        self.pt = core_factories.PatientFactory(case_managers=[self.user])

        self.series_type = factories.VaccineSeriesTypeFactory()

        self.series = factories.VaccineSeriesFactory(
            author=self.user,
            author_type=self.user.groups.first(),
            patient=self.pt,
            kind=self.series_type)
Exemple #20
0
    def test_export_dispensing_histories(self):
        export_dispensing_histories_url = reverse('inventory:export-dispensing-history')
        no_perm_group = user_factories.NoPermGroupFactory()
        csv_perm_group = user_factories.PermGroupFactory(permissions=['inventory.export_csv'])

        for group in [no_perm_group, csv_perm_group]:
            log_in_user(self.client, user_factories.UserFactory(groups=[group]))
            response = self.client.post(export_dispensing_histories_url, {'start_date': '2020-09-22','end_date': '2020-09-28'})

            if group == csv_perm_group:
                assert response.status_code == 200
                self.assertEqual(response["Content-Disposition"],
                                 f"attachment; filename=drug-dispensing-history-through-09/28/20.csv")
            else:
                 assert response.status_code == 403
Exemple #21
0
    def setUp(self):
        log_in_user(self.client, build_user())

        self.drug = factories.DrugFactory()

        self.drug_field = {
                        'name': self.drug.name,
                        'unit': self.drug.unit.pk,
                        'dose': self.drug.dose,
                        'stock': self.drug.stock,
                        'expiration_date': self.drug.expiration_date,
                        'lot_number': self.drug.lot_number,
                        'category': self.drug.category.pk,
                        'manufacturer': self.drug.manufacturer.pk
        }
Exemple #22
0
    def test_workup_pdf(self):
        """Verify that pdf download with the correct name
        """

        wu_url = "workup-pdf"

        no_perm_group = user_factories.NoPermGroupFactory()
        pdf_perm_group = user_factories.PermGroupFactory(
            permissions=['workup.export_pdf_Workup'])

        for group in [no_perm_group, pdf_perm_group]:
            log_in_user(self.client,
                        user_factories.UserFactory(groups=[group]))
            response = self.client.get(reverse(wu_url, args=(self.wu.id, )))
            assert response.status_code == 200 if group == pdf_perm_group else 403
Exemple #23
0
    def test_export_csv(self):
        export_csv_url = reverse('inventory:export-csv')
        no_perm_group = user_factories.NoPermGroupFactory()
        csv_perm_group = user_factories.PermGroupFactory(permissions=['inventory.export_csv'])

        for group in [no_perm_group, csv_perm_group]:
            log_in_user(self.client, user_factories.UserFactory(groups=[group]))
            response = self.client.post(export_csv_url)

            if group == csv_perm_group:
                assert response.status_code == 200
                date_list = str(timezone.now().date()).split("-")
                formatted_date = f"{date_list[1]}/{date_list[2]}/{date_list[0][:2]}"
                self.assertEqual(response["Content-Disposition"],
                                 f"attachment; filename=drug-inventory-{formatted_date}.csv")
            else:
                 assert response.status_code == 403
Exemple #24
0
    def test_no_create_on_view_if_USER_IP_is_in_BLACKLIST(self):

        expected_user = log_in_user(self.client, build_user())

        # format is: {X-Forwarded-For: client, proxy1, proxy2}
        USER_IP = '0.0.0.1'
        self.client.get(reverse('home'), HTTP_X_FORWARDED_FOR=USER_IP + ',,')

        n_records = PageviewRecord.objects.count()
        self.assertEqual(n_records, 0)
Exemple #25
0
    def test_workup_submit(self):
        """verify we can submit a valid workup as a signer and nonsigner"""

        for role in user_factories.all_roles:
            user = build_user([role])
            log_in_user(self.client, user)
            pt_id = Patient.objects.first().pk

            wu_count = models.Workup.objects.all().count()
            wu_data = wu_dict(units=True, clinic_day_pk=True, dx_category=True)

            response = self.client.post(reverse('new-workup', args=(pt_id, )),
                                        data=wu_data)
            self.assertRedirects(
                response, reverse("core:patient-detail", args=(pt_id, )))

            can_attest = role in user_factories.attesting_roles
            assert models.Workup.objects.all().count() == wu_count + 1
            assert models.Workup.objects.last().signed() == can_attest
Exemple #26
0
    def setUp(self):
        self.coordinator = build_user([user_factories.CaseManagerGroupFactory])
        log_in_user(self.client, self.coordinator)

        self.pt1 = core_factories.PatientFactory()
        self.pt2 = core_factories.PatientFactory()
        self.pt3 = core_factories.PatientFactory()

        #pt1 has an active encounter today
        self.encounter1 = core_factories.EncounterFactory(patient=self.pt1)
        self.encounter1.order = 1
        #pt2 has an active encounter today
        self.encounter2 = core_factories.EncounterFactory(patient=self.pt2)
        self.encounter2.order = 2
        #pt3 has an inactive encounter today
        self.encounter3 = core_factories.EncounterFactory(
            patient=self.pt3,
            status=core_factories.EncounterStatusFactory(name="Nope",
                                                         is_active=False))
        self.encounter3.order = 3
Exemple #27
0
    def test_workup_signing(self):
        """Verify that signing is possible for attendings, and not for others.
        """

        wu_url = "workup-sign"

        # only attesting roles should be able to sign
        for role in user_factories.attesting_roles:
            assert not self.wu.signed()
            log_in_user(self.client, build_user([role]))
            response = self.client.get(reverse(wu_url, args=(self.wu.id, )))
            self.assertRedirects(
                response,
                reverse('workup', args=(self.wu.id, )),
            )
            is_attesting = role in user_factories.attesting_roles
            assert models.Workup.objects.get(
                pk=self.wu.id).signed() == is_attesting
            self.wu.signer = None
            self.wu.save()
Exemple #28
0
    def setUp(self):
        log_in_user(self.client, build_user())

        self.contact_method = ContactMethod.objects.create(
            name="Carrier Pidgeon")

        self.pt = Patient.objects.create(
            first_name="Juggie",
            last_name="Brodeltein",
            middle_name="Bayer",
            phone='+49 178 236 5288',
            gender=Gender.objects.first(),
            address='Schulstrasse 9',
            city='Munich',
            state='BA',
            zip_code='63108',
            pcp_preferred_zip='63018',
            date_of_birth=datetime.date(1990, 1, 1),
            patient_comfortable_with_english=False,
            preferred_contact_method=self.contact_method,
        )
Exemple #29
0
    def test_lab_edit_view_with_perm(self):
        """User with lab permissions is able to edit lab"""
        log_in_user(self.client,
                    build_user([user_factories.CaseManagerGroupFactory]))

        lab = self.lab
        assert Lab.objects.count() == 1

        url = reverse('labs:lab-edit', kwargs={'pk': lab.id})
        response = self.client.get(url)
        response = self.client.post(url, self.submitted_form_step2)
        assert response.status_code == 302

        # Successfully redirect back to detail view
        url = reverse("labs:lab-detail", kwargs={'pk': lab.id})
        assert response.url == url

        # Successfully edited measurement values without creating a new lab object
        assert Lab.objects.count() == 1
        assert int(
            ContinuousMeasurement.objects.filter(
                measurement_type=self.ua_pH).last().value) == int(
                    self.submitted_form_step2['pH'])
Exemple #30
0
    def setUp(self):
        self.user = build_user()

        log_in_user(self.client, self.user)

        self.pt = core_factories.PatientFactory(case_managers=[self.user])

        self.series_type = factories.VaccineSeriesTypeFactory()

        self.series = factories.VaccineSeriesFactory(
            author=self.user,
            author_type=self.user.groups.first(),
            patient=self.pt,
            kind=self.series_type)

        self.vai = models.VaccineActionItem.objects.create(
            instruction=ActionInstruction.objects.create(
                instruction="Please call"),
            due_date=datetime.date.today(),
            comments="",
            author=self.user,
            author_type=self.user.groups.first(),
            patient=self.pt,
            vaccine=self.series)