Exemple #1
0
class TestSubmissionModel(BaseTest):
    @patch('app.models.ImgurClient.upload_from_path', Mock(return_value={'link': ''}))
    def setUp(self):
        super(TestSubmissionModel, self).setUp()
        self.user1 = User('Dan', '*****@*****.**', '12345')
        self.user2 = User('Dan1', '*****@*****.**', '12345')
        db.session.add(self.user1)
        db.session.add(self.user2)
        db.session.commit()
        self.post = Post('Title', 'Body', self.user1.id, difficulty=1)
        db.session.add(self.post)
        db.session.commit()
        self.submission = Submission('a/b/c', 'abcdef', user_id=self.user1.id, post_id=self.post.id)
        db.session.add(self.submission)
        db.session.commit()

    @patch('app.models.ImgurClient.upload_from_path')
    def test_submission_model_can_init(self, patch_imgur):
        patch_imgur.return_value={'link': ''}
        submission = Submission('a/b/c', 'abcdef', 1, 1)
        self.assertEqual(submission.text, 'abcdef')
        patch_imgur.assert_called_with('a/b/c', config=None, anon=True)

    def test_submission_model_knows_user_upvoted(self):
        self.assertTrue(self.submission.has_user_upvoted(self.user1.id))
        self.assertFalse(self.submission.has_user_upvoted(self.user2.id))

    @patch('app.models.Submission.has_user_upvoted', Mock(return_value=False))
    def test_submission_model_can_toggle_upvotes_to_true(self):
        self.assertEqual(self.submission.votes.all(), [self.user1])
        self.submission.toggle_upvote(self.user2.id)
        db.session.commit()
        self.assertEqual(self.submission.votes.all(), [self.user1, self.user2])

    @patch('app.models.Submission.has_user_upvoted', Mock(return_value=True))
    def test_submission_model_can_toggle_upvotes_to_false(self):
        self.assertEqual(self.submission.votes.all(), [self.user1])
        self.submission.toggle_upvote(self.user1.id)
        db.session.commit()
        self.assertEqual(self.submission.votes.all(), [])

    def test_submission_model_can_count_upvotes(self):
        self.assertEqual(self.submission.count_upvotes(), 1)
        self.submission.votes.append(self.user2)
        self.assertEqual(self.submission.count_upvotes(), 2)

    @patch('app.models.ImgurClient.upload_from_path', Mock(return_value={'link': ''}))
    @patch('app.models.User.increase_score')
    def test_submission_model_can_make_winner(self, mock_increase_score):
        submission1 = Submission('a/b/c', 'abcdef', user_id=self.user2.id, post_id=self.post.id)
        db.session.add(submission1)
        submission1.make_winner()
        db.session.commit()
        self.assertTrue(submission1.won)
        self.assertRaises(Exception, self.submission.make_winner)
        mock_increase_score.assert_has_calls([call(50), call(50), call(100), call(104)])

    @patch('app.models.ImgurClient.upload_from_path', Mock(return_value={'link': ''}))
    def test_submission_model_does_not_allow_multiple_submissions(self):
        submission1 = Submission('a/b/c', 'abcdef', user_id=self.user1.id, post_id=self.post.id)
        db.session.add(submission1)
        self.assertRaises(Exception, db.session.commit)