Exemple #1
0
    def test_mark_latest_submission_basic(self):
        submission_date = "2017-02-05T00:00:00.000000Z"
        mark_latest_submission(
            self.domain,
            self.user._id,
            self.app_id,
            self.build_id,
            self.version,
            self.metadata,
            submission_date,
        )
        user = CouchUser.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(submission_date),
        )
        self.assertEqual(
            last_submission.app_id,
            self.app_id,
        )
        self.assertEqual(
            last_submission.build_id,
            self.build_id,
        )
        self.assertEqual(
            last_submission.device_id,
            self.metadata['deviceID'],
        )
        self.assertEqual(last_submission.build_version, 2)
Exemple #2
0
    def test_mark_latest_submission_do_not_update(self):
        '''
        Ensures we do not update the user if the received_on date is after the one saved
        '''
        submission_date = "2017-02-05T00:00:00.000000Z"
        previous_date = "2017-02-04T00:00:00.000000Z"

        mark_latest_submission(
            self.domain,
            self.user._id,
            self.app_id,
            self.build_id,
            self.version,
            self.metadata,
            submission_date,
        )
        user = CouchUser.get_by_user_id(self.user._id, self.domain)
        rev = user._rev

        mark_latest_submission(
            self.domain,
            self.user._id,
            self.app_id,
            self.build_id,
            self.version,
            self.metadata,
            previous_date,
        )
        user = CouchUser.get_by_user_id(self.user._id, self.domain)
        new_rev = user._rev

        self.assertEqual(len(user.reporting_metadata.last_submissions), 1)
        self.assertEqual(rev, new_rev)
Exemple #3
0
 def test_mark_latest_submission_error_parsing(self):
     submission_date = "bad-date"
     mark_latest_submission(
         self.domain,
         self.user,
         self.app_id,
         self.build_id,
         self.version,
         self.metadata,
         submission_date,
     )
     self.assertListEqual(self.user.reporting_metadata.last_submissions, [])
Exemple #4
0
def process_reporting_metadata_staging():
    from corehq.apps.users.models import (
        CouchUser,
        UserReportingMetadataStaging,
    )
    from corehq.pillows.synclog import mark_last_synclog
    from pillowtop.processors.form import mark_latest_submission

    records = (
        UserReportingMetadataStaging.objects.select_for_update(skip_locked=True).order_by('pk')
    )[:100]
    with transaction.atomic():
        for record in records:
            user = CouchUser.get_by_user_id(record.user_id, record.domain)
            if not user or user.is_deleted():
                continue

            save = False
            if record.received_on:
                save = mark_latest_submission(
                    record.domain, user, record.app_id, record.build_id,
                    record.xform_version, record.form_meta, record.received_on, save=False
                )
            if record.device_id or record.sync_date:
                save = mark_last_synclog(
                    record.domain, user, record.app_id, record.build_id,
                    record.sync_date, record.device_id, save=False
                )
            if save:
                user.save()

            record.delete()

    if UserReportingMetadataStaging.objects.exists():
        process_reporting_metadata_staging.delay()
Exemple #5
0
    def test_mark_latest_submission_error_parsing(self):
        submission_date = "bad-date"
        mark_latest_submission(
            self.domain,
            self.user._id,
            self.app_id,
            self.build_id,
            self.version,
            self.metadata,
            submission_date,
        )
        self.assertListEqual(self.user.reporting_metadata.last_submissions, [])

        submission_date = "2017-02-05T00:00:00.000000Z"
        mark_latest_submission(
            'bad-domain',
            self.user._id,
            self.app_id,
            self.build_id,
            self.version,
            self.metadata,
            submission_date,
        )
        self.assertListEqual(self.user.reporting_metadata.last_submissions, [])

        mark_latest_submission(
            self.domain,
            'bad-user',
            self.app_id,
            self.build_id,
            self.version,
            self.metadata,
            submission_date,
        )
        self.assertListEqual(self.user.reporting_metadata.last_submissions, [])
Exemple #6
0
 def test_mark_latest_submission_multiple(self):
     submission_date = "2017-02-05T00:00:00.000000Z"
     mark_latest_submission(
         self.domain,
         self.user._id,
         self.app_id,
         self.build_id,
         self.version,
         self.metadata,
         submission_date,
     )
     mark_latest_submission(
         self.domain,
         self.user._id,
         'other-app-id',
         self.build_id,
         self.version,
         self.metadata,
         submission_date,
     )
     user = CouchUser.get_by_user_id(self.user._id, self.domain)
     self.assertEqual(len(user.reporting_metadata.last_submissions), 2)
Exemple #7
0
    def setUpClass(cls):
        super().setUpClass()

        cls.es = get_es_new()
        initialize_index_and_mapping(cls.es, USER_INDEX_INFO)
        initialize_index_and_mapping(cls.es, XFORM_INDEX_INFO)

        today = datetime.datetime.utcnow()

        one_year_ago = add_months_to_date(today.date(), -12)
        enterprise_plan = get_enterprise_software_plan()
        cls.billing_account = get_enterprise_account()
        cls.domains = [
            create_domain('test-emw-settings-001'),
            create_domain('test-emw-settings-002'),
        ]
        add_domains_to_enterprise_account(cls.billing_account, cls.domains,
                                          enterprise_plan, one_year_ago)

        cls.emw_settings = EnterpriseMobileWorkerSettings.objects.create(
            account=cls.billing_account,
            enable_auto_deactivation=True,
        )

        cls.active_user1 = CommCareUser.create(
            domain=cls.domains[0].name,
            username='******',
            password='******',
            created_by=None,
            created_via=None,
            is_active=True,
        )
        cls.active_user2 = CommCareUser.create(
            domain=cls.domains[0].name,
            username='******',
            password='******',
            created_by=None,
            created_via=None,
            is_active=True,
        )
        cls.active_user3 = CommCareUser.create(
            domain=cls.domains[1].name,
            username='******',
            password='******',
            created_by=None,
            created_via=None,
            is_active=True,
        )
        cls.active_user4 = CommCareUser.create(
            domain=cls.domains[1].name,
            username='******',
            password='******',
            created_by=None,
            created_via=None,
            is_active=True,
        )
        cls.active_user5 = CommCareUser.create(
            domain=cls.domains[1].name,
            username='******',
            password='******',
            created_by=None,
            created_via=None,
            is_active=True,
        )
        cls.active_user5.created_on = today - datetime.timedelta(
            days=cls.emw_settings.inactivity_period)
        cls.active_user5.save()
        cls.active_user6 = CommCareUser.create(
            domain=cls.domains[1].name,
            username='******',
            password='******',
            created_by=None,
            created_via=None,
            is_active=True,
        )

        cls.users = [
            cls.active_user1,
            cls.active_user2,
            cls.active_user3,
            cls.active_user4,
            cls.active_user5,
            cls.active_user6,
            CommCareUser.create(domain=cls.domains[0].name,
                                username='******',
                                password='******',
                                created_by=None,
                                created_via=None,
                                is_active=False),
            CommCareUser.create(domain=cls.domains[1].name,
                                username='******',
                                password='******',
                                created_by=None,
                                created_via=None,
                                is_active=False),
        ]

        form_submissions = [
            (TestFormMetadata(
                domain=cls.domains[0].name,
                received_on=today - datetime.timedelta(
                    days=cls.emw_settings.inactivity_period - 1),
                user_id=cls.active_user1.user_id,
                username=cls.active_user1.username,
            ), cls.active_user1),
            (TestFormMetadata(
                domain=cls.domains[0].name,
                received_on=today -
                datetime.timedelta(days=cls.emw_settings.inactivity_period),
                user_id=cls.active_user2.user_id,
                username=cls.active_user2.username,
            ), cls.active_user2),
            (TestFormMetadata(
                domain=cls.domains[1].name,
                received_on=today - datetime.timedelta(
                    days=cls.emw_settings.inactivity_period - 10),
                user_id=cls.active_user3.user_id,
                username=cls.active_user3.username,
            ), cls.active_user3),
            (TestFormMetadata(
                domain=cls.domains[1].name,
                received_on=today - datetime.timedelta(
                    days=cls.emw_settings.inactivity_period + 1),
                user_id=cls.active_user6.user_id,
                username=cls.active_user6.username,
            ), cls.active_user6),
        ]
        for form_metadata, user in form_submissions:
            # ensure users are as old as the received_on dates of their submissions
            user.created_on = form_metadata.received_on
            user.save()
            form_pair = make_es_ready_form(form_metadata)
            send_to_elasticsearch('forms', form_pair.json_form)
            mark_latest_submission(form_metadata.domain, user,
                                   form_metadata.app_id, "build-id", "2",
                                   {'deviceID': 'device-id'},
                                   form_metadata.received_on)

        for user in cls.users:
            fresh_user = CommCareUser.get_by_user_id(user.user_id)
            elastic_user = transform_user_for_elasticsearch(
                fresh_user.to_json())
            send_to_elasticsearch('users', elastic_user)

        cls.es.indices.refresh(USER_INDEX_INFO.alias)
        cls.es.indices.refresh(XFORM_INDEX_INFO.alias)