def test_can_if_an_anonymous_user_has_already_voted_in_a_poll(self): # Setup def get_rendered(poll, user): request = self.request_factory.get('/') request.user = user t = Template(self.loadstatement + '{% if poll|has_been_completed_by:request.user %}' 'HAS_VOTED{% else %}HAS_NOT_VOTED{% endif %}') c = Context({'poll': poll, 'request': request}) rendered = t.render(c) return rendered u2 = AnonymousUser() u2.forum_key = 'dummy' u3 = AnonymousUser() poll_option_1 = TopicPollOptionFactory.create(poll=self.poll_1) TopicPollOptionFactory.create(poll=self.poll_1) TopicPollVoteFactory.create(poll_option=poll_option_1, anonymous_key='dummy') # Run & check assert get_rendered(self.poll_1, u2) == 'HAS_VOTED' assert get_rendered(self.poll_2, u2) == 'HAS_NOT_VOTED' assert get_rendered(self.poll_2, u3) == 'HAS_NOT_VOTED' assert get_rendered(self.poll_2, u3) == 'HAS_NOT_VOTED'
def test_can_return_a_list_of_all_related_votes(self): # Setup u2 = UserFactory.create() poll = TopicPollFactory.create(topic=self.topic, max_options=2) option_1 = TopicPollOptionFactory.create(poll=poll) option_2 = TopicPollOptionFactory.create(poll=poll) # Run vote_1 = TopicPollVoteFactory.create(poll_option=option_1, voter=self.u1) vote_2 = TopicPollVoteFactory.create(poll_option=option_2, voter=self.u1) vote_3 = TopicPollVoteFactory.create(poll_option=option_2, voter=u2) # Check assert set(poll.votes) == set([vote_1, vote_2, vote_3])
def test_can_be_used_to_change_a_vote(self): # Setup self.poll.user_changes = True self.poll.save() TopicPollVoteFactory.create(voter=self.user, poll_option=self.option_2) correct_url = reverse('forum_conversation:topic_poll_vote', kwargs={'pk': self.poll.pk}) post_data = { 'options': [self.option_1.pk, ], } # Run response = self.client.post(correct_url, post_data, follow=True) # Check assert response.status_code == 200 votes = TopicPollVote.objects.filter(voter=self.user) assert votes.count() == 1 assert votes[0].poll_option == self.option_1
def test_knows_if_a_user_can_vote_again_in_a_poll(self): # Setup poll_1 = TopicPollFactory.create(topic=self.forum_1_topic, user_changes=True) poll_option_1 = TopicPollOptionFactory.create(poll=poll_1) TopicPollOptionFactory.create(poll=poll_1) poll_2 = TopicPollFactory.create(topic=self.forum_3_topic) poll_option_2 = TopicPollOptionFactory.create(poll=poll_2) TopicPollOptionFactory.create(poll=poll_2) TopicPollVoteFactory.create(poll_option=poll_option_1, voter=self.u1) TopicPollVoteFactory.create(poll_option=poll_option_2, voter=self.u1) assign_perm('can_vote_in_polls', self.u1, self.forum_1) assign_perm('can_vote_in_polls', self.u1, self.forum_3) # Run & check assert self.perm_handler.can_vote_in_poll(poll_1, self.u1) assert not self.perm_handler.can_vote_in_poll(poll_2, self.u1)
def test_can_tell_if_an_authenticated_user_has_already_voted_in_a_poll(self): # Setup def get_rendered(poll, user): request = self.request_factory.get('/') request.user = user t = Template(self.loadstatement + '{% if poll|has_been_completed_by:request.user %}HAS_VOTED{% else %}HAS_NOT_VOTED{% endif %}') c = Context({'poll': poll, 'request': request}) rendered = t.render(c) return rendered # Setup poll_option_1 = TopicPollOptionFactory.create(poll=self.poll_1) TopicPollOptionFactory.create(poll=self.poll_1) TopicPollVoteFactory.create(poll_option=poll_option_1, voter=self.u1) # Run & check assert get_rendered(self.poll_1, self.u1) == 'HAS_VOTED' assert get_rendered(self.poll_2, self.u1) == 'HAS_NOT_VOTED'
def test_knows_if_an_anonymous_user_can_vote_again_in_a_poll(self): # Setup u3 = AnonymousUser() u3.forum_key = 1 poll_1 = TopicPollFactory.create(topic=self.forum_1_topic, user_changes=True) poll_option_1 = TopicPollOptionFactory.create(poll=poll_1) TopicPollOptionFactory.create(poll=poll_1) poll_2 = TopicPollFactory.create(topic=self.forum_3_topic) poll_option_2 = TopicPollOptionFactory.create(poll=poll_2) TopicPollOptionFactory.create(poll=poll_2) TopicPollVoteFactory.create(poll_option=poll_option_1, anonymous_key=1) TopicPollVoteFactory.create(poll_option=poll_option_2, anonymous_key=1) assign_perm('can_vote_in_polls', u3, self.forum_1) assign_perm('can_vote_in_polls', u3, self.forum_3) # Run & check assert self.perm_handler.can_vote_in_poll(poll_1, u3) assert not self.perm_handler.can_vote_in_poll(poll_2, u3)
def test_knows_its_percentage(self): # Setup u2 = UserFactory.create() poll = TopicPollFactory.create(topic=self.topic, max_options=2) option_1 = TopicPollOptionFactory.create(poll=poll) option_2 = TopicPollOptionFactory.create(poll=poll) TopicPollVoteFactory.create(poll_option=option_1, voter=self.u1) TopicPollVoteFactory.create(poll_option=option_2, voter=self.u1) TopicPollVoteFactory.create(poll_option=option_1, voter=u2) TopicPollVoteFactory.create(poll_option=option_2, voter=u2) # Run & check assert option_1.percentage == 50 assert option_2.percentage == 50
def test_can_tell_if_an_authenticated_user_has_already_voted_in_a_poll(self): # Setup def get_rendered(poll, user): request = self.request_factory.get('/') request.user = user t = Template( self.loadstatement + '{% if poll|has_been_completed_by:request.user %}HAS_VOTED' '{% else %}HAS_NOT_VOTED{% endif %}') c = Context({'poll': poll, 'request': request}) rendered = t.render(c) return rendered # Setup poll_option_1 = TopicPollOptionFactory.create(poll=self.poll_1) TopicPollOptionFactory.create(poll=self.poll_1) TopicPollVoteFactory.create(poll_option=poll_option_1, voter=self.u1) # Run & check assert get_rendered(self.poll_1, self.u1) == 'HAS_VOTED' assert get_rendered(self.poll_2, self.u1) == 'HAS_NOT_VOTED'
def test_can_if_an_anonymous_user_has_already_voted_in_a_poll(self): # Setup def get_rendered(poll, user): request = self.request_factory.get('/') request.user = user t = Template(self.loadstatement + '{% if poll|has_been_completed_by:request.user %}HAS_VOTED{% else %}HAS_NOT_VOTED{% endif %}') c = Context({'poll': poll, 'request': request}) rendered = t.render(c) return rendered u2 = AnonymousUser() u2.forum_key = 'dummy' u3 = AnonymousUser() poll_option_1 = TopicPollOptionFactory.create(poll=self.poll_1) TopicPollOptionFactory.create(poll=self.poll_1) TopicPollVoteFactory.create(poll_option=poll_option_1, anonymous_key='dummy') # Run & check assert get_rendered(self.poll_1, u2) == 'HAS_VOTED' assert get_rendered(self.poll_2, u2) == 'HAS_NOT_VOTED' assert get_rendered(self.poll_2, u3) == 'HAS_NOT_VOTED' assert get_rendered(self.poll_2, u3) == 'HAS_NOT_VOTED'