Пример #1
0
    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)
Пример #2
0
    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)
Пример #3
0
 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
Пример #4
0
    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)
Пример #5
0
    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)