def test_pillow(self): from corehq.apps.change_feed.topics import get_topic_offset from corehq.pillows.synclog import get_user_sync_history_pillow consumer = get_test_kafka_consumer(topics.SYNCLOG_SQL) # get the seq id before the change is published kafka_seq = get_topic_offset(topics.SYNCLOG_SQL) # make sure user has empty reporting-metadata before a sync ccuser = CommCareUser.get(self.ccuser._id) self.assertEqual(ccuser.reporting_metadata.last_syncs, []) # do a sync synclog = SimplifiedSyncLog(domain=self.domain.name, user_id=self.ccuser._id, date=datetime.datetime(2015, 7, 1, 0, 0), app_id='123') synclog.save() # make sure kafka change updates the user with latest sync info message = next(consumer) change_meta = change_meta_from_kafka_message(message.value) synclog = self._get_latest_synclog() self.assertEqual(change_meta.document_id, synclog._id) self.assertEqual(change_meta.domain, self.domain.name) # make sure processor updates the user correctly pillow = get_user_sync_history_pillow() pillow.process_changes(since=kafka_seq) process_reporting_metadata_staging() ccuser = CommCareUser.get(self.ccuser._id) self.assertEqual(len(ccuser.reporting_metadata.last_syncs), 1) self.assertEqual(ccuser.reporting_metadata.last_syncs[0].sync_date, synclog.date) self.assertEqual(ccuser.reporting_metadata.last_sync_for_user.sync_date, synclog.date)
def _test_heartbeat(self, num_submissions): sync_date = datetime.utcnow() UserReportingMetadataStaging.add_heartbeat( self.domain, self.user._id, self.metadata.app_id, '123', sync_date, 'heartbeat_device_id', 230, 2, 10, 'CommCare 2.28', 'en') self.assertEqual(UserReportingMetadataStaging.objects.count(), 1) self.assertEqual(UserReportingMetadataStaging.objects.first().user_id, self.user._id) process_reporting_metadata_staging() self.assertEqual(UserReportingMetadataStaging.objects.count(), 0) ccuser = CommCareUser.get_by_user_id(self.user._id, self.domain) self.assertEqual(len(ccuser.reporting_metadata.last_submissions), num_submissions) self.assertEqual(len(ccuser.reporting_metadata.last_syncs), 1) self.assertEqual(ccuser.reporting_metadata.last_syncs[0].sync_date, sync_date) self.assertEqual( ccuser.reporting_metadata.last_sync_for_user.sync_date, sync_date) self.assertEqual(ccuser.last_device.device_id, 'heartbeat_device_id') app_meta = ccuser.last_device.get_last_used_app_meta() self.assertEqual(app_meta.num_unsent_forms, 2) self.assertEqual(app_meta.num_quarantined_forms, 10)
def _do_request(self, user, device_id, app_id=None, app_version=1, last_sync='', unsent_forms=0, quarantined_forms=0, cc_version='2.39', url=None, response_code=200): url = url or self.url resp = self.client.get( url, { 'app_id': app_id or self.app.get_id, 'app_version': app_version, 'device_id': device_id, 'last_sync_time': last_sync, 'num_unsent_forms': unsent_forms, 'num_quarantined_forms': quarantined_forms, 'cc_version': cc_version }, **self._auth_headers(user)) self.assertEqual(resp.status_code, response_code) process_reporting_metadata_staging() return resp
def test_app_metadata_tracker(self): form, metadata = self._create_form_and_sync_to_es() self.assertEqual(UserReportingMetadataStaging.objects.count(), 1) self.assertEqual(UserReportingMetadataStaging.objects.first().user_id, self.user._id) # Test two forms before updating form, metadata = self._create_form_and_sync_to_es() self.assertEqual(UserReportingMetadataStaging.objects.count(), 1) self.assertEqual(UserReportingMetadataStaging.objects.first().user_id, self.user._id) self.assertEqual( 0, PillowError.objects.filter(pillow=self.pillow_id).count()) process_reporting_metadata_staging() self.assertEqual(UserReportingMetadataStaging.objects.count(), 0) user = CommCareUser.get_by_user_id(self.user._id, self.domain) self.assertEqual(len(user.reporting_metadata.last_submissions), 1) last_submission = user.reporting_metadata.last_submissions[0] self.assertEqual( last_submission.submission_date, string_to_utc_datetime(self.metadata.received_on), ) self.assertEqual(last_submission.app_id, self.metadata.app_id)
def test_app_metadata_tracker_synclog_processed(self): UserReportingMetadataStaging.add_sync( self.domain, self.user._id, self.metadata.app_id, '123', datetime.utcnow(), self.metadata.device_id ) form, metadata = self._create_form_and_sync_to_es() self.assertEqual(UserReportingMetadataStaging.objects.count(), 1) self.assertEqual(UserReportingMetadataStaging.objects.first().user_id, self.user._id) process_reporting_metadata_staging() self.assertEqual(UserReportingMetadataStaging.objects.count(), 0) user = CommCareUser.get_by_user_id(self.user._id, self.domain) self.assertEqual(len(user.reporting_metadata.last_submissions), 1) last_submission = user.reporting_metadata.last_submissions[0] self.assertEqual( last_submission.submission_date, string_to_utc_datetime(self.metadata.received_on), ) self.assertEqual(last_submission.app_id, self.metadata.app_id)