def test_generate(self): session = Client().session() association = Association(name='crazy train') session.add(association) session.flush() invite = AssociationInvite.generate(association.association_id, '*****@*****.**')
def test_invite_a_user_who_has_been_invited_to_that_association(self, user): session = Client().session() watercooler = Association(name='watercooler') session.add(watercooler) session.flush() session.add(UserAssociation(user_id=user.user_id, association_id=watercooler.association_id)) session.flush() AssociationInvite.generate(watercooler.association_id, '*****@*****.**') response = self.app.post( '/association/{0}/invite_user'.format(watercooler.association_id), data={'email': '*****@*****.**'}) eq_(response.status_code, 200, response.data) body = json.loads(response.data) eq_(body, {'status': 'error', 'error': 'already invited'})
def test_invite__user_has_been_invited_to_another_association(self, user): session = Client().session() watercooler = Association(name='watercooler') pdxpython = Association(name='pdxpython') session.add(watercooler) session.add(pdxpython) session.flush() session.add(UserAssociation(user_id=user.user_id, association_id=watercooler.association_id)) session.flush() AssociationInvite.generate(pdxpython.association_id, '*****@*****.**') response = self.app.post( '/association/{0}/invite_user'.format(watercooler.association_id), data={'email': '*****@*****.**'}) eq_(response.status_code, 200, response.data) body = json.loads(response.data) eq_(body, {'status': 'ok', 'action': 'invited'})
def test_accept_invite_prompts_for_login(self): session = Client().session() association = Association(name="tower of power") session.add(association) session.flush() invite = AssociationInvite.generate(association.association_id, '*****@*****.**') session.flush() response = self.app.get('/accept_invitation/{0}/'.format(invite.token)) eq_(response.status_code, 200) assert 'Please create an account' in response.data,\ "Response didn't prompt for login"
def test_accept_invite_while_unverified_verifies_email(self, user): user.email = '*****@*****.**' user.email_verified_at = None session = Client().session() association = Association(name="tower of power") session.add(association) session.flush() invite = AssociationInvite.generate(association.association_id, '*****@*****.**') session.flush() response = self.app.get('/accept_invitation/{0}/'.format(invite.token)) eq_(response.status_code, 302, response.data) del(user) user = session.query(User).one() assert user.email_verified_at, "Email wasn't verified"
def test_accept_invite_while_logged_in(self, user): user.email = '*****@*****.**' session = Client().session() association = Association(name="tower of power") session.add(association) session.flush() invite = AssociationInvite.generate(association.association_id, '*****@*****.**') session.flush() response = self.app.get('/accept_invitation/{0}/'.format(invite.token)) eq_(response.status_code, 302, response.data) eq_(response.headers['Location'], 'http://localhost/association/{0}'.format(association.association_id)) user_association = session.query(UserAssociation).\ filter(UserAssociation.user_id == user.user_id).\ one() eq_(user_association.association_id, association.association_id) invites = session.query(AssociationInvite).all() eq_(invites, [])
def invite_user(association_id): if not g.user: return error_response('login required') session = Client().session() email = request.form['email'] if not re.search(r'@.*\.', email): return error_response("invalid email address '{0}'".format(email)) try: association = association_for_logged_in_user(association_id) except NoResultFound: return error_response('no such association') try: user = session.query(User).\ filter(User.email == email).\ one() except NoResultFound: invite = AssociationInvite.generate(association_id, email) try: session.flush() except IntegrityError: return error_response('already invited') send_invitation_mail( email, g.user.email, association.name, url_for('accept_invitation', token=invite.token, _external=True)) return {'status': 'ok', 'action': 'invited'} user_association = UserAssociation( user_id=user.user_id, association_id=association_id) session.add(user_association) try: session.flush() except IntegrityError: return error_response('already in association') return {'status': 'ok', 'action': 'added'}