def test_registration(self): 'Make sure that registration works' url = self.get_url('user_register') username, password, nickname, email = [self.userN[x].replace('2', '3') for x in 'username', 'password', 'nickname', 'email'] params = ReplaceableDict(username=username, password=password, nickname=nickname, email=email) # Make sure the registration page appears properly self.assert_('Registration' in self.get(url).unicode_body) # Register self.post(url, params) # Register with the same username but with different case self.post(url, params.replace(username=username.upper(), nickname=nickname + 'x', email=email + 'x')) # Register with the same nickname but with different case self.post(url, params.replace(username=username + 'x', nickname=nickname.upper(), email=email + 'x')) # Register with the same email but with different case self.post(url, params.replace(username=username + 'x', nickname=nickname + 'x', email=email.upper())) # Confirm registration self.get(self.get_url('user_confirm', ticket=db.query(User_.ticket).filter_by(email=email).order_by(User_.when_expired.desc()).first()[0])) # Make sure the user exists self.assertEqual(db.query(User).filter_by(email=email).count(), 1) # Make sure that conflicting registrations have been deleted self.assertEqual(db.query(User_).filter_by(password_=hash(password)).count(), 0)
def test_move(self): 'Make sure that only superusers can promote or demote other users' url = self.get_url('user_move') # Check that we only see the login page if the user is not logged in self.assert_('value=Login' in self.post(url).unicode_body) # Check that normal users can't promote or demote other users self.login(self.userN) token = get_token(self.get(self.get_url('user_index')).body) targetUser = db.query(User).filter_by(username=self.userS['username']).first() params = ReplaceableDict(token=token, targetUserID=targetUser.id, is_super=1) self.assert_('value=Login' in self.post(url, params.replace(is_super=0))) self.assert_('value=Login' in self.post(url, params.replace(is_super=1))) # Prepare self.login(self.userS) user = db.query(User).filter_by(username=self.userS['username']).first() token = get_token(self.get(self.get_url('user_index')).body) targetUser = db.query(User).filter_by(username=self.userN['username']).first() params = ReplaceableDict(token=token, targetUserID=targetUser.id, is_super=1) # Check that a bad token fails self.assertJSON(self.post(url, params.replace(token=token + 'x')), 0) # Check that a bad targetUserID fails self.assertJSON(self.post(url, params.replace(targetUserID=0)), 0) # Check that a bad is_super fails self.assertJSON(self.post(url, params.replace(is_super='xxx')), 0) # Check that a super user cannot promote or demote self self.assertJSON(self.post(url, params.replace(targetUserID=user.id, is_super=0)), 0) self.assertJSON(self.post(url, params.replace(targetUserID=user.id, is_super=1)), 0) # Check that a super user can promote or demote other users self.assertJSON(self.post(url, params.replace(is_super=1)), 1) self.assertJSON(self.post(url, params.replace(is_super=0)), 1)
def test_update_smsAddress(self): 'Make sure that updating smsAddresses works' url = self.get_url('user_update') # Get token self.login(self.userN) token = get_token(self.get(url).unicode_body) params = ReplaceableDict(token=token, smsAddressAction='add', smsAddressEmail='*****@*****.**') # Add an smsAddress that is not a valid email address self.assertJSON(self.post(url, params.replace(smsAddressEmail='xxx')), 0) # Add an smsAddress that is a valid email address self.login(self.userN) smsAddressEmail = '*****@*****.**' self.assertJSON(self.post(url, params.replace(smsAddressEmail=smsAddressEmail)), 1) smsAddress1 = db.query(SMSAddress).filter_by(email=smsAddressEmail).first() self.login(self.userS) smsAddressEmail = '*****@*****.**' self.assertJSON(self.post(url, params.replace(smsAddressEmail=smsAddressEmail)), 1) smsAddress2 = db.query(SMSAddress).filter_by(email=smsAddressEmail).first() # Add a duplicate smsAddress self.assertJSON(self.post(url, params), 1) self.assertJSON(self.post(url, params), 0) params = ReplaceableDict(token=token, smsAddressAction='activate', smsAddressID=smsAddress1.id, smsAddressCode=smsAddress1.code) self.login(self.userN) # Activate an smsAddress that doesn't belong to the user self.assertJSON(self.post(url, params.replace(smsAddressID=smsAddress2.id, smsAddressCode=smsAddress2.code)), 0) # Activate an smsAddress with a bad code self.assertJSON(self.post(url, params.replace(smsAddressCode=smsAddress1.code + 'x')), 0) # Activate an smsAddress with a good code self.assertJSON(self.post(url, params), 1) params = ReplaceableDict(token=token, smsAddressAction='remove', smsAddressID=smsAddress1.id) # Remove an smsAddress that doesn't belong to the user self.assertJSON(self.post(url, params.replace(smsAddressID=smsAddress2.id)), 0) # Remove an smsAddress that does belong to the user self.assertJSON(self.post(url, params), 1) params = ReplaceableDict(token=token) # Send an invalid command self.assertJSON(self.post(url, params.replace(smsAddressAction='')), 0) self.assertJSON(self.post(url, params.replace(smsAddressAction='xxx')), 0)
def test_update(self): 'Make sure that updating credentials works' url = self.get_url('user_update') # Check that we only see the login page if the user is not logged in self.assert_('value=Login' in self.get(url).unicode_body) self.assert_('value=Login' in self.post(url).unicode_body) # Check that the update form is filled with the user's credentials self.login(self.userN) body = self.get(url).unicode_body self.assert_(self.userN['username'] in body) self.assert_(self.userN['nickname'] in body) self.assert_(self.userN['email'].lower() in body) token = get_token(body) # Updating credentials requires a token username, password, nickname, email = ['0' + self.userN[x] for x in 'username', 'password', 'nickname', 'email'] password_ = hash(password) params = ReplaceableDict(token=token, username=username, password=password, nickname=nickname, email=email) self.assertJSON(self.post(url, params.replace(token='')), 0) self.assertJSON(self.post(url, params), 1) # Make sure the credentials have not changed yet self.assertEqual(db.query(User).filter_by(username=username, password_=password_, nickname=nickname, email=email).count(), 0) # Make sure the credentials have changed after confirmation self.get(self.get_url('user_confirm', ticket=db.query(User_.ticket).filter_by(email=email).order_by(User_.when_expired.desc()).first()[0])) self.assertEqual(db.query(User).filter_by(username=username, password_=password_, nickname=nickname, email=email).count(), 1)