示例#1
0
 def test_user_can_follow_users(self):
     """
     Authenticated users should be able to follow other users.
     """
     login(self.mr_foo)
     response = self.follow('mr_baz')
     self.assertEqual(response.status_code, status.HTTP_200_OK)
示例#2
0
 def test_article_without_violations_cannot_be_processed(self):
     login(verified=True)
     clean_article = self.generate_article(published=True)
     login(admin=True)
     response = self.process_violation(clean_article, 'approve')
     self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
     self.assertIn("This article does not have any pending violation reports.", response.data['error'])
 def test_dislike_me_is_accurate(self):
     login()
     self.dislike(self.slug)
     response = self.get_reactions(self.slug)
     self.assertReactionsEqual(response.data['reactions'],
                               dislike_me=True,
                               dislike_count=1)
示例#4
0
 def test_user_cannot_follow_themselves(self):
     """
     Users cannot follow themselves. It makes no logical sense. :)
     """
     login(self.mr_foo)
     response = self.follow('mr_foo')
     self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
     self.assertIn('You cannot follow yourself.', response.data['errors'])
示例#5
0
 def test_owner_view_is_not_added_to_stats(self):
     # owner logs in and views article
     login(self.owner)
     self.view_article(self.slug)
     # owner gets stats
     response = self.article_stats()
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertStatsEqual(response.data, views=0)
 def test_an_article_can_have_many_dislikes(self):
     login()
     self.dislike(self.slug)  # first dislike
     login()
     response = self.dislike(self.slug)  # second dislike
     self.assertReactionsEqual(response.data['reactions'],
                               dislike_count=2,
                               dislike_me=True)
示例#7
0
 def test_users_cannot_report_an_article_more_than_once(self):
     login(verified=True)
     slug = self.generate_article(published=True)
     login()
     response = self.report(slug)  # report for the first time
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     response = self.report(slug)  # report for the second time
     self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
     self.assertIn(b"You cannot report an article more than once.", response.content)
示例#8
0
 def test_user_cannot_un_follow_themselves(self):
     """
     Users should be able to un-follow themselves. It does not make any logical sense.
     """
     # let 'mr_foo' attempt to follow self
     login(self.mr_foo)
     response = self.un_follow('mr_foo')
     self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
     self.assertIn('You cannot follow or un follow yourself.',
                   json.dumps(response.data))
示例#9
0
 def test_users_can_report_articles(self):
     login(verified=True)
     slug = self.generate_article(published=True)
     login()
     response = self.report(slug)
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertIn(
         b"Your report has been received. You will receive a confirmation email shortly.",
         response.content
     )
示例#10
0
 def test_only_one_view_is_added_per_user(self):
     # other users view article
     login()
     self.view_article(self.slug)
     self.view_article(self.slug)
     # owner logs in
     login(self.owner)
     response = self.article_stats()
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertStatsEqual(response.data, views=1)
示例#11
0
 def test_multiple_comments_by_same_user_are_added_to_stats(self):
     # other users comment on article
     login()
     self.comment_on_article(self.slug)
     self.comment_on_article(self.slug)
     self.comment_on_article(self.slug)
     # owner logs in
     login(self.owner)
     response = self.article_stats()
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertStatsEqual(response.data, comments=3)
示例#12
0
 def test_user_can_un_follow_users(self):
     """
     Authenticated users should be able to un-follow users they are currently following.
     """
     # let 'mr_foo' follow then un-follow 'mr_baz'
     login(self.mr_foo)
     # follow
     self.follow('mr_baz')
     # un-follow
     response = self.un_follow('mr_baz')
     self.assertEqual(response.status_code, status.HTTP_200_OK)
 def test_disliking_an_article_reverts_a_like_on_it(self):
     login()
     response = self.like(self.slug)  # like
     self.assertReactionsEqual(response.data['reactions'],
                               like_count=1,
                               like_me=True,
                               dislike_count=0,
                               dislike_me=False)
     response = self.dislike(self.slug)  # dislike
     self.assertReactionsEqual(response.data['reactions'],
                               like_count=0,
                               like_me=False,
                               dislike_count=1,
                               dislike_me=True)
示例#14
0
 def test_user_can_see_following_list(self):
     """
     Authenticated users can retrieve their following list.
     """
     login(self.mr_foo)
     # let 'mr_foo' follow both 'mr_bar' and 'mr_baz'
     self.follow('mr_bar')
     self.follow('mr_baz')
     # retrieve mr_foo's following
     response = self.following('mr_foo')
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     # assert that 'mr_bar' and 'mr_baz' are on the following list
     data = json.dumps(response.data)
     self.assertIn('mr_bar', data)
     self.assertIn('mr_baz', data)
示例#15
0
 def test_user_can_see_followers_list(self):
     """
     Authenticated users can retrieve followers list.
     """
     # let 'mr_bar' and 'mr_baz' follow 'mr_foo'
     login(self.mr_bar)
     self.follow('mr_foo')
     login(self.mr_baz)
     self.follow('mr_foo')
     # retrieve mr_foo's followers
     response = self.followers('mr_foo')
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     # assert that 'mr_bar' and 'mr_baz' are on the followers list
     data = json.dumps(response.data)
     self.assertIn('mr_bar', data)
     self.assertIn('mr_baz', data)
示例#16
0
 def setUp(self):
     super().setUp()
     set_test_client(self.client)
     self.owner = login(verified=True)
     self.article = self.create_article(published=True)
     self.slug = self.article['slug']
     logout()
示例#17
0
 def test_ratings_on_articles_are_added_to_stats(self):
     # other users rate article
     login()
     self.rate_article(self.slug, 4)
     login()
     self.rate_article(self.slug, 2)
     login()
     self.rate_article(self.slug, 3)
     # owner logs in - avg rating should be (4 + 2 + 3)/3 = 3
     login(self.owner)
     response = self.article_stats()
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertStatsEqual(response.data, rating=3)
示例#18
0
 def test_views_by_different_users_are_added_to_stats(self):
     # other users view article
     login()
     self.view_article(self.slug)
     login()
     self.view_article(self.slug)
     login()
     self.view_article(self.slug)
     # owner logs in
     login(self.owner)
     response = self.article_stats()
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertStatsEqual(response.data, views=3)
示例#19
0
 def test_dislikes_on_articles_are_added_to_stats(self):
     # owner dislikes article
     login(self.owner)
     self.dislike_article(self.slug)
     # other users rate article
     login()
     self.dislike_article(self.slug)
     login()
     self.dislike_article(self.slug)
     # owner logs in
     login(self.owner)
     response = self.article_stats()
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertStatsEqual(response.data, dislikes=3)
 def test_like_count_is_accurate(self):
     login()
     self.like(self.slug)
     login()
     self.like(self.slug)
     login()
     response = self.get_reactions(self.slug)
     self.assertReactionsEqual(response.data['reactions'], like_count=2)
示例#21
0
    def test_user_can_check_if_they_re_followed_by_others(self):
        """
        Authenticated users can check whether they're being followed.
        """
        # let 'mr_foo' check whether 'mr_bar' is following them
        login(self.mr_foo)
        response = self.is_following_me('mr_bar')
        self.assertEqual(response.data, {"following_status": False})

        # let 'mr_bar' follow 'mr_foo'
        login(self.mr_bar)
        self.follow('mr_foo')
        # let 'mr_foo' check whether 'mr_bar' is following them
        login(self.mr_foo)
        response = self.is_following_me('mr_bar')
        login(self.mr_bar)
        response2 = self.is_following_me('mr_foo')
        self.assertEqual(response.data, {"following_status": False})
        self.assertEqual(response2.data, {"following_status": True})
示例#22
0
 def setUp(self):
     super().setUp()
     login(verified=True)
     self.reported1 = self.generate_article(published=True)
     self.reported2 = self.generate_article(published=True)
     login()
     self.report(self.reported1)
     self.report(self.reported2)
     login()
     self.report(self.reported1)
     self.report(self.reported2)
     logout()
示例#23
0
 def test_admin_can_approve_article_violation_reports(self):
     login(admin=True)
     response = self.process_violation(self.reported1, 'approve')
     self.assertEqual(response.status_code, status.HTTP_200_OK)
     self.assertIn("You have approved this violation.", response.data['message'])
示例#24
0
 def test_users_cannot_report_non_existent_articles(self):
     login(verified=True)
     response = self.report('foo-bar')
     self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
示例#25
0
 def test_unauthenticated_users_cannot_report_articles(self):
     login(verified=True)
     slug = self.generate_article(published=True)
     logout()
     response = self.report(slug)
     self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
示例#26
0
 def test_users_cannot_report_their_own_articles(self):
     login(verified=True)
     slug = self.generate_article(published=True)
     response = self.report(slug)
     self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
     self.assertIn(b"You cannot perform this action on your own article", response.content)
示例#27
0
 def test_user_can_see_violation_types(self):
     login()
     self.assertEqual(self.violation_types().data, Violation.represent_violation_types())
示例#28
0
 def test_ordinary_users_cannot_process_article_violation_reports(self):
     login()
     response = self.process_violation(self.reported1, 'reject')
     self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
     response = self.process_violation(self.reported1, 'approve')
     self.assertEqual(response.status_code, status.HTTP_403_FORBIDDEN)
示例#29
0
 def test_non_existent_article_cannot_be_processed(self):
     login(admin=True)
     response = self.process_violation('foobar', 'reject')
     self.assertEqual(response.status_code, status.HTTP_404_NOT_FOUND)
     self.assertIn("The article does not exist.", response.data['error'])
示例#30
0
 def test_invalid_decisions_are_not_allowed(self):
     login(admin=True)
     response = self.process_violation(self.reported1, 'foobar')
     self.assertEqual(response.status_code, status.HTTP_400_BAD_REQUEST)
     self.assertIn("This violation decision 'foobar' is not valid.", response.data['error'])