Exemple #1
0
    def test_primary_location_replace(self):
        self.setup_locations()
        # first assign to loc1
        create_or_update_users_and_groups(self.domain.name, [
            self._get_spec(
                location_code=[a.site_code for a in [self.loc1, self.loc2]])
        ], self.uploading_user)

        # user's primary location should be loc1
        self.assertEqual(self.user.location_id, self.loc1._id)
        self.assertEqual(self.user.metadata.get('commcare_location_id'),
                         self.loc1._id)
        self.assertEqual(self.user.metadata.get('commcare_location_ids'),
                         " ".join([self.loc1._id, self.loc2._id]))
        self.assertListEqual(self.user.assigned_location_ids,
                             [self.loc1._id, self.loc2._id])

        # reassign to loc2
        create_or_update_users_and_groups(self.domain.name, [
            self._get_spec(location_code=[self.loc2.site_code],
                           user_id=self.user._id)
        ], self.uploading_user)

        # user's location should now be loc2
        self.assertEqual(self.user.location_id, self.loc2._id)
        self.assertEqual(self.user.metadata.get('commcare_location_ids'),
                         self.loc2._id)
        self.assertEqual(self.user.metadata.get('commcare_location_id'),
                         self.loc2._id)
        self.assertListEqual(self.user.assigned_location_ids, [self.loc2._id])
Exemple #2
0
def import_users_and_groups(domain, user_specs, group_specs):
    from corehq.apps.user_importer.importer import create_or_update_users_and_groups, create_or_update_groups
    task = import_users_and_groups
    DownloadBase.set_progress(task, 0, 100)

    total = len(user_specs) + len(group_specs)
    DownloadBase.set_progress(task, 0, total)

    group_memoizer, group_results = create_or_update_groups(
        domain, group_specs)

    DownloadBase.set_progress(task, len(group_specs), total)

    def _update_progress(value, start=0):
        DownloadBase.set_progress(task, start + value, total)

    user_results = create_or_update_users_and_groups(
        domain,
        user_specs,
        group_memoizer=group_memoizer,
        update_progress=functools.partial(_update_progress,
                                          start=len(group_specs)))
    results = {
        'errors': group_results['errors'] + user_results['errors'],
        'rows': user_results['rows']
    }
    DownloadBase.set_progress(task, total, total)
    return {'messages': results}
Exemple #3
0
def import_users_and_groups(domain, user_specs, group_specs, upload_user,
                            upload_record_id):
    from corehq.apps.user_importer.importer import create_or_update_users_and_groups, create_or_update_groups
    task = import_users_and_groups
    DownloadBase.set_progress(task, 0, 100)

    total = len(user_specs) + len(group_specs)
    DownloadBase.set_progress(task, 0, total)

    group_memoizer, group_results = create_or_update_groups(
        domain, group_specs)

    DownloadBase.set_progress(task, len(group_specs), total)

    def _update_progress(value, start=0):
        DownloadBase.set_progress(task, start + value, total)

    user_results = create_or_update_users_and_groups(
        domain,
        user_specs,
        upload_user=upload_user,
        group_memoizer=group_memoizer,
        update_progress=functools.partial(_update_progress,
                                          start=len(group_specs)))
    results = {
        'errors': group_results['errors'] + user_results['errors'],
        'rows': user_results['rows']
    }
    upload_record = UserUploadRecord.objects.using(DEFAULT_DB_ALIAS).get(
        pk=upload_record_id)
    upload_record.task_id = import_users_and_groups.request.id
    upload_record.status = results
    upload_record.save()
    DownloadBase.set_progress(task, total, total)
    return {'messages': results}
Exemple #4
0
    def test_location_unknown_site_code(self):
        self.setup_locations()

        # location_code should be an array of multiple excel columns
        # with self.assertRaises(UserUploadError):
        result = create_or_update_users_and_groups(
            self.domain.name, [self._get_spec(location_code='unknownsite')],
            self.uploading_user)
        self.assertEqual(len(result["rows"]), 1)
    def test_location_replace(self):
        self.setup_locations()

        # first assign to loc1
        create_or_update_users_and_groups(
            self.domain.name,
            [self._get_spec(location_code=[self.loc1.site_code])])

        # reassign to loc2
        create_or_update_users_and_groups(self.domain.name, [
            self._get_spec(location_code=[self.loc2.site_code],
                           user_id=self.user._id)
        ])

        # user's location should now be loc2
        self.assertEqual(self.user.location_id, self.loc2._id)
        self.assertEqual(self.user.user_data.get('commcare_location_id'),
                         self.loc2._id)
        self.assertListEqual(self.user.assigned_location_ids, [self.loc2._id])
Exemple #6
0
    def test_bulk_upload_usercases(self):
        self.user.username = format_username('bushy_top', TEST_DOMAIN)
        self.user.save()
        user_upload = [{
            'username': self.user.raw_username,
            'user_id': self.user.user_id,
            'name': 'James McNulty',
            'language': None,
            'is_active': 'True',
            'phone-number': self.user.phone_number,
            'password': 123,
            'email': None
        }, {
            'username': '******',
            'user_id': '',
            'name': 'William Moreland',
            'language': None,
            'is_active': 'True',
            'phone-number': '23424123',
            'password': 123,
            'email': None
        }]
        results = create_or_update_users_and_groups(TEST_DOMAIN,
                                                    list(user_upload), None)
        self.assertEqual(results['errors'], [])

        accessor = CaseAccessors(TEST_DOMAIN)
        old_user_case = accessor.get_case_by_domain_hq_user_id(
            self.user._id, USERCASE_TYPE)
        self.assertEqual(old_user_case.owner_id, self.user.get_id)
        self.assertEqual(2, len(old_user_case.xform_ids))

        new_user = CommCareUser.get_by_username(
            format_username('the_bunk', TEST_DOMAIN))
        self.addCleanup(new_user.delete)
        new_user_case = accessor.get_case_by_domain_hq_user_id(
            new_user._id, USERCASE_TYPE)
        self.assertEqual(new_user_case.owner_id, new_user.get_id)
        self.assertEqual(1, len(new_user_case.xform_ids))