Exemplo n.º 1
0
class TweetTestCase(TestCase):
    def setUp(self):
        self.users = {
            'author': User.objects.create(username='******'),
            'user1': User.objects.create(username='******'),
            'user2': User.objects.create(username='******'),
            'user3': User.objects.create(username='******'),
        }

        self.tweet = Tweet(author=self.users['author'],
                           tweet_text='aaa',
                           pub_date=timezone.now())
        self.tweet.save()

    def test_score(self):
        """tweet score is correctly calculated"""
        votes = [
            Vote.objects.create(voter=self.users['user1'],
                                tweet=self.tweet,
                                direction=0),
            Vote.objects.create(voter=self.users['user2'],
                                tweet=self.tweet,
                                direction=0),
            Vote.objects.create(voter=self.users['user3'],
                                tweet=self.tweet,
                                direction=0),
        ]
        self.tweet.vote_set.set(votes)

        self.assertEqual(self.tweet.score, 0)

        new_directions = [-1, 1, 1]
        for vote, direction in zip(votes, new_directions):
            vote.direction = direction
            vote.save()

        self.assertEqual(self.tweet.score, sum(new_directions))

    def test_decorating_list(self):
        pass  # TODO

    def test_voting(self):
        """tweet voting works as intended"""
        user = self.users['user1']

        result = self.tweet.make_vote(user, 1)
        self.assertTrue(result['created'],
                        'voting for the first time creates new vote')
        self.assertEqual(result['direction'], 1,
                         'voting sets vote direction correctly')
        self.assertEqual(result['updated_score'], 1,
                         'score is correctly updated')

        result = self.tweet.make_vote(user, 1)
        self.assertFalse(result['created'],
                         'subsequent votes do not create new vote instances')
        self.assertEqual(
            result['direction'], 0,
            'subsequent vote with same direction sets direction to 0')
        self.assertEqual(result['updated_score'], 0,
                         'score is correctly updated')

        result = self.tweet.make_vote(user, 1)
        self.assertFalse(result['created'],
                         'subsequent votes do not create new vote instances')
        self.assertEqual(result['direction'], 1,
                         'voting sets new vote direction correctly')
        self.assertEqual(result['updated_score'], 1,
                         'score is correctly updated')

        result = self.tweet.make_vote(user, -1)
        self.assertFalse(result['created'],
                         'subsequent votes do not create new vote instances')
        self.assertEqual(result['direction'], -1,
                         'voting sets new vote direction correctly')
        self.assertEqual(result['updated_score'], -1,
                         'score is correctly updated')

    def tearDown(self):
        pass