def test_votes(self): """ Test that the voting mechanism will adjust the relevant score counters on users, posts and comments, etc... """ # Create three test users user1 = create_account('user1', '*****@*****.**', 'Password') user2 = create_account('user2', '*****@*****.**', 'Password') user3 = create_account('user3', '*****@*****.**', 'Password') # Create a post by user 1 post1 = create_post(user1, 'user1', 'Test post') # Get user 3 to downvote self.assertEqual(vote_post(user3, post1, amount=-1), -1) # Ensure post score has been adjusted self.assertEqual(get_post(post1).get('score'), -1) # Ensure user score has been adjusted self.assertEqual(get_user(user1).get('score'), -1) # Check that a user can reverse their vote within TIMEOUT self.assertEqual(vote_post(user3, post1, amount=-1), 0) self.assertEqual(get_post(post1).get('score'), 0) self.assertEqual(get_user(user1).get('score'), 0) # Get user 2 to upvote self.assertEqual(vote_post(user2, post1), 1) # Ensure post score has been adjusted self.assertEqual(get_post(post1).get('score'), 1) # Ensure user score has been adjusted self.assertEqual(get_user(user1).get('score'), 1) # Ensure user 1 can not vote on there own post self.assertRaises(CantVoteOnOwn, lambda: vote_post(user1, post1)) # Ensure the scores have not been adjusted self.assertEqual(get_post(post1).get('score'), 1) self.assertEqual(get_user(user1).get('score'), 1) # Ensure the user has voted self.assertTrue(has_voted(user2, post1)) # Check that a user can reverse their vote within TIMEOUT self.assertEqual(vote_post(user2, post1), 0) self.assertEqual(get_post(post1).get('score'), 0) self.assertEqual(get_user(user1).get('score'), 0) # Ensure the user has voted self.assertFalse(has_voted(user2, post1)) # Check that the score reflects an opposite vote within TIMEOUT self.assertEqual(vote_post(user2, post1, 1), 1) self.assertEqual(get_post(post1).get('score'), 1) self.assertEqual(get_user(user1).get('score'), 1) self.assertTrue(has_voted(user2, post1)) self.assertEqual(vote_post(user2, post1, -1), -1) self.assertEqual(get_post(post1).get('score'), -1) self.assertEqual(get_user(user1).get('score'), -1) self.assertTrue(has_voted(user2, post1)) # Check that a user can not reverse there vote after the TIMEOUT self.assertRaises( AlreadyVoted, lambda: vote_post(user2, post1, -1, timestamp() + K.VOTE_TIMEOUT + 1)) self.assertRaises( AlreadyVoted, lambda: vote_post(user2, post1, 1, timestamp() + K.VOTE_TIMEOUT + 1)) # Repeat the same tests on a comment # Create a comment by user 1 comment1 = create_post(user1, 'user1', 'Test comment', post1) # Let's cheat and set user1's score back to 0 m.db.users.update({'_id': user1}, {'$set': {'score': 0}}) # Get user 3 to downvote self.assertEqual(vote_post(user3, comment1, amount=-1), -1) # Ensure post score has been adjusted self.assertEqual(get_post(comment1).get('score'), -1) self.assertEqual(get_user(user1).get('score'), -1) # Reverse user3's vote just so it's not confusing self.assertEqual(vote_post(user3, comment1, amount=-1), 0) self.assertEqual(get_post(comment1).get('score'), 0) self.assertEqual(get_user(user1).get('score'), 0) # Ensure user 1 can not vote on there own comment self.assertRaises(CantVoteOnOwn, lambda: vote_post(user1, comment1)) # Ensure post score has been adjusted self.assertEqual(get_post(comment1).get('score'), 0) # Ensure user score has been adjusted self.assertEqual(get_user(user1).get('score'), 0) # Get user 2 to upvote self.assertEqual(vote_post(user2, comment1), 1) # Ensure post score has been adjusted self.assertEqual(get_post(comment1).get('score'), 1) # Ensure user score has been adjusted self.assertEqual(get_user(user1).get('score'), 1) self.assertTrue(has_voted(user2, comment1)) # Check that a user can reverse their vote within TIMEOUT self.assertEqual(vote_post(user2, comment1), 0) self.assertEqual(get_post(comment1).get('score'), 0) self.assertEqual(get_user(user1).get('score'), 0) self.assertFalse(has_voted(user2, comment1)) # Check that the score reflects an opposite vote within TIMEOUT self.assertEqual(vote_post(user2, comment1, -1), -1) self.assertEqual(get_post(comment1).get('score'), -1) self.assertEqual(get_user(user1).get('score'), -1) self.assertTrue(has_voted(user2, comment1)) self.assertEqual(vote_post(user2, comment1, 1), 1) self.assertEqual(get_post(comment1).get('score'), 1) self.assertEqual(get_user(user1).get('score'), 1) self.assertTrue(has_voted(user2, comment1)) # Check that a user can not reverse there vote after the TIMEOUT self.assertRaises( AlreadyVoted, lambda: vote_post(user2, comment1, -1, timestamp() + K.VOTE_TIMEOUT + 1)) self.assertRaises( AlreadyVoted, lambda: vote_post(user2, comment1, 1, timestamp() + K.VOTE_TIMEOUT + 1))
def test_votes(self): """ Test that the voting mechanism will adjust the relevant score counters on users, posts and comments, etc... """ # Create three test users user1 = create_account('user1', '*****@*****.**', 'Password') user2 = create_account('user2', '*****@*****.**', 'Password') user3 = create_account('user3', '*****@*****.**', 'Password') # Create a post by user 1 post1 = create_post(user1, 'user1', 'Test post') # Get user 3 to downvote, this will test that the user can not go # negative yet the post can self.assertIsNone(vote_post(user3, post1, amount=-1)) # Ensure post score has been adjusted self.assertEqual(get_post(post1).get('score'), -1) # Ensure user score has NOT been adjusted self.assertEqual(get_user(user1).get('score'), 0) # Get user 2 to upvote self.assertIsNone(vote_post(user2, post1)) # Ensure post score has been adjusted self.assertEqual(get_post(post1).get('score'), 0) # Ensure user score has been adjusted self.assertEqual(get_user(user1).get('score'), 1) # Ensure user 1 can not vote on there own post self.assertRaises(CantVoteOnOwn, lambda: vote_post(user1, post1)) # Ensure the scores have not been adjusted self.assertEqual(get_post(post1).get('score'), 0) self.assertEqual(get_user(user1).get('score'), 1) # Check to see if a user can vote twice on a post self.assertRaises(AlreadyVoted, lambda: vote_post(user2, post1)) # Ensure the scores have not been adjusted self.assertEqual(get_post(post1).get('score'), 0) self.assertEqual(get_user(user1).get('score'), 1) # Repeat the same tests on a comment # Create a comment by user 1 comment1 = create_post(user1, 'user1', 'Test comment', post1) # Let's cheat and set user1's score back to 0 so we can check it will # not be lowered in the user3 downvote m.db.users.update({'_id': user1}, {'$set': {'score': 0}}) # Get user 3 to downvote self.assertIsNone(vote_post(user3, comment1, amount=-1)) # Ensure post score has been adjusted self.assertEqual(get_post(comment1)['score'], -1) # Ensure user score has NOT been adjusted self.assertEqual(get_user(user1)['score'], 0) # Get user 2 to upvote self.assertIsNone(vote_post(user2, comment1)) # Ensure post score has been adjusted self.assertEqual(get_post(comment1).get('score'), 0) # Ensure user score has been adjusted self.assertEqual(get_user(user1).get('score'), 1) # Ensure user 1 can not vote on there own comment self.assertRaises(CantVoteOnOwn, lambda: vote_post(user1, comment1)) # Ensure post score has been adjusted self.assertEqual(get_post(comment1).get('score'), 0) # Ensure user score has been adjusted self.assertEqual(get_user(user1).get('score'), 1) # Check to see if a user can vote twice on a comment self.assertRaises(AlreadyVoted, lambda: vote_post(user2, comment1)) # Ensure post score has been adjusted self.assertEqual(get_post(comment1).get('score'), 0) # Ensure user score has been adjusted self.assertEqual(get_user(user1).get('score'), 1)
def test_votes(self): """ Test that the voting mechanism will adjust the relevant score counters on users, posts and comments, etc... """ # Create three test users user1 = create_account('user1', '*****@*****.**', 'Password') user2 = create_account('user2', '*****@*****.**', 'Password') user3 = create_account('user3', '*****@*****.**', 'Password') # Create a post by user 1 post1 = create_post(user1, 'user1', 'Test post') # Get user 3 to downvote self.assertEqual(vote_post(user3, post1, amount=-1), -1) # Ensure post score has been adjusted self.assertEqual(get_post(post1).get('score'), -1) # Ensure user score has been adjusted self.assertEqual(get_user(user1).get('score'), -1) # Check that a user can reverse their vote within TIMEOUT self.assertEqual(vote_post(user3, post1, amount=-1), 0) self.assertEqual(get_post(post1).get('score'), 0) self.assertEqual(get_user(user1).get('score'), 0) # Get user 2 to upvote self.assertEqual(vote_post(user2, post1), 1) # Ensure post score has been adjusted self.assertEqual(get_post(post1).get('score'), 1) # Ensure user score has been adjusted self.assertEqual(get_user(user1).get('score'), 1) # Ensure user 1 can not vote on there own post self.assertRaises(CantVoteOnOwn, lambda: vote_post(user1, post1)) # Ensure the scores have not been adjusted self.assertEqual(get_post(post1).get('score'), 1) self.assertEqual(get_user(user1).get('score'), 1) # Ensure the user has voted self.assertTrue(has_voted(user2, post1)) # Check that a user can reverse their vote within TIMEOUT self.assertEqual(vote_post(user2, post1), 0) self.assertEqual(get_post(post1).get('score'), 0) self.assertEqual(get_user(user1).get('score'), 0) # Ensure the user has voted self.assertFalse(has_voted(user2, post1)) # Check that the score reflects an opposite vote within TIMEOUT self.assertEqual(vote_post(user2, post1, 1), 1) self.assertEqual(get_post(post1).get('score'), 1) self.assertEqual(get_user(user1).get('score'), 1) self.assertTrue(has_voted(user2, post1)) self.assertEqual(vote_post(user2, post1, -1), -1) self.assertEqual(get_post(post1).get('score'), -1) self.assertEqual(get_user(user1).get('score'), -1) self.assertTrue(has_voted(user2, post1)) # Check that a user can not reverse there vote after the TIMEOUT self.assertRaises(AlreadyVoted, lambda: vote_post(user2, post1, -1, timestamp() + K.VOTE_TIMEOUT + 1)) self.assertRaises(AlreadyVoted, lambda: vote_post(user2, post1, 1, timestamp() + K.VOTE_TIMEOUT + 1)) # Repeat the same tests on a comment # Create a comment by user 1 comment1 = create_post(user1, 'user1', 'Test comment', post1) # Let's cheat and set user1's score back to 0 m.db.users.update({'_id': user1}, {'$set': {'score': 0}}) # Get user 3 to downvote self.assertEqual(vote_post(user3, comment1, amount=-1), -1) # Ensure post score has been adjusted self.assertEqual(get_post(comment1).get('score'), -1) self.assertEqual(get_user(user1).get('score'), -1) # Reverse user3's vote just so it's not confusing self.assertEqual(vote_post(user3, comment1, amount=-1), 0) self.assertEqual(get_post(comment1).get('score'), 0) self.assertEqual(get_user(user1).get('score'), 0) # Ensure user 1 can not vote on there own comment self.assertRaises(CantVoteOnOwn, lambda: vote_post(user1, comment1)) # Ensure post score has been adjusted self.assertEqual(get_post(comment1).get('score'), 0) # Ensure user score has been adjusted self.assertEqual(get_user(user1).get('score'), 0) # Get user 2 to upvote self.assertEqual(vote_post(user2, comment1), 1) # Ensure post score has been adjusted self.assertEqual(get_post(comment1).get('score'), 1) # Ensure user score has been adjusted self.assertEqual(get_user(user1).get('score'), 1) self.assertTrue(has_voted(user2, comment1)) # Check that a user can reverse their vote within TIMEOUT self.assertEqual(vote_post(user2, comment1), 0) self.assertEqual(get_post(comment1).get('score'), 0) self.assertEqual(get_user(user1).get('score'), 0) self.assertFalse(has_voted(user2, comment1)) # Check that the score reflects an opposite vote within TIMEOUT self.assertEqual(vote_post(user2, comment1, -1), -1) self.assertEqual(get_post(comment1).get('score'), -1) self.assertEqual(get_user(user1).get('score'), -1) self.assertTrue(has_voted(user2, comment1)) self.assertEqual(vote_post(user2, comment1, 1), 1) self.assertEqual(get_post(comment1).get('score'), 1) self.assertEqual(get_user(user1).get('score'), 1) self.assertTrue(has_voted(user2, comment1)) # Check that a user can not reverse there vote after the TIMEOUT self.assertRaises(AlreadyVoted, lambda: vote_post(user2, comment1, -1, timestamp() + K.VOTE_TIMEOUT + 1)) self.assertRaises(AlreadyVoted, lambda: vote_post(user2, comment1, 1, timestamp() + K.VOTE_TIMEOUT + 1))