Exemplo n.º 1
0
    def test_workup_signing(self):
        '''
        Verify that singing is possible for attendings, and not for others.
        '''

        wu_url = "workup-sign"

        self.wu.diagnosis_categories.add(models.DiagnosisType.objects.first())
        self.wu.save()

        # Fresh workups should be unsigned
        self.assertFalse(self.wu.signed())

        # Providers with can_attend == False should not be able to sign
        for nonattesting_role in ["Preclinical", "Clinical", "Coordinator"]:
            log_in_provider(self.client, build_provider([nonattesting_role]))

            response = self.client.get(reverse(wu_url, args=(self.wu.id, )))
            self.assertRedirects(response,
                                 reverse('workup', args=(self.wu.id, )))
            self.assertFalse(models.Workup.objects.get(pk=self.wu.id).signed())

        # Providers able to attend should be able to sign.
        log_in_provider(self.client, build_provider(["Attending"]))

        response = self.client.get(reverse(wu_url, args=(self.wu.id, )))
        self.assertRedirects(
            response,
            reverse('workup', args=(self.wu.id, )),
        )
        # the self.wu has been updated, so we have to hit the db again.
        self.assertTrue(models.Workup.objects.get(pk=self.wu.id).signed())
Exemplo n.º 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 ["Preclinical", "Clinical", "Coordinator", "Attending"]:
            log_in_provider(self.client, build_provider([role]))
            response = self.client.get(
                reverse('workup-update', args=(self.wu.id, )))
            self.assertEqual(response.status_code, 200)

        self.wu.sign(build_provider(["Attending"]).associated_user)
        self.wu.save()

        # nonattesting cannot access
        for role in ["Preclinical", "Clinical", "Coordinator"]:
            log_in_provider(self.client, build_provider([role]))
            response = self.client.get(
                reverse('workup-update', args=(self.wu.id, )))
            self.assertRedirects(response,
                                 reverse('workup', args=(self.wu.id, )))

        # attesting can
        log_in_provider(self.client, build_provider(["Attending"]))
        response = self.client.get(
            reverse('workup-update', args=(self.wu.id, )))
        self.assertEqual(response.status_code, 200)
    def test_core_patient_detail_collapseable(self):
        """Ensure that collapsable AI lists open and close with AIs inside
        """

        build_provider(username='******',
                       password='******',
                       roles=["Attending"])
        self.selenium.get('%s%s' % (self.live_server_url, '/'))
        self.submit_login('timmy', 'password')

        ai_prototype = {
            'instruction': models.ActionInstruction.objects.first(),
            'comments': "",
            'author_type': models.ProviderType.objects.first(),
            'patient': models.Patient.objects.first()
        }

        models.ActionItem.objects.create(
            due_date=now().today(),
            author=models.Provider.objects.first(),
            **ai_prototype)

        yesterday = now().date() - datetime.timedelta(days=1)
        models.ActionItem.objects.create(
            due_date=yesterday,
            author=models.Provider.objects.first(),
            **ai_prototype)

        self.selenium.get(
            '%s%s' %
            (self.live_server_url, reverse('core:patient-detail', args=(1, ))))

        WebDriverWait(self.selenium, 2).until(
            EC.presence_of_element_located((By.ID, 'toggle-collapse5')))

        self.assertFalse(
            self.selenium.find_element_by_id(
                'collapse5').find_element_by_xpath('./ul/li').is_displayed())

        self.assertEqual(
            len(
                self.selenium.find_element_by_id(
                    'collapse5').find_elements_by_xpath('./ul/li')), 2)

        self.selenium.find_element_by_id('toggle-collapse5').click()

        WebDriverWait(self.selenium, 2).until(
            EC.presence_of_element_located(
                (By.XPATH, '//div[@class="panel-collapse collapse in"]')))

        self.assertEqual(
            len(
                self.selenium.find_element_by_id(
                    'collapse5').find_elements_by_xpath('./ul/li')), 2)

        self.assertTrue(
            self.selenium.find_element_by_id(
                'collapse5').find_element_by_xpath('./ul/li').is_displayed())
    def test_core_view_rendering(self):
        '''
        Test that core urls render correctly, as determined by the
        existance of a jumbotron at the top.
        '''
        from . import urls
        from django.urls import NoReverseMatch

        # build a provider and log in.
        build_provider(username='******',
                       password='******',
                       roles=["Attending"])
        self.selenium.get('%s%s' % (self.live_server_url, '/'))
        self.submit_login('timmy', 'password')

        for url in urls.urlpatterns:
            # except 'choose-clintype' and action item modifiers from test
            # since they're redirects.
            if url.name in [
                    'choose-clintype', 'done-action-item', 'reset-action-item',
                    'document-detail', 'document-update', 'update-action-item'
            ]:
                # TODO: add test data for documents so document-detail and
                # document-update can be tested as well.
                continue

            # all the URLs have either one parameter or none. Try one
            # parameter first; if that fails, try with none.
            try:
                self.selenium.get(
                    '%s%s' %
                    (self.live_server_url, reverse(url.name, args=(1, ))))
            except NoReverseMatch:
                self.selenium.get('%s%s' %
                                  (self.live_server_url, reverse(url.name)))

            WebDriverWait(self.selenium, 10).until(
                EC.presence_of_element_located(
                    (By.XPATH, '//div[@class="jumbotron"]')))

            jumbotron_elements = self.selenium.find_elements_by_xpath(
                '//div[@class="jumbotron"]')
            self.assertNotEqual(len(jumbotron_elements),
                                0,
                                msg=" ".join([
                                    "Expected the URL ", url.name,
                                    " to have a jumbotron element."
                                ]))
Exemplo n.º 5
0
    def setUp(self):

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

        self.provider = build_provider()
        log_in_provider(self.client, self.provider)

        self.wu = models.Workup.objects.create(
            clinic_day=models.ClinicDate.objects.first(),
            chief_complaint="SOB",
            diagnosis="MI",
            HPI="A",
            PMH_PSH="B",
            meds="C",
            allergies="D",
            fam_hx="E",
            soc_hx="F",
            ros="",
            pe="",
            A_and_P="",
            author=models.Provider.objects.first(),
            author_type=ProviderType.objects.first(),
            patient=Patient.objects.first())
Exemplo n.º 6
0
    def setUp(self):
        log_in_provider(self.client, build_provider())

        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.")
Exemplo n.º 7
0
    def setUp(self):
        log_in_provider(self.client, build_provider())

        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,
        )
        self.series_type = models.VaccineSeriesType.objects.create(
            name="Hepatitis A")
        self.series = models.VaccineSeries.objects.create(
            author=Provider.objects.first(),
            author_type=ProviderType.objects.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=Provider.objects.first(),
            author_type=ProviderType.objects.first(),
            patient=self.pt,
            vaccine=self.series)
Exemplo n.º 8
0
    def setUp(self):

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

        # roles=["AP", "C", "PV", "CV"])
        self.all_roles_provider = build_provider()

        self.wu = models.Workup.objects.create(
            clinic_day=models.ClinicDate.objects.first(),
            chief_complaint="SOB",
            diagnosis="MI",
            HPI="A",
            PMH_PSH="B",
            meds="C",
            allergies="D",
            fam_hx="E",
            author=Provider.objects.first(),
            soc_hx="F",
            ros="",
            pe="",
            A_and_P="",
            author_type=ProviderType.objects.filter(
                signs_charts=False).first(),
            patient=Patient.objects.first())

        self.pn = models.ProgressNote.objects.create(
            title='Good',
            text='very good',
            author=Provider.objects.first(),
            author_type=ProviderType.objects.filter(
                signs_charts=False).first(),
            patient=Patient.objects.first())
Exemplo n.º 9
0
    def test_all_roles_provider_wu_signing(self):
        # roles=["AP", "C", "PV", "CV"], username=None,
        # password='******', email=None)
        all_roles_provider = build_provider()

        # test that if a provider tries to sign a chart with a provider
        # type they do not have, an error is thrown
        with self.assertRaises(ValueError):
            self.wu.sign(all_roles_provider.associated_user,
                         active_role=ProviderType(long_name="Test Provider",
                                                  short_name="TP",
                                                  signs_charts=False,
                                                  staff_view=False))

        self.assertFalse(self.wu.signed())

        with self.assertRaises(
                ValueError
        ):  # test that with active_role=None, an error is thrown
            self.wu.sign(all_roles_provider.associated_user)

        self.assertFalse(self.wu.signed())

        # test that provider given all roles can sign a chart if their active role allows for it
        self.wu.sign(
            all_roles_provider.associated_user,
            active_role=ProviderType.objects.filter(signs_charts=True).first())

        self.assertTrue(self.wu.signed())
Exemplo n.º 10
0
    def test_one_role_provider_wu_signing(
        self
    ):  # test that provider given one role will use that roll, and can only sign chart if ProviderType allows for it

        for role in [
                "Preclinical", "Clinical", "Coordinator", "Attending"
        ]:  # ProviderType is not Iterable, even though the QuerySet should be iterable?
            one_role_provider = build_provider(roles=[role])
            if one_role_provider.clinical_roles.first().signs_charts:
                self.wu.sign(one_role_provider.associated_user)

                self.assertTrue(self.wu.signed())

            else:  # one_role_provider.signs_charts = False
                with self.assertRaises(ValueError):
                    self.wu.sign(one_role_provider.associated_user)

                self.assertFalse(self.wu.signed())

                with self.assertRaises(
                        ValueError
                ):  # test that a non-Attending provider cannot use the Attending role to sign a chart
                    self.wu.sign(one_role_provider.associated_user,
                                 active_role=ProviderType.objects.filter(
                                     signs_charts=True).first())

                self.assertFalse(self.wu.signed())

            self.wu.signer = None  # reset chart's signed status
Exemplo n.º 11
0
    def setUp(self):

        # build an attending and a clinical student
        self.attending = build_provider(roles=["Attending"],
                                        email='*****@*****.**')
        self.clinical_student = build_provider(roles=["Clinical"],
                                               email='*****@*****.**')
        log_in_provider(self.client, self.attending)

        self.wu_info = dict(chief_complaint="SOB",
                            diagnosis="MI",
                            HPI="A",
                            PMH_PSH="B",
                            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.clinic_today = ClinicDate.objects.create(
            clinic_type=ClinicType.objects.first(), clinic_date=now().date())

        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(),
        )
        self.wu2 = Workup.objects.create(
            clinic_day=self.clinic_today,
            author=self.clinical_student,
            author_type=self.clinical_student.clinical_roles.first(),
            patient=self.pt2,
            **self.wu_info)
Exemplo n.º 12
0
    def setUp(self):
        """ Provides the same context in all the tests """
        log_in_provider(self.client, build_provider())

        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,
        )

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

        self.referral = models.Referral.objects.create(
            comments="Needs his back checked",
            status=models.Referral.STATUS_PENDING,
            kind=reftype,
            author=Provider.objects.first(),
            author_type=ProviderType.objects.first(),
            patient=self.pt
        )
        self.referral.location.add(refloc)

        self.followup_request = models.FollowupRequest.objects.create(
            referral=self.referral,
            contact_instructions="Call him",
            due_date=datetime.date(2018, 9, 1),
            author=Provider.objects.first(),
            author_type=ProviderType.objects.first(),
            patient=self.pt
        )

        self.successful_res = ContactResult.objects.create(
            name="Got him", patient_reached=True)
        self.unsuccessful_res = ContactResult.objects.create(
            name="Disaster", patient_reached=False)
        # Need to update referral location
        self.referral_location = ReferralLocation.objects.create(
            name="Franklin's Back Adjustment",
            address="1435 Sillypants Drive")
        self.noapt_reason = NoAptReason.objects.create(
            name="better things to do")
        self.noshow_reason = NoShowReason.objects.create(
            name="Hella busy.")
Exemplo n.º 13
0
    def test_login(self):
        '''
        Test the login sequence for one clinical role and mulitiple clinical
        roles.
        '''

        build_provider(username='******', password='******')

        # any valid URL should redirect to login at this point.
        self.selenium.get('%s%s' % (self.live_server_url, '/'))
        self.submit_login('jrporter', 'password')

        # now we should have to choose a clinical role
        self.assertEqual(
            self.selenium.current_url,
            '%s%s%s' % (self.live_server_url, reverse('core:choose-clintype'),
                        '?next=' + reverse('dashboard-dispatch')))

        self.selenium.find_element_by_xpath(
            '//input[@value="Coordinator"]').click()
        self.selenium.find_element_by_xpath('//button[@type="submit"]').click()

        # import time
        # time.sleep(10)
        # self.selenium.get_screenshot_as_file('screencap.png')
        WebDriverWait(self.selenium, 10).until(
            EC.presence_of_element_located((By.ID, "id_pt_1_activept")))

        self.assertEqual(self.selenium.current_url,
                         '%s%s' % (self.live_server_url, reverse('home')))

        self.selenium.get('%s%s' % (self.live_server_url, reverse('logout')))

        # make a provider with only one role.
        build_provider(username='******',
                       password='******',
                       roles=["Attending"])

        self.selenium.get('%s%s' % (self.live_server_url, '/'))
        self.submit_login('timmy', 'password')

        # now we should be redirected directly to home.
        self.assertEqual(
            self.selenium.current_url,
            '%s%s' % (self.live_server_url, reverse('dashboard-attending')))
Exemplo n.º 14
0
    def setUp(self):
        self.provider = log_in_provider(
            self.client,
            build_provider())

        models.ClinicType.objects.create(name="Basic Care Clinic")
        models.ClinicDate.objects.create(
            clinic_type=models.ClinicType.objects.first(),
            clinic_date=now().date())
Exemplo n.º 15
0
    def setUp(self):

        log_in_provider(self.client, build_provider())

        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")
Exemplo n.º 16
0
    def setUp(self):
        self.all_roles_provider = build_provider()

        self.apt = models.Appointment.objects.create(
            comment='test this stuff',
            clindate=now().date(),
            author=Provider.objects.first(),
            author_type=ProviderType.objects.filter(
                signs_charts=False).first(),
            patient=Patient.objects.first())
Exemplo n.º 17
0
    def setUp(self):
        log_in_provider(self.client, build_provider())

        self.ai = ActionItem.objects.create(
            due_date=datetime.date(2020, 1, 1),
            author=Provider.objects.first(),
            instruction=ActionInstruction.objects.create(
                instruction="Follow up on labs"),
            comments="I hate tests",
            author_type=ProviderType.objects.all()[0],
            patient=Patient.objects.all()[0])
Exemplo n.º 18
0
    def test_workup_pdf(self):
        """Verify that pdf download with the correct name
        """
        wu_url = "workup-pdf"

        self.wu.diagnosis_categories.add(models.DiagnosisType.objects.first())
        self.wu.save()

        for nonstaff_role in ProviderType.objects.filter(staff_view=False):
            log_in_provider(self.client, build_provider([nonstaff_role]))

            response = self.client.get(reverse(wu_url, args=(self.wu.id, )))

            self.assertRedirects(response,
                                 reverse('workup', args=(self.wu.id, )))

        for staff_role in ProviderType.objects.filter(staff_view=True):
            log_in_provider(self.client, build_provider([staff_role.pk]))
            response = self.client.get(reverse(wu_url, args=(self.wu.id, )))
            assert response.status_code == 200
Exemplo n.º 19
0
    def setUp(self):

        self.all_roles_provider = build_provider()

        for i in range(settings.OSLER_MAX_APPOINTMENTS):
            models.Appointment.objects.create(
                comment=str(i),
                clindate=now().date(),
                author=Provider.objects.first(),
                author_type=ProviderType.objects.filter(
                    signs_charts=False).first(),
                patient=Patient.objects.first())
Exemplo n.º 20
0
    def test_non_signing_provider_wu_signing(
        self
    ):  # test that provider with no roles that allow for signing the chart cannot sign chart

        all_roles_provider = build_provider()

        # self.assertEqual(len(ProviderType.objects.filter(signs_charts=False)), 3)

        with self.assertRaises(ValueError):
            self.wu.sign(all_roles_provider.associated_user,
                         active_role=ProviderType.objects.filter(
                             signs_charts=False).first())

        self.assertFalse(self.wu.signed())
Exemplo n.º 21
0
    def setUp(self):

        self.all_roles_provider = build_provider()

        log_in_provider(self.client, self.all_roles_provider)

        self.apt = models.Appointment.objects.create(
            comment='test this stuff',
            clindate=now().date(),
            clintime=time(9, 0),
            appointment_type='PSYCH_NIGHT',
            author=Provider.objects.first(),
            author_type=ProviderType.objects.filter(
                signs_charts=False).first(),
            patient=Patient.objects.first())
Exemplo n.º 22
0
    def test_progressnote_signing(self):
        """Verify that singing is possible for attendings and not for others.
        """

        sign_url = "progress-note-sign"

        pn = models.ProgressNote.objects.create(
            title='Depression',
            text='so sad does testing work???',
            patient=Patient.objects.first(),
            author=models.Provider.objects.first(),
            author_type=ProviderType.objects.first())

        # Fresh notes should be unsigned
        self.assertFalse(pn.signed())

        # Providers with can_attend == False should not be able to sign
        for nonattesting_role in ["Preclinical", "Clinical", "Coordinator"]:
            log_in_provider(self.client, build_provider([nonattesting_role]))

            response = self.client.get(reverse(sign_url, args=(pn.id, )))
            self.assertRedirects(
                response, reverse('progress-note-detail', args=(pn.id, )))
            self.assertFalse(
                models.ProgressNote.objects.get(pk=pn.id).signed())

        # Providers able to attend should be able to sign.
        log_in_provider(self.client, build_provider(["Attending"]))

        response = self.client.get(reverse(sign_url, args=(pn.id, )))
        self.assertRedirects(
            response,
            reverse('progress-note-detail', args=(pn.id, )),
        )
        # the pn has been updated, so we have to hit the db again.
        self.assertTrue(models.ProgressNote.objects.get(pk=pn.id).signed())
Exemplo n.º 23
0
    def setUp(self):

        provider = build_provider()
        log_in_provider(self.client, provider)

        self.formdata = {
            'title': 'Depression',
            'text': 'so sad does testing work???',
            'patient': Patient.objects.first(),
            'author': provider,
            'author_type': ProviderType.objects.first()
        }

        models.ClinicDate.objects.create(
            clinic_type=models.ClinicType.objects.first(),
            clinic_date=now().date())
Exemplo n.º 24
0
    def setUp(self):
        log_in_provider(self.client, build_provider())

        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,
        )
Exemplo n.º 25
0
    def test_workup_submit(self):
        """verify we can submit a valid workup as a signer and nonsigner"""

        for provider_type in ["Attending", "Clinical"]:
            provider = build_provider([provider_type])
            log_in_provider(self.client, provider)
            pt_id = Patient.objects.first().pk

            wu_count = models.Workup.objects.all().count()
            wu_data = wu_dict(units=True)
            wu_data['diagnosis_categories'] = [
                models.DiagnosisType.objects.first().pk
            ]
            wu_data['clinic_day'] = wu_data['clinic_day'].pk

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

            self.assertEqual(wu_count + 1, models.Workup.objects.all().count())
            self.assertEqual(models.Workup.objects.last().signed(),
                             provider.clinical_roles.first().signs_charts)
Exemplo n.º 26
0
 def setUp(self):
     self.provider = log_in_provider(
         self.client,
         build_provider())
Exemplo n.º 27
0
    def setUp(self):
        # build a provider and log in
        self.provider_password = '******'
        attending = build_provider(username='******',
                                   password=self.provider_password,
                                   roles=["Attending"])
        coordinator = build_provider(username='******',
                                     password=self.provider_password,
                                     roles=["Coordinator"])
        clinical = build_provider(username='******',
                                  password=self.provider_password,
                                  roles=["Clinical"])
        preclinical = build_provider(username='******',
                                     password=self.provider_password,
                                     roles=["Preclinical"])
        self.providers = {
            'attending': attending,
            'coordinator': coordinator,
            'clinical': clinical,
            'preclinical': preclinical
        }

        workup_models.ClinicType.objects.create(name="Basic Care Clinic")

        # various time references used in object creation
        tomorrow = now().date() + datetime.timedelta(days=1)
        yesterday = now().date() - datetime.timedelta(days=1)
        earlier_this_week = now().date() - datetime.timedelta(days=5)
        last_week = now().date() - datetime.timedelta(days=15)

        tomorrow_clindate = workup_models.ClinicDate.objects.create(
            clinic_type=workup_models.ClinicType.objects.first(),
            clinic_date=tomorrow)
        yesterday_clindate = workup_models.ClinicDate.objects.create(
            clinic_type=workup_models.ClinicType.objects.first(),
            clinic_date=yesterday)
        last_week_clindate = workup_models.ClinicDate.objects.create(
            clinic_type=workup_models.ClinicType.objects.first(),
            clinic_date=earlier_this_week)
        # log_in_provider(self.client, build_provider(["Attending"]))

        pt1 = models.Patient.objects.get(pk=1)
        pt1.toggle_active_status()
        pt1.save()
        self.pt1 = pt1

        pt_prototype = {
            'phone': '+49 178 236 5288',
            'gender': models.Gender.objects.all()[1],
            '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': models.ContactMethod.objects.first(),
        }

        self.pt2 = models.Patient.objects.create(first_name="Juggie",
                                                 last_name="Brodeltein",
                                                 middle_name="Bayer",
                                                 **pt_prototype)

        self.pt3 = models.Patient.objects.create(first_name="Asdf",
                                                 last_name="Lkjh",
                                                 middle_name="Bayer",
                                                 **pt_prototype)

        self.pt4 = models.Patient.objects.create(first_name="No",
                                                 last_name="Action",
                                                 middle_name="Item",
                                                 **pt_prototype)

        self.pt5 = models.Patient.objects.create(first_name="No",
                                                 last_name="Workup",
                                                 middle_name="Patient",
                                                 **pt_prototype)
        self.pt5.case_managers.add(coordinator)

        wu_prototype = {
            'chief_complaint': "SOB",
            'diagnosis': "MI",
            'HPI': "",
            'PMH_PSH': "",
            'meds': "",
            'allergies': "",
            'fam_hx': "",
            'soc_hx': "",
            'ros': "",
            'pe': "",
            'A_and_P': "",
            'author': self.providers['coordinator'],
            'author_type':
            self.providers['coordinator'].clinical_roles.first(),
        }

        # Give self.pt2 a workup one day later.
        workup_models.Workup.objects.create(clinic_day=tomorrow_clindate,
                                            patient=self.pt2,
                                            **wu_prototype)

        # Give pt3 a workup one day ago.
        workup_models.Workup.objects.create(clinic_day=yesterday_clindate,
                                            patient=self.pt3,
                                            **wu_prototype)

        # Give pt1 a signed workup five days ago.
        workup_models.Workup.objects.create(clinic_day=last_week_clindate,
                                            patient=pt1,
                                            signer=self.providers['attending'],
                                            **wu_prototype)

        ai_prototype = {
            'author': self.providers['coordinator'],
            'author_type':
            self.providers['coordinator'].clinical_roles.first(),
            'instruction': models.ActionInstruction.objects.first(),
            'comments': ""
        }

        # make pt1 have and AI due tomorrow
        models.ActionItem.objects.create(due_date=tomorrow,
                                         patient=pt1,
                                         **ai_prototype)

        # make self.pt2 have an AI due yesterday
        models.ActionItem.objects.create(due_date=yesterday,
                                         patient=self.pt2,
                                         **ai_prototype)

        # make pt3 have an AI that during the test will be marked done
        models.ActionItem.objects.create(due_date=last_week,
                                         patient=self.pt3,
                                         **ai_prototype)