示例#1
0
    def test_for_history_duplication(self):
        """
        Test for history duplication happening after numerous imports over time
        
        The data for this test has been gleaned from the txtalert log being 
        used in production. For some reason imports that should be 'missed' 
        are set as 'rescheduled' and eventhough nothing changes in the 
        appointment, a historical visit is still saved.
        """

        # create the patient for which we'll get the visits
        patient = Patient.objects.create(te_id='02-82088',
                                         age=29,
                                         sex='m',
                                         owner=self.user)

        # importer
        importer = Importer()
        # [importer] 2010-03-18 08:00:37,705 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
        coming_visit = create_instance(
            ComingVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'dr_status': 'false',
                'scheduled_visit_date': '2010-03-24 00:00:00',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_coming_visit = importer.update_local_coming_visit(
            self.user, self.clinic, coming_visit)
        # [importer] 2010-03-18 08:01:39,354 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
        missed_visit = create_instance(
            MissedVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'missed_date': '2010-03-24 00:00:00',
                'dr_status': 'false',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_missed_visit = importer.update_local_missed_visit(
            self.user, self.clinic, missed_visit)
        # [importer] 2010-03-19 08:00:36,876 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
        coming_visit = create_instance(
            ComingVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'dr_status': 'false',
                'scheduled_visit_date': '2010-03-24 00:00:00',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_coming_visit = importer.update_local_coming_visit(
            self.user, self.clinic, coming_visit)
        # [importer] 2010-03-19 08:01:36,747 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
        missed_visit = create_instance(
            MissedVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'missed_date': '2010-03-24 00:00:00',
                'dr_status': 'false',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_missed_visit = importer.update_local_missed_visit(
            self.user, self.clinic, missed_visit)
        # [importer] 2010-03-20 08:00:29,600 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
        coming_visit = create_instance(
            ComingVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'dr_status': 'false',
                'scheduled_visit_date': '2010-03-24 00:00:00',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_coming_visit = importer.update_local_coming_visit(
            self.user, self.clinic, coming_visit)
        # [importer] 2010-03-20 08:01:30,926 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
        missed_visit = create_instance(
            MissedVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'missed_date': '2010-03-24 00:00:00',
                'dr_status': 'false',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_missed_visit = importer.update_local_missed_visit(
            self.user, self.clinic, missed_visit)
        # [importer] 2010-03-21 08:00:28,052 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
        coming_visit = create_instance(
            ComingVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'dr_status': 'false',
                'scheduled_visit_date': '2010-03-24 00:00:00',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_coming_visit = importer.update_local_coming_visit(
            self.user, self.clinic, coming_visit)
        # [importer] 2010-03-21 08:01:33,909 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
        missed_visit = create_instance(
            MissedVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'missed_date': '2010-03-24 00:00:00',
                'dr_status': 'false',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_missed_visit = importer.update_local_missed_visit(
            self.user, self.clinic, missed_visit)
        # [importer] 2010-03-22 08:00:27,711 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
        coming_visit = create_instance(
            ComingVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'dr_status': 'false',
                'scheduled_visit_date': '2010-03-24 00:00:00',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_coming_visit = importer.update_local_coming_visit(
            self.user, self.clinic, coming_visit)
        # [importer] 2010-03-22 08:01:33,549 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
        missed_visit = create_instance(
            MissedVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'missed_date': '2010-03-24 00:00:00',
                'dr_status': 'false',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_missed_visit = importer.update_local_missed_visit(
            self.user, self.clinic, missed_visit)
        # [importer] 2010-03-23 08:00:26,453 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
        coming_visit = create_instance(
            ComingVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'dr_status': 'false',
                'scheduled_visit_date': '2010-03-24 00:00:00',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_coming_visit = importer.update_local_coming_visit(
            self.user, self.clinic, coming_visit)
        # [importer] 2010-03-23 08:01:36,731 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
        missed_visit = create_instance(
            MissedVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'missed_date': '2010-03-24 00:00:00',
                'dr_status': 'false',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_missed_visit = importer.update_local_missed_visit(
            self.user, self.clinic, missed_visit)
        # [importer] 2010-03-25 09:00:41,774 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
        coming_visit = create_instance(
            ComingVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'dr_status': 'false',
                'scheduled_visit_date': '2010-03-24 00:00:00',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_coming_visit = importer.update_local_coming_visit(
            self.user, self.clinic, coming_visit)
        # [importer] 2010-03-25 09:00:41,850 DEBUG Updating existing Visit: 37361 / ({'date': datetime.date(2010, 3, 24), 'updated_at': datetime.datetime(2010, 3, 23, 8, 1, 36)} vs {'status': u'r', 'comment': u'', 'visit_type': u'', 'deleted': 0, 'created_at': datetime.datetime(2010, 3, 18, 8, 0, 37), 'updated_at': datetime.datetime(2010, 3, 23, 8, 1, 36), 'te_visit_id': u'02-091967084', 'date': datetime.date(2010, 3, 24), 'id': 37361L})
        # [importer] 2010-03-25 09:01:40,902 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
        missed_visit = create_instance(
            MissedVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'missed_date': '2010-03-24 00:00:00',
                'dr_status': 'false',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_missed_visit = importer.update_local_missed_visit(
            self.user, self.clinic, missed_visit)

        visit = patient.visit_set.latest()

        self.assertEquals(visit.status, 'm')
        self.assertEquals(visit.history.count(), 1)

        done_visit = create_instance(
            DoneVisit, {
                'dr_site_name': '',
                'dr_site_id': '',
                'done_date': '2010-03-24 00:00:00',
                'scheduled_date': '2010-03-24 00:00:00',
                'dr_status': 'false',
                'key_id': '02-091967084',
                'te_id': '02-82088'
            })
        local_done_visit = importer.update_local_done_visit(
            self.user, self.clinic, done_visit)

        visit = patient.visit_set.latest()
        self.assertEquals(visit.status, 'a')
        self.assertEquals(visit.history.count(), 2)
示例#2
0
 def test_for_history_duplication(self):
     """
     Test for history duplication happening after numerous imports over time
     
     The data for this test has been gleaned from the txtalert log being 
     used in production. For some reason imports that should be 'missed' 
     are set as 'rescheduled' and eventhough nothing changes in the 
     appointment, a historical visit is still saved.
     """
     
     # create the patient for which we'll get the visits
     patient = Patient.objects.create(te_id='02-82088', age=29, sex='m',
                                         owner=self.user)
     
     # importer
     importer = Importer()
     # [importer] 2010-03-18 08:00:37,705 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
     coming_visit = create_instance(ComingVisit, {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_coming_visit = importer.update_local_coming_visit(self.user, self.clinic, coming_visit)
     # [importer] 2010-03-18 08:01:39,354 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
     missed_visit = create_instance(MissedVisit, {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_missed_visit = importer.update_local_missed_visit(self.user, self.clinic, missed_visit)
     # [importer] 2010-03-19 08:00:36,876 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
     coming_visit = create_instance(ComingVisit, {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_coming_visit = importer.update_local_coming_visit(self.user, self.clinic, coming_visit)
     # [importer] 2010-03-19 08:01:36,747 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
     missed_visit = create_instance(MissedVisit, {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_missed_visit = importer.update_local_missed_visit(self.user, self.clinic, missed_visit)
     # [importer] 2010-03-20 08:00:29,600 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
     coming_visit = create_instance(ComingVisit, {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_coming_visit = importer.update_local_coming_visit(self.user, self.clinic, coming_visit)
     # [importer] 2010-03-20 08:01:30,926 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
     missed_visit = create_instance(MissedVisit, {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_missed_visit = importer.update_local_missed_visit(self.user, self.clinic, missed_visit)
     # [importer] 2010-03-21 08:00:28,052 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
     coming_visit = create_instance(ComingVisit, {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_coming_visit = importer.update_local_coming_visit(self.user, self.clinic, coming_visit)
     # [importer] 2010-03-21 08:01:33,909 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
     missed_visit = create_instance(MissedVisit, {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_missed_visit = importer.update_local_missed_visit(self.user, self.clinic, missed_visit)
     # [importer] 2010-03-22 08:00:27,711 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
     coming_visit = create_instance(ComingVisit, {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_coming_visit = importer.update_local_coming_visit(self.user, self.clinic, coming_visit)
     # [importer] 2010-03-22 08:01:33,549 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
     missed_visit = create_instance(MissedVisit, {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_missed_visit = importer.update_local_missed_visit(self.user, self.clinic, missed_visit)
     # [importer] 2010-03-23 08:00:26,453 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
     coming_visit = create_instance(ComingVisit, {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_coming_visit = importer.update_local_coming_visit(self.user, self.clinic, coming_visit)
     # [importer] 2010-03-23 08:01:36,731 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
     missed_visit = create_instance(MissedVisit, {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_missed_visit = importer.update_local_missed_visit(self.user, self.clinic, missed_visit)
     # [importer] 2010-03-25 09:00:41,774 DEBUG Processing coming Visit {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'}
     coming_visit = create_instance(ComingVisit, {'dr_site_name': '', 'dr_site_id': '', 'dr_status': 'false', 'scheduled_visit_date': '2010-03-24 00:00:00', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_coming_visit = importer.update_local_coming_visit(self.user, self.clinic, coming_visit)
     # [importer] 2010-03-25 09:00:41,850 DEBUG Updating existing Visit: 37361 / ({'date': datetime.date(2010, 3, 24), 'updated_at': datetime.datetime(2010, 3, 23, 8, 1, 36)} vs {'status': u'r', 'comment': u'', 'visit_type': u'', 'deleted': 0, 'created_at': datetime.datetime(2010, 3, 18, 8, 0, 37), 'updated_at': datetime.datetime(2010, 3, 23, 8, 1, 36), 'te_visit_id': u'02-091967084', 'date': datetime.date(2010, 3, 24), 'id': 37361L})
     # [importer] 2010-03-25 09:01:40,902 DEBUG Processing missed Visit: {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'}
     missed_visit = create_instance(MissedVisit, {'dr_site_name': '', 'dr_site_id': '', 'missed_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_missed_visit = importer.update_local_missed_visit(self.user, self.clinic, missed_visit)
     
     visit = patient.visit_set.latest()
     
     self.assertEquals(visit.status, 'm')
     self.assertEquals(visit.history.count(), 1)
     
     done_visit = create_instance(DoneVisit, {'dr_site_name': '', 'dr_site_id': '', 'done_date': '2010-03-24 00:00:00', 'scheduled_date': '2010-03-24 00:00:00', 'dr_status': 'false', 'key_id': '02-091967084', 'te_id': '02-82088'})
     local_done_visit = importer.update_local_done_visit(self.user, self.clinic, done_visit)
     
     visit = patient.visit_set.latest()
     self.assertEquals(visit.status, 'a')
     self.assertEquals(visit.history.count(), 2)
示例#3
0
class VisitImportTestCase(TestCase):
    fixtures = ['patients.json', 'clinics.json', 'visits.json',]
    
    def setUp(self):
        self.clinic = Clinic.objects.get(te_id='01')
        self.importer = Importer()
        self.user = User.objects.get(username='******')
    
    def testInvalidImport(self):
        """attempt import of an invalid record"""
        self.assertRaises(Patient.DoesNotExist,         # exception
            self.importer.update_local_coming_visit,    # callback
            self.user,                                  # args
            self.clinic,                                
            create_instance(                            
                ComingVisit, {
                'key_id': '123456789', 
                'te_id': '01-1245', 
                'scheduled_visit_date':'2080-26 00:00:00'
            })
        )
    
    def testNewVisit(self):
        """import a new visit"""
        visit = self.importer.update_local_coming_visit(
            self.user,
            self.clinic,
            create_instance(ComingVisit, {
                'key_id': '02-123456789', 
                'te_id': '01-12345', 
                'scheduled_visit_date': '2100-06-01 00:00:00'
            })
        )
        visit = reload_record(visit)
        self.assertEqual(visit.history.latest().get_history_type_display(), 
                            'Created')
        self.assertEquals(visit.te_visit_id, '02-123456789')
        self.assertEquals(visit.patient.te_id, '01-12345')
        self.assertEquals(visit.date, date(2100, 6, 1))
    
    def testIndicateReschedule(self):
        """reschedule a visit"""
        missed_future_date = date(2200,5,1)
        # make sure we have a visit to reschedule
        original_visit = Visit.objects.get(te_visit_id='01-123456789')
        # make sure the updated date is actually in the future
        self.assertTrue(original_visit.date < missed_future_date)
        visit = self.importer.update_local_missed_visit(
            self.user,
            self.clinic,
            create_instance(MissedVisit, {
                'key_id': '01-123456789', 
                'te_id': '01-12345', 
                'missed_date': '%s 00:00:00' % missed_future_date # future date should be seen as a reschedule
            })
        )
        visit = reload_record(visit)
        self.assertEqual(visit.history.latest().get_history_type_display(), 
                            'Changed')
        self.assertEquals(visit.status, 'r')
        self.assertEquals(visit.date, date(2200, 5, 1))
    
    def testIndicateMissed(self):
        """indicate a missed visit"""
        visit = self.importer.update_local_missed_visit(
            self.user,
            self.clinic, 
            create_instance(MissedVisit, {
                'key_id': '01-123456799', 
                'te_id': '01-12345', 
                'missed_date': date.today().strftime('%Y-%m-%d 00:00:00')
            })
        )
        visit = reload_record(visit)
        # event = importMissedVisit(self.event, self.clinic, {'key_id':'01-123456789', 'te_id':'01-12345', 'missed_date':'2100-06-01 00:00:00'})
        self.assertEqual(visit.history.latest().get_history_type_display(), 
                            'Created')
        self.assertEquals(visit.status, 'm')
        self.assertEquals(visit.date, date.today())
    
    def testIndicateAttended(self):
        """indicate an attended visit"""
        visit = self.importer.update_local_done_visit(
            self.user,
            self.clinic, 
            create_instance(DoneVisit, {
                'key_id': '01-123456789', 
                'te_id': '01-12345', 
                'done_date': '2100-07-01 00:00:00'
            })
        )
        visit = reload_record(visit)
        self.assertEquals(visit.history.latest().get_history_type_display(),
                            'Changed')
        self.assertEquals(visit.status, 'a')
        self.assertEquals(visit.date, date(2100, 7, 1))
    
    def testIndicateNewAttended(self):
        """indicate a new attended visit"""
        visit = self.importer.update_local_done_visit(
            self.user,
            self.clinic,
            create_instance(DoneVisit, {
                'key_id': '02-123456789', 
                'te_id': '01-12345', 
                'done_date': '2100-07-01 00:00:00'
            })
        )
        visit = reload_record(visit)
        self.assertEqual(visit.history.latest().get_history_type_display(), 
                            'Created')
        self.assertEquals(visit.status, 'a')
        self.assertEquals(visit.date, date(2100, 7, 1))
    
    def testIndicateNewMissed(self):
        # indicate a new attended visit
        yesterday = date.today() - timedelta(days=1)
        visit = self.importer.update_local_missed_visit(
            self.user,
            self.clinic,
            create_instance(MissedVisit, {
                'key_id': '02-123456789', 
                'te_id': '01-12345', 
                'missed_date': yesterday.strftime('%Y-%m-%d 00:00:00')
            })
        )
        visit = reload_record(visit)
        self.assertEqual(visit.history.latest().get_history_type_display(), 
                            'Created')
        self.assertEquals(visit.status, 'm')
        self.assertEquals(visit.date, yesterday)
    
    def testDelete(self):
        """delete a visit"""
        visit = self.importer.update_local_deleted_visit(self.user, create_instance(DeletedVisit, {
            'key_id': '01-123456789', 
            'te_id': '01-12345'
        }))
        
        self.assertEqual(visit.deleted, True)
        self.assertEqual(visit.history.latest().get_history_type_display(), 
                            'Changed')          # it is Changed because of the soft delete
        self.assertRaises(Visit.DoesNotExist,   # exception
                            Visit.objects.get,  # callback
                            pk=visit.pk         # args
                        )