def test_set_role(self): self.setup_users() import_users_and_groups(self.domain.name, [self._get_spec(role=self.role.name)], [], self.uploading_user, mock.MagicMock(), True) self.assertEqual( self.user.get_role(self.domain_name).name, self.role.name)
def test_upper_case_email(self): self.setup_users() email = '*****@*****.**' import_users_and_groups(self.domain.name, [self._get_spec(email=email)], [], self.uploading_user, mock.MagicMock(), True) self.assertEqual(self.user.email, email.lower())
def test_numeric_user_name(self): """ Test that bulk upload doesn't choke if the user's name is a number """ import_users_and_groups(self.domain.name, [self._get_spec(name=1234)], [], self.uploading_user, mock.MagicMock()) self.assertEqual(self.user.full_name, "1234")
def test_update_pending_user_role(self, mock_send_activation_email): import_users_and_groups(self.domain.name, [ self._get_spec(web_user='******', is_account_confirmed='False', send_confirmation_email='True', role=self.role.name) ], [], self.uploading_user, mock.MagicMock()) self.assertEqual(mock_send_activation_email.call_count, 1) self.assertEqual( self.user.get_role(self.domain_name).name, self.role.name) self.assertEqual( Invitation.by_email('*****@*****.**')[0].role.split(":")[1], self.role._id) added_user_id = self.user._id import_users_and_groups(self.domain.name, [ self._get_spec(web_user='******', user_id=added_user_id, is_account_confirmed='False', send_confirmation_email='True', role=self.other_role.name) ], [], self.uploading_user, mock.MagicMock()) self.assertEqual(mock_send_activation_email.call_count, 1) # invite only sent once self.assertEqual(len(Invitation.by_email('*****@*****.**')), 1) # only one invite associated with user self.assertEqual( self.user.get_role(self.domain.name).name, self.other_role.name) self.assertEqual( Invitation.by_email('*****@*****.**')[0].role, self.other_role.get_qualified_id())
def test_update_user_numeric_username(self): import_users_and_groups(self.domain.name, [self._get_spec(username=123)], [], self.uploading_user, mock.MagicMock()) self.assertIsNotNone( CommCareUser.get_by_username('{}@{}.commcarehq.org'.format( '123', self.domain.name)))
def test_update_user_no_username(self): import_users_and_groups(self.domain.name, [self._get_spec()], [], None) self.assertIsNotNone(self.user) import_users_and_groups( self.domain.name, [self._get_spec(user_id=self.user._id, username='')], [], None)
def test_upload_with_unconfirmed_account_send_email( self, mock_account_confirm_email): import_users_and_groups(self.domain.name, [ self._get_spec( username='******', delete_keys=['is_active'], is_account_confirmed='False', send_confirmation_email='True', ), self._get_spec( username='******', delete_keys=['is_active'], is_account_confirmed='False', send_confirmation_email='False', ), self._get_spec( username='******', delete_keys=['is_active'], is_account_confirmed='False', ), ], [], self.uploading_user, mock.MagicMock()) self.assertEqual(mock_account_confirm_email.call_count, 1) self.assertEqual( 'with_email', mock_account_confirm_email.call_args[0][0].raw_username)
def test_blank_is_active(self): import_users_and_groups( self.domain.name, [self._get_spec(is_active='')], [], ) self.assertTrue(self.user.is_active)
def test_metadata_ignore_system_fields(self): self.setup_locations() import_users_and_groups(self.domain.name, [ self._get_spec(data={'key': 'F#'}, location_code=self.loc1.site_code) ], [], self.uploading_user, mock.MagicMock()) self.assertEqual( self.user.metadata, { 'commcare_project': 'mydomain', 'commcare_location_id': self.loc1.location_id, 'commcare_location_ids': self.loc1.location_id, 'commcare_primary_case_sharing_id': self.loc1.location_id, 'key': 'F#', }) import_users_and_groups(self.domain.name, [ self._get_spec(user_id=self.user.user_id, data={'key': 'G#'}, location_code=self.loc1.site_code) ], [], self.uploading_user, mock.MagicMock()) self.assertEqual( self.user.metadata, { 'commcare_project': 'mydomain', 'key': 'G#', 'commcare_location_id': self.loc1.location_id, 'commcare_location_ids': self.loc1.location_id, 'commcare_primary_case_sharing_id': self.loc1.location_id, })
def test_upper_case_email(self): """ Ensure that bulk upload throws a proper error when the email has caps in it """ email = '*****@*****.**' import_users_and_groups(self.domain.name, [self._get_spec(email=email)], [], None) self.assertEqual(self.user.email, email.lower())
def test_invite_location_add(self): self.setup_users() self.setup_locations() import_users_and_groups(self.domain.name, [ self._get_invited_spec( location_code=[a.site_code for a in [self.loc1]]) ], [], self.uploading_user, mock.MagicMock(), True) self.assertEqual(self.user_invite.supply_point, self.loc1._id)
def test_empty_user_name(self): """ This test confirms that a name of None doesn't set the users name to "None" or anything like that. """ import_users_and_groups(self.domain.name, [self._get_spec(name=None)], [], self.uploading_user, mock.MagicMock()) self.assertEqual(self.user.full_name, "")
def test_remove_uploading_user(self): self.setup_users() import_users_and_groups(self.domain.name, [ self._get_spec(username=self.uploading_user.username, remove='True') ], [], self.uploading_user, mock.MagicMock(), True) web_user = WebUser.get_by_username(self.uploading_user.username) self.assertTrue(web_user.is_member_of(self.domain.name))
def test_upload_with_missing_user_id(self): import_users_and_groups( self.domain.name, [self._get_spec(user_id='missing')], [], ) self.assertIsNone(self.user)
def test_upload_invite_web_user(self, mock_send_activation_email): import_users_and_groups(self.domain.name, [ self._get_spec(web_user='******', is_account_confirmed='False', send_confirmation_email='True', role=self.role.name) ], [], self.uploading_user, mock.MagicMock()) self.assertEqual(mock_send_activation_email.call_count, 1)
def test_set_role(self): import_users_and_groups( self.domain.name, [self._get_spec(role=self.role.name)], [], ) self.assertEqual( self.user.get_role(self.domain_name).name, self.role.name)
def test_web_user_user_name_change(self): self.setup_users() import_users_and_groups(self.domain.name, [self._get_spec(first_name='', last_name='')], [], self.uploading_user, mock.MagicMock(), True) # should not be changed self.assertNotEqual(self.user.first_name, "") self.assertNotEqual(self.user.last_name, "")
def test_update_user_no_username(self): import_users_and_groups(self.domain.name, [self._get_spec()], [], self.uploading_user, mock.MagicMock()) self.assertIsNotNone(self.user) import_users_and_groups( self.domain.name, [self._get_spec(user_id=self.user._id, username='')], [], self.uploading_user, mock.MagicMock())
def test_blank_is_active(self): import_users_and_groups( self.domain.name, [self._get_spec(is_active='')], [], self.uploading_user, mock.MagicMock() ) self.assertTrue(self.user.is_active)
def test_upload_with_unconfirmed_account(self): import_users_and_groups(self.domain.name, [ self._get_spec(delete_keys=['is_active'], is_account_confirmed='False') ], [], self.uploading_user, mock.MagicMock()) user = self.user self.assertIsNotNone(user) self.assertEqual(False, user.is_active) self.assertEqual(False, user.is_account_confirmed)
def test_upload_invite_web_user(self, mock_invitation_class): mock_invite = mock_invitation_class.return_value import_users_and_groups(self.domain.name, [ self._get_spec(web_user='******', is_account_confirmed='False', send_confirmation_email='True', role=self.role.name) ], [], mock.MagicMock()) self.assertTrue(mock_invite.send_activation_email.called)
def test_remove_web_user(self): username = '******' web_user = WebUser.create(self.domain.name, username, 'password', None, None) import_users_and_groups( self.domain.name, [self._get_spec(web_user='******', remove_web_user='******')], [], self.uploading_user, mock.MagicMock()) web_user = WebUser.get_by_username(username) self.assertFalse(web_user.is_member_of(self.domain.name))
def test_remove_invited_user(self): Invitation.objects.all().delete() self.setup_users() import_users_and_groups(self.domain.name, [self._get_invited_spec()], [], self.uploading_user, mock.MagicMock(), True) self.assertIsNotNone(self.user_invite) import_users_and_groups(self.domain.name, [self._get_invited_spec(remove='True')], [], self.uploading_user, mock.MagicMock(), True) self.assertIsNone(self.user_invite)
def test_multi_domain(self): dm = DomainPermissionsMirror(source=self.domain.name, mirror=self.other_domain.name) dm.save() import_users_and_groups( self.domain.name, [self._get_spec(username=123, domain=self.other_domain.name)], [], self.uploading_user, mock.MagicMock()) self.assertIsNotNone( CommCareUser.get_by_username('{}@{}.commcarehq.org'.format( '123', self.other_domain.name)))
def test_upload_edit_web_user(self): username = '******' web_user = WebUser.create(self.domain.name, username, 'password', None, None) import_users_and_groups( self.domain.name, [self._get_spec(web_user='******', role=self.role.name)], [], self.uploading_user, mock.MagicMock()) web_user = WebUser.get_by_username(username) self.assertEqual( web_user.get_role(self.domain.name).name, self.role.name)
def test_location_not_list(self): self.setup_locations() # location_code can also just be string instead of array for single location assignmentss import_users_and_groups( self.domain.name, [self._get_spec(location_code=self.loc1.site_code)], [], None) self.assertEqual(self.user.location_id, self.loc1._id) self.assertEqual(self.user.location_id, self.user.user_data.get('commcare_location_id')) # multiple locations self.assertListEqual([self.loc1._id], self.user.assigned_location_ids)
def test_upload_add_web_user(self, mock_invitation_class): username = '******' web_user = WebUser.create(self.other_domain.name, username, 'password', None, None) mock_invite = mock_invitation_class.return_value import_users_and_groups(self.domain.name, [ self._get_spec(web_user='******', is_account_confirmed='True', role=self.role.name) ], [], self.uploading_user, mock.MagicMock()) web_user = WebUser.get_by_username(username) self.assertFalse(mock_invite.send_activation_email.called) self.assertTrue(web_user.is_member_of(self.domain.name))
def test_web_user_location_add(self): self.setup_users() self.setup_locations() import_users_and_groups(self.domain.name, [ self._get_spec( location_code=[a.site_code for a in [self.loc1, self.loc2]]) ], [], self.uploading_user, mock.MagicMock(), True) membership = self.user.get_domain_membership(self.domain_name) # test that first location should be primary location self.assertEqual(membership.location_id, self.loc1._id) # test for multiple locations self.assertListEqual([loc._id for loc in [self.loc1, self.loc2]], membership.assigned_location_ids)
def test_metadata_profile_blank(self): import_users_and_groups( self.domain.name, [self._get_spec(data={ PROFILE_SLUG: self.profile.id, 'mode': '' })], [], self.uploading_user, mock.MagicMock()) self.assertEqual( self.user.metadata, { 'commcare_project': 'mydomain', 'mode': 'minor', PROFILE_SLUG: self.profile.id, })
def test_tracking_updates(self): self.assertEqual(LogEntry.objects.count(), 0) import_users_and_groups(self.domain.name, [self._get_spec(role=self.role.name)], [], self.uploading_user, mock.MagicMock()) log_entry = LogEntry.objects.order_by('action_time').first() self.assertEqual(log_entry.change_message, f"created_via: {USER_CHANGE_VIA_BULK_IMPORTER}") log_entry = LogEntry.objects.order_by('action_time').last() self.assertEqual( log_entry.change_message, f"role: {self.role.name}[{self.role.get_id}], updated_via: {USER_CHANGE_VIA_BULK_IMPORTER}" )