def test_users_domain_membership(self): web_user = WebUser.create( self.domain.name, f'webuser@{self.domain.name}.{HQ_ACCOUNT_ROOT}', '******', created_by=None, created_via=None) another_domain = Domain(name="another-test", is_active=True) another_domain.save() self.addCleanup(another_domain.delete) # add more than 1 domain membership to trigger _log_web_user_membership_removed in tests web_user.add_domain_membership(another_domain.name) web_user.save() self.domain.delete() user_history = UserHistory.objects.last() self.assertEqual(user_history.by_domain, None) self.assertEqual(user_history.for_domain, self.domain.name) self.assertEqual(user_history.changed_by, SYSTEM_USER_ID) self.assertEqual(user_history.user_id, web_user.get_id) self.assertEqual(user_history.change_messages, UserChangeMessage.domain_removal(self.domain.name)) self.assertEqual( user_history.changed_via, 'corehq.apps.domain.deletion._delete_web_user_membership') self.assertEqual(user_history.changes, {})
def post(self, request, *args, **kwargs): if self.request.couch_user.is_domain_admin(self.domain_to_remove): messages.error( request, _("Unable remove membership because you are the admin of %s") % self.domain_to_remove) else: try: self.request.couch_user.delete_domain_membership( self.domain_to_remove, create_record=True) self.request.couch_user.save() log_user_change( by_domain=None, for_domain=self.domain_to_remove, couch_user=request.couch_user, changed_by_user=request.couch_user, changed_via=USER_CHANGE_VIA_WEB, change_messages=UserChangeMessage.domain_removal( self.domain_to_remove), by_domain_required_for_log=False, ) messages.success( request, _("You are no longer part of the project %s") % self.domain_to_remove) except Exception: messages.error( request, _("There was an error removing you from this project.")) return self.get(request, *args, **kwargs)
def remove_web_user_from_domain(domain, user, username, upload_user, user_change_logger=None, is_web_upload=False): if not user or not user.is_member_of(domain): if is_web_upload: remove_invited_web_user(domain, username) if user_change_logger: user_change_logger.add_info( UserChangeMessage.invitation_revoked_for_domain(domain)) else: raise UserUploadError( _("You cannot remove a web user that is not a member of this project." " {web_user} is not a member.").format(web_user=user)) elif username == upload_user.username: raise UserUploadError( _("You cannot remove yourself from a domain via bulk upload")) else: user.delete_domain_membership(domain) user.save() if user_change_logger: user_change_logger.add_info( UserChangeMessage.domain_removal(domain))
def _log_web_user_membership_removed(user, domain, via): log_user_change(by_domain=None, for_domain=domain, couch_user=user, changed_by_user=SYSTEM_USER_ID, changed_via=via, change_messages=UserChangeMessage.domain_removal(domain))