def test_mod_one_cant_see_approved_responses(self): self.client.force_login(BypassCommunityModerationUserFactory()) ResponseFactory(approved=False, author=UserFactory(username="******")) ResponseFactory(approved=True, author=UserFactory(username="******")) result = self.client.get("/api/response/") self.assertEqual(result.status_code, 200) self.assertEqual(len(result.json()["results"]), 1)
def test_is_approved_after_moderation(self): response = ResponseFactory(approved=False, author=UserFactory(username="******")) result = self.client.post( reverse("create_moderation", kwargs={"response_pk": response.pk}), data=dict(positive_in_tone=True, addressing_the_issue=True, personal=True), ) self.assertEqual(result.status_code, 201) user = UserFactory(username="******") self.client.force_login(user) result = self.client.post( reverse("create_moderation", kwargs={"response_pk": response.pk}), data=dict(positive_in_tone=True, addressing_the_issue=True, personal=True), ) self.assertEqual(result.status_code, 201) user = UserFactory(username="******") self.client.force_login(user) result = self.client.post( reverse("create_moderation", kwargs={"response_pk": response.pk}), data=dict(positive_in_tone=True, addressing_the_issue=True, personal=True), ) self.assertEqual(result.status_code, 201) response.refresh_from_db() self.assertTrue(response.approved)
def test_review_with_rejected_response_and_unrejected_response_doesnt_appear( self): review = ReviewFactory() ResponseFactory(approved=False, rejected=True, review=review) ResponseFactory(approved=False, rejected=False, review=review) result = self.client.get("/api/review/?lang=en") self.assertEqual(result.status_code, 404)
def test_mod_two_cant_see_staff_approved_responses(self): self.client.force_login(BypassStaffModerationUserFactory()) ResponseFactory(approved=False, author=UserFactory(username="******")) ResponseFactory(approved=True, author=UserFactory(username="******")) ResponseFactory(approved=True, staff_approved=True, author=UserFactory(username="******")) result = self.client.get('/api/response/') self.assertEqual(result.status_code, 200) self.assertEqual(len(result.json()['results']), 2)
def test_first_moderation(self): self.assertEqual(self.user.profile.karma_points, 0) response = ResponseFactory(approved=False, author=UserFactory(username="******")) self.assertEqual(response.moderation_count(), 0) result = self.client.post( reverse("create_moderation", kwargs={"response_pk": response.pk}), data=dict(positive_in_tone=True, addressing_the_issue=True, personal=True), ) self.assertEqual(result.status_code, 201) self.user.profile.refresh_from_db() self.assertEqual(self.user.profile.karma_points, 1)
def test_required_moderations(self): user1 = UserFactory(username="******") user2 = UserFactory(username="******") ModerationFactory(response=ResponseFactory(), moderator=user1) ModerationFactory(response=ResponseFactory(), moderator=user1) ModerationFactory(response=ResponseFactory(), moderator=user2) result = Command().active_contributors(required_responses=0, required_moderations=2, period=timedelta(hours=1)) self.assertEqual(result, 1)
def test_approval_as_mod_two(self): user = BypassStaffModerationUserFactory() self.client.force_login(user) response = ResponseFactory(approved=False, author=UserFactory(username="******")) result = self.client.post( reverse('approve', kwargs={"response_pk": response.pk})) self.assertEqual(result.status_code, 200) response.refresh_from_db() self.assertTrue(response.approved) self.assertTrue(response.staff_approved)
def test_create_moderation(self, mock_reply_to_review): response = ResponseFactory(approved=False, author=UserFactory(username="******")) result = self.client.post( reverse("create_moderation", kwargs={"response_pk": response.pk}), data=dict(positive_in_tone=True, addressing_the_issue=True, personal=True), ) self.assertEqual(result.status_code, 201) mock_reply_to_review.assert_not_called() response.refresh_from_db() self.assertFalse(response.approved) self.assertFalse(response.staff_approved) self.assertFalse(response.submitted_to_play_store)
def test_submit_to_play_store(self, mock_reply_to_review): response = ResponseFactory(approved=True, staff_approved=True) self.assertFalse(response.submitted_to_play_store) self.assertIsNone(response.submitted_to_play_store_at) response.submit_to_play_store() self.assertTrue(response.submitted_to_play_store) self.assertTrue( timezone.now() - response.submitted_to_play_store_at < timezone.timedelta( minutes=1))
def test_put_changes_to_response_as_moderator_two(self): user = BypassStaffModerationUserFactory() self.client.force_login(user) response = ResponseFactory(approved=False, text="Bad response", author=self.author_user) good_text = "GooD Response." result = self.client.put('/api/response/{}/'.format(response.pk), dict(text=good_text)) self.assertEqual(result.status_code, 200) response.refresh_from_db() self.assertEqual(response.text, good_text)
def test_approval_as_mod_two(self, mock_reply_to_review): user = BypassStaffModerationUserFactory() self.client.force_login(user) response = ResponseFactory(approved=False, author=UserFactory(username="******")) result = self.client.post( reverse("approve", kwargs={"response_pk": response.pk}) ) self.assertEqual(result.status_code, 200) mock_reply_to_review.assert_called() response.refresh_from_db() self.assertTrue(response.approved) self.assertTrue(response.staff_approved) self.assertTrue(response.submitted_to_play_store)
def test_review_with_rejected_response_appears_again(self): review = ReviewFactory() ResponseFactory(approved=False, rejected=True, review=review) result = self.client.get("/api/review/?lang=en") self.assertEqual(result.status_code, 200) self.assertEqual(result.json()["id"], review.id)
def test_mod_two_cant_see_rejected_responses(self): self.client.force_login(BypassStaffModerationUserFactory()) response = ResponseFactory(approved=False, author=UserFactory(username="******")) ModerationFactory( response=response, addressing_the_issue=False, personal=False, positive_in_tone=False, moderator=UserFactory(username="******"), ) ModerationFactory( response=response, addressing_the_issue=False, personal=False, positive_in_tone=False, moderator=UserFactory(username="******"), ) ModerationFactory( response=response, addressing_the_issue=False, personal=False, positive_in_tone=False, moderator=UserFactory(username="******"), ) result = self.client.get("/api/response/") self.assertEqual(result.status_code, 200) self.assertEqual(len(result.json()["results"]), 0)
def response(self, **kwargs): if "review" not in kwargs: kwargs["review"] = ReviewFactory(last_modified=self.time_buffer()) if (kwargs["submitted_to_play_store"] and "submitted_to_play_store_at" not in kwargs): kwargs["submitted_to_play_store_at"] = self.time_buffer() return ResponseFactory(**kwargs)
def test_responses_outside_period(self): ResponseFactory(submitted_at=timezone.now() - timedelta(hours=2)) result = Command().active_contributors(required_responses=1, required_moderations=0, period=timedelta(hours=1)) self.assertEqual(result, 0)
def test_create_moderation_if_user_is_author(self): response = ResponseFactory(approved=False, author=self.user) result = self.client.post( reverse("create_moderation", kwargs={"response_pk": response.pk}), data=dict(positive_in_tone=True, addressing_the_issue=True, personal=True), ) self.assertEqual(result.status_code, 400)
def test_approve_base_user(self): user = UserFactory() self.client.force_login(user) response = ResponseFactory(approved=False, author=UserFactory(username="******")) result = self.client.post( reverse('approve', kwargs={"response_pk": response.pk})) self.assertEqual(result.status_code, 403)
def test_is_staff_approved_after_moderation_by_mod_two(self): response = ResponseFactory(approved=False, author=UserFactory(username="******")) ModerationFactory(response=response, positive_in_tone=True) ModerationFactory(response=response, positive_in_tone=True) self.client.force_login(BypassStaffModerationUserFactory()) result = self.client.post(reverse('create_moderation', kwargs={"response_pk": response.pk}), data=dict( positive_in_tone=True, addressing_the_issue=True, personal=True )) self.assertEqual(result.status_code, 201) response.refresh_from_db() self.assertTrue(response.approved) self.assertTrue(response.staff_approved)
def test_approve_base_user(self, mock_reply_to_review): user = UserFactory() self.client.force_login(user) response = ResponseFactory(approved=False, author=UserFactory(username="******")) result = self.client.post( reverse("approve", kwargs={"response_pk": response.pk}) ) self.assertEqual(result.status_code, 403) mock_reply_to_review.assert_not_called()
def test_is_rejected_after_negative_moderations(self, mock_reply_to_review): response = ResponseFactory(approved=False, author=UserFactory(username="******")) # TODO: I don't think these ModerationFactories should be required - once a review has a moderation # failing on all three counts, it won't meet the approved criteria and should be immediately rejected, no? ModerationFactory(response=response) ModerationFactory(response=response) result = self.client.post( reverse("create_moderation", kwargs={"response_pk": response.pk}), data=dict(positive_in_tone=False, addressing_the_issue=False, personal=False), ) response.refresh_from_db() self.assertEqual(result.status_code, 201) self.assertTrue(response.rejected)
def test_isnt_staff_approved_after_moderation_by_mod_two_without_locale( self, mock_moderator_in_review_langauge, mock_reply_to_review ): mock_moderator_in_review_langauge.return_value = False response = ResponseFactory(approved=False, author=UserFactory(username="******")) self.client.force_login(BypassStaffModerationUserFactory()) result = self.client.post( reverse("create_moderation", kwargs={"response_pk": response.pk}), data=dict(positive_in_tone=True, addressing_the_issue=True, personal=True), ) self.assertEqual(result.status_code, 201) mock_reply_to_review.assert_not_called() response.refresh_from_db() self.assertTrue(response.approved) self.assertFalse(response.staff_approved) self.assertFalse(response.submitted_to_play_store)
def test_ignores_reviews_within_period(self): self.response(submitted_to_play_store=True) ReviewFactory() ResponseFactory( review=ReviewFactory(), submitted_to_play_store=True, submitted_to_play_store_at=timezone.now(), ) result = Command().responded_reviews(period=timedelta(hours=1)) self.assertEqual(result, 1)
def test_put_changes_to_response_as_moderator(self): user = UserFactory() self.client.force_login(user) response = ResponseFactory(approved=False, text="Bad response", author=self.author_user) good_text = "GooD Response." result = self.client.put('/api/response/{}/'.format(response.pk), dict(text=good_text)) self.assertEqual(result.status_code, 403)
def test_cant_see_reject_responses(self): response = ResponseFactory(approved=False, author=UserFactory(username="******")) ModerationFactory(response=response, addressing_the_issue=False, personal=False, positive_in_tone=False, moderator=UserFactory(username="******")) ModerationFactory(response=response, addressing_the_issue=False, personal=False, positive_in_tone=False, moderator=UserFactory(username="******")) ModerationFactory(response=response, addressing_the_issue=False, personal=False, positive_in_tone=False, moderator=UserFactory(username="******")) result = self.client.get('/api/response/') self.assertEqual(result.status_code, 200) self.assertEqual(len(result.json()['results']), 0)
def test_first_approval(self): user = BypassCommunityModerationUserFactory() self.client.force_login(user) author = UserFactory(username="******") response = ResponseFactory(approved=False, author=author) result = self.client.post( reverse('approve', kwargs={"response_pk": response.pk})) self.assertEqual(result.status_code, 200) user.profile.refresh_from_db() author.profile.refresh_from_db() self.assertEqual(user.profile.karma_points, 1) self.assertEqual(author.profile.karma_points, 1)
def test_mod_two_can_see_approved_responses(self): self.client.force_login(BypassStaffModerationUserFactory()) response = ResponseFactory(approved=False, author=UserFactory(username="******")) ModerationFactory(response=response, moderator=UserFactory(username="******")) ModerationFactory(response=response, moderator=UserFactory(username="******")) ModerationFactory(response=response, moderator=UserFactory(username="******")) response.refresh_from_db() self.assertTrue(response.is_community_approved()) ResponseFactory(approved=True, author=UserFactory(username="******")) ResponseFactory(approved=True, staff_approved=True, author=UserFactory(username="******")) result = self.client.get('/api/response/') self.assertEqual(result.status_code, 200) self.assertEqual(len(result.json()['results']), 2)
def test_approval_after_moderation_by_staff(self): user = BypassStaffModerationUserFactory() self.client.force_login(user) self.assertEqual(user.profile.karma_points, 0) author = UserFactory(username="******") response = ResponseFactory(approved=False, author=author) ModerationFactory(response=response) ModerationFactory(response=response) ModerationFactory(response=response) result = self.client.post( reverse("approve", kwargs={"response_pk": response.pk}) ) self.assertEqual(result.status_code, 200) user.profile.refresh_from_db() author.profile.refresh_from_db() self.assertEqual(user.profile.karma_points, 3) self.assertEqual(author.profile.karma_points, 1)
def test_get_response(self): response = ResponseFactory(approved=False, author=self.author_user) result = self.client.get('/api/response/{}/'.format(response.pk)) self.assertEqual(result.status_code, 200) self.assertEqual(result.json()['id'], response.pk)
def test_cant_see_my_own_responses(self): ResponseFactory(approved=False, author=self.user) result = self.client.get("/api/response/") self.assertEqual(result.status_code, 200) self.assertEqual(len(result.json()["results"]), 0)
def test_get_responses(self): ResponseFactory(approved=False, author=UserFactory(username="******")) result = self.client.get("/api/response/") self.assertEqual(result.status_code, 200) self.assertEqual(len(result.json()["results"]), 1)