def test_existing_user_invitation_accepted(self): """ SsoBackend should create a new user if the username passed to does not exist and the email domain matches an AuthenticatedEmailDomain for the given IdentityProvider. It should also ensure that any user data from a registration form and/or the samlUserdata are all properly saved to the User model. """ admin_role = UserRole.admin_role(domain=self.domain.name) existing_user = WebUser.create(None, '*****@*****.**', 'testpwd', None, None) invitation = Invitation( domain=self.domain.name, email=existing_user.username, invited_by=self.user.couch_id, invited_on=datetime.datetime.utcnow(), role=admin_role.get_qualified_id(), ) invitation.save() AsyncSignupRequest.create_from_invitation(invitation) user = auth.authenticate( request=self.request, username=invitation.email, idp_slug=self.idp.slug, is_handshake_successful=True, ) self.assertIsNotNone(user) self.assertEqual(user.username, invitation.email) self.assertEqual(self.request.sso_new_user_messages['success'], [ f'You have been added to the "{invitation.domain}" project space.', ])
def get_editable_role_choices(domain, couch_user, allow_admin_role, use_qualified_id=True): """ :param domain: roles for domain :param couch_user: user accessing the roles :param allow_admin_role: to include admin role, in case user is admin :param use_qualified_id: use role's qualified id as the id for the choice else the db id """ def role_to_choice(role): return (role.get_qualified_id() if use_qualified_id else role.get_id, role.name or _('(No Name)')) roles = UserRole.by_domain(domain) if not couch_user.is_domain_admin(domain): try: user_role = couch_user.get_role(domain) except DomainMembershipError: user_role = None user_role_id = user_role.get_id if user_role else None roles = [ role for role in roles if role.accessible_by_non_admin_role(user_role_id) ] elif allow_admin_role: roles = [UserRole.admin_role(domain)] + roles return [role_to_choice(role) for role in roles]
def test_new_user_created_and_invitation_accepted(self): """ When SsoBackend creates a new user and an invitation is present, that invitation should add the user to the invited project space and accept the invitation """ admin_role = UserRole.admin_role(self.domain.name) invitation = Invitation( domain=self.domain.name, email='*****@*****.**', invited_by=self.user.couch_id, invited_on=datetime.datetime.utcnow(), role=admin_role.get_qualified_id(), ) invitation.save() AsyncSignupRequest.create_from_invitation(invitation) generator.store_full_name_in_saml_user_data(self.request, 'Isa', 'Baas') user = auth.authenticate( request=self.request, username=invitation.email, idp_slug=self.idp.slug, is_handshake_successful=True, ) self.assertIsNotNone(user) self.assertEqual(user.username, invitation.email) self.assertEqual(user.first_name, 'Isa') self.assertEqual(user.last_name, 'Baas') self.assertEqual(self.request.sso_new_user_messages['success'], [ f'User account for {invitation.email} created.', f'You have been added to the "{invitation.domain}" project space.', ])