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])
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}
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}
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])
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))