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)