Browse Source

Merge branch 'master' of github.com:jbiason/lunch-o

master
Julio Biason 11 years ago
parent
commit
e733ec9157
  1. 6
      luncho/blueprints/voting.py
  2. 128
      tests/vote_tests.py

6
luncho/blueprints/voting.py

@ -108,7 +108,7 @@ class PlacesVotedMoreThanOnceException(LunchoException):
def _json(self): def _json(self):
super(PlacesVotedMoreThanOnceException, self)._json() super(PlacesVotedMoreThanOnceException, self)._json()
self.json['places'] = self.places self.json['places'] = list(self.places)
# ---------------------------------------------------------------------- # ----------------------------------------------------------------------
@ -178,10 +178,14 @@ def cast_vote(group_id):
# finally, cast the vote # finally, cast the vote
vote = Vote(request.user, group_id) vote = Vote(request.user, group_id)
LOG.debug('User {user} casted vote {vote}'.format(user=request.user,
vote=vote))
db.session.add(vote) db.session.add(vote)
db.session.commit() # so vote gets an id db.session.commit() # so vote gets an id
for (pos, place_id) in enumerate(request.as_json.get('choices')): for (pos, place_id) in enumerate(request.as_json.get('choices')):
place = CastedVote(vote, pos, place_id) place = CastedVote(vote, pos, place_id)
LOG.debug('\tVoted {place} in {pos} position'.format(place=place,
pos=pos))
db.session.add(place) db.session.add(place)
db.session.commit() db.session.commit()

128
tests/vote_tests.py

@ -70,5 +70,133 @@ class TestVote(LunchoTests):
self.assertJsonError(rv, 406, 'The vote must register 2 places') self.assertJsonError(rv, 406, 'The vote must register 2 places')
return return
def test_already_voted(self):
"""Try to vote when the user already voted."""
group = self._group()
place = self._place()
group.places.append(place)
self.user.groups.append(group)
server.db.session.commit()
group_id = group.id
token = self.user.token
request = {'choices': [place.id]}
rv = self.post('/vote/{group_id}/'.format(group_id=group_id),
request,
token=token)
self.assertJsonOk(rv) # vote in the day
rv = self.post('/vote/{group_id}/'.format(group_id=group_id),
request,
token=token)
self.assertJsonError(rv, 406, 'User already voted today')
return
def test_already_vote_other_group(self):
"""Try to vote in two different groups in the same day."""
group1 = self._group()
place1 = self._place()
group1.places.append(place1)
self.user.groups.append(group1)
group2 = self._group()
place2 = self._place()
group2.places.append(place2)
self.user.groups.append(group2)
server.db.session.commit()
group1_id = group1.id
group2_id = group2.id
place1_id = place1.id
place2_id = place2.id
token = self.user.token
request = {'choices': [place1_id]}
rv = self.post('/vote/{group_id}/'.format(group_id=group1_id),
request,
token=token)
self.assertJsonOk(rv) # first vote for the day
request = {'choices': [place2_id]}
rv = self.post('/vote/{group_id}/'.format(group_id=group2_id),
request,
token=token)
self.assertJsonError(rv, 406, 'User already voted today')
return
def test_vote_place_not_in_group(self):
"""Vote for a place that doesn't belong to the group."""
group = self._group()
place1 = self._place()
place2 = self._place()
group.places.append(place2)
self.user.groups.append(group)
server.db.session.commit()
request = {'choices': [place1.id]}
rv = self.post('/vote/{group_id}/'.format(group_id=group.id),
request,
token=self.user.token)
self.assertJsonError(rv, 404, 'Places are not part of this group')
return
def test_vote_for_same_place_twice(self):
"""Vote for a place more than once."""
group = self._group()
place = self._place()
group.places.append(place)
self.user.groups.append(group)
server.db.session.commit()
request = {'choices': [place.id, place.id]}
rv = self.post('/vote/{group_id}/'.format(group_id=group.id),
request,
token=self.user.token)
self.assertJsonError(rv, 409, 'Places voted more than once')
return
def test_unknown_group(self):
"""Try to vote in a group that doesn't exist."""
request = {'choices': [100]}
rv = self.post('/vote/{group_id}/'.format(group_id=100),
request,
token=self.user.token)
self.assertJsonError(rv, 404, 'Group not found')
return
def test_vote_in_group_not_member(self):
"""Try to vote for a group that the user is not a member."""
group = self._group()
place = self._place()
group.places.append(place)
server.db.session.commit()
user2 = self.create_user(name='newUser',
fullname='new user',
verified=True,
create_token=True)
request = {'choices': [place.id]}
rv = self.post('/vote/{group_id}/'.format(group_id=group.id),
request,
token=user2.token)
self.assertJsonError(rv, 403, 'User is not member of this group')
return
def test_vote_place_doesnt_exist(self):
"""Vote for a place that doesnt exist."""
group = self._group()
place = self._place()
group.places.append(place)
server.db.session.commit()
request = {'choices': [place.id + 10]}
rv = self.post('/vote/{group_id}/'.format(group_id=group.id),
request,
token=self.user.token)
self.assertJsonError(rv, 404, 'Place not found')
return
if __name__ == '__main__': if __name__ == '__main__':
unittest.main() unittest.main()

Loading…
Cancel
Save