class TestSpamDetail(AdminTestCase): def setUp(self): super(TestSpamDetail, self).setUp() self.comment = CommentFactory() self.comment.report_abuse(user=AuthUserFactory(), save=True, category='spam') self.request = RequestFactory().post('/fake_path') self.request.user = UserFactory() def test_confirm_spam(self): form_data = {'confirm': str(SpamStatus.SPAM)} form = ConfirmForm(data=form_data) nt.assert_true(form.is_valid()) view = SpamDetail() view = setup_form_view( view, self.request, form, spam_id=self.comment._id) with transaction.atomic(): view.form_valid(form) obj = OSFLogEntry.objects.latest(field_name='action_time') nt.assert_equal(obj.object_id, self.comment._id) nt.assert_in('Confirmed SPAM:', obj.message()) def test_confirm_ham(self): form_data = {'confirm': str(SpamStatus.HAM)} form = ConfirmForm(data=form_data) nt.assert_true(form.is_valid()) view = SpamDetail() view = setup_form_view( view, self.request, form, spam_id=self.comment._id) with transaction.atomic(): view.form_valid(form) obj = OSFLogEntry.objects.latest(field_name='action_time') nt.assert_equal(obj.object_id, self.comment._id) nt.assert_in('Confirmed HAM:', obj.message()) def test_form_valid_bad_id(self): form = ConfirmForm() view = SpamDetail() view = setup_form_view(view, self.request, form, spam_id='a1') with nt.assert_raises(Http404): view.form_valid(form) def test_get_context_data(self): view = SpamDetail() view = setup_view(view, self.request, spam_id=self.comment._id) res = view.get_context_data() nt.assert_equal(res['status'], '1') nt.assert_equal(res['page_number'], '1') nt.assert_is_instance(res['comment'], dict) nt.assert_equal(res['SPAM_STATUS'].UNKNOWN, SpamStatus.UNKNOWN) nt.assert_equal(res['SPAM_STATUS'].SPAM, SpamStatus.SPAM) nt.assert_equal(res['SPAM_STATUS'].HAM, SpamStatus.HAM) nt.assert_equal(res['SPAM_STATUS'].FLAGGED, SpamStatus.FLAGGED) def test_get_context_data_bad_id(self): view = setup_view(SpamDetail(), self.request, spam_id='a1') with nt.assert_raises(Http404): view.get_context_data()
class TestSpamDetail(AdminTestCase): def setUp(self): super(TestSpamDetail, self).setUp() self.comment = CommentFactory() self.comment.report_abuse(user=AuthUserFactory(), save=True, category="spam") self.request = RequestFactory().post("/fake_path") self.request.user = UserFactory() def test_confirm_spam(self): form_data = {"confirm": str(Comment.SPAM)} form = ConfirmForm(data=form_data) nt.assert_true(form.is_valid()) view = SpamDetail() view = setup_form_view(view, self.request, form, spam_id=self.comment._id) with transaction.atomic(): view.form_valid(form) obj = OSFLogEntry.objects.latest(field_name="action_time") nt.assert_equal(obj.object_id, self.comment._id) nt.assert_in("Confirmed SPAM:", obj.message()) def test_confirm_ham(self): form_data = {"confirm": str(Comment.HAM)} form = ConfirmForm(data=form_data) nt.assert_true(form.is_valid()) view = SpamDetail() view = setup_form_view(view, self.request, form, spam_id=self.comment._id) with transaction.atomic(): view.form_valid(form) obj = OSFLogEntry.objects.latest(field_name="action_time") nt.assert_equal(obj.object_id, self.comment._id) nt.assert_in("Confirmed HAM:", obj.message()) def test_form_valid_bad_id(self): form = ConfirmForm() view = SpamDetail() view = setup_form_view(view, self.request, form, spam_id="a1") with nt.assert_raises(Http404): view.form_valid(form) def test_get_context_data(self): view = SpamDetail() view = setup_view(view, self.request, spam_id=self.comment._id) res = view.get_context_data() nt.assert_equal(res["status"], "1") nt.assert_equal(res["page_number"], "1") nt.assert_is_instance(res["comment"], dict) nt.assert_equal(res["UNKNOWN"], Comment.UNKNOWN) nt.assert_equal(res["SPAM"], Comment.SPAM) nt.assert_equal(res["HAM"], Comment.HAM) nt.assert_equal(res["FLAGGED"], Comment.FLAGGED) def test_get_context_data_bad_id(self): view = setup_view(SpamDetail(), self.request, spam_id="a1") with nt.assert_raises(Http404): view.get_context_data()
class TestEmailView(AdminTestCase): def setUp(self): super(TestEmailView, self).setUp() self.comment = CommentFactory() self.comment.report_abuse(user=AuthUserFactory(), save=True, category='spam') self.request = RequestFactory().post('/fake_path') self.request.user = UserFactory() def test_get_object_bad_id(self): view = setup_view(EmailView(), self.request, spam_id='a1') with nt.assert_raises(Http404): view.get_object()
class TestEmailFormView(AdminTestCase): def setUp(self): super(TestEmailFormView, self).setUp() self.comment = CommentFactory() self.comment.report_abuse(user=AuthUserFactory(), save=True, category='spam') self.request = RequestFactory().post('/fake_path') self.request.user = UserFactory() self.view = EmailFormView() self.form = EmailForm( data={ 'author': 'Nemo', 'message': 'A message for spammers.', 'subject': 'stop spamming', 'email': ('*****@*****.**', '*****@*****.**') }) self.view = setup_form_view(self.view, self.request, self.form, spam_id=self.comment._id) @mock.patch('admin.spam.views.render') def test_get_context_data(self, mock_render): res = self.view.get_context_data() nt.assert_equal(res['status'], '1') nt.assert_equal(res['page_number'], '1') nt.assert_is_instance(res['comment'], dict) def test_get_context_data_bad_id(self): view = setup_view(EmailFormView(), self.request, spam_id='a1') with nt.assert_raises(Http404): view.get_context_data() @mock.patch('admin.spam.views.render') def test_get_initial(self, mock_render): self.view.get_initial() res = self.view.initial nt.assert_is_instance(res, dict) nt.assert_is_instance(res['email'], list) nt.assert_is_instance(res['email'][0], tuple) def test_get_initial_bad_id(self): view = setup_view(EmailFormView(), self.request, spam_id='a1') with nt.assert_raises(Http404): view.get_initial()
class TestEmailFormView(AdminTestCase): def setUp(self): super(TestEmailFormView, self).setUp() self.comment = CommentFactory() self.comment.report_abuse(user=AuthUserFactory(), save=True, category="spam") self.request = RequestFactory().post("/fake_path") self.request.user = UserFactory() self.view = EmailFormView() self.form = EmailForm( data={ "author": "Nemo", "message": "A message for spammers.", "subject": "stop spamming", "email": ("*****@*****.**", "*****@*****.**"), } ) self.view = setup_form_view(self.view, self.request, self.form, spam_id=self.comment._id) @mock.patch("admin.spam.views.render") def test_get_context_data(self, mock_render): res = self.view.get_context_data() nt.assert_equal(res["status"], "1") nt.assert_equal(res["page_number"], "1") nt.assert_is_instance(res["comment"], dict) def test_get_context_data_bad_id(self): view = setup_view(EmailFormView(), self.request, spam_id="a1") with nt.assert_raises(Http404): view.get_context_data() @mock.patch("admin.spam.views.render") def test_get_initial(self, mock_render): self.view.get_initial() res = self.view.initial nt.assert_is_instance(res, dict) nt.assert_is_instance(res["email"], list) nt.assert_is_instance(res["email"][0], tuple) def test_get_initial_bad_id(self): view = setup_view(EmailFormView(), self.request, spam_id="a1") with nt.assert_raises(Http404): view.get_initial()
class TestEmailFormView(AdminTestCase): def setUp(self): super(TestEmailFormView, self).setUp() self.comment = CommentFactory() self.comment.report_abuse(user=AuthUserFactory(), save=True, category='spam') self.request = RequestFactory().post('/fake_path') self.request.user = UserFactory() self.view = EmailFormView() self.form = EmailForm(data={ 'author': 'Nemo', 'message': 'A message for spammers.', 'subject': 'stop spamming', 'email': ('*****@*****.**', '*****@*****.**') }) self.view = setup_form_view(self.view, self.request, self.form, spam_id=self.comment._id) @mock.patch('admin.spam.views.render') def test_get_context_data(self, mock_render): res = self.view.get_context_data() nt.assert_equal(res['status'], '1') nt.assert_equal(res['page_number'], '1') nt.assert_is_instance(res['comment'], dict) def test_get_context_data_bad_id(self): view = setup_view(EmailFormView(), self.request, spam_id='a1') with nt.assert_raises(Http404): view.get_context_data() @mock.patch('admin.spam.views.render') def test_get_initial(self, mock_render): self.view.get_initial() res = self.view.initial nt.assert_is_instance(res, dict) nt.assert_is_instance(res['email'], list) nt.assert_is_instance(res['email'][0], tuple) def test_get_initial_bad_id(self): view = setup_view(EmailFormView(), self.request, spam_id='a1') with nt.assert_raises(Http404): view.get_initial()
class TestSpamListView(AdminTestCase): def setUp(self): super(TestSpamListView, self).setUp() Comment.remove() self.project = ProjectFactory(is_public=True) self.user_1 = AuthUserFactory() self.user_2 = AuthUserFactory() self.project.add_contributor(self.user_1) self.project.add_contributor(self.user_2) self.project.save() self.user_1.save() self.user_2.save() date = datetime.utcnow() self.comment_1 = CommentFactory(node=self.project, user=self.user_1) self.comment_2 = CommentFactory(node=self.project, user=self.user_1) self.comment_3 = CommentFactory(node=self.project, user=self.user_1) self.comment_4 = CommentFactory(node=self.project, user=self.user_1) self.comment_5 = CommentFactory(node=self.project, user=self.user_2) self.comment_6 = CommentFactory(node=self.project, user=self.user_2) self.comment_1.report_abuse(user=self.user_2, save=True, category="spam", date=date - timedelta(seconds=5)) self.comment_2.report_abuse(user=self.user_2, save=True, category="spam", date=date - timedelta(seconds=4)) self.comment_3.report_abuse(user=self.user_2, save=True, category="spam", date=date - timedelta(seconds=3)) self.comment_4.report_abuse(user=self.user_2, save=True, category="spam", date=date - timedelta(seconds=2)) self.comment_5.report_abuse(user=self.user_1, save=True, category="spam", date=date - timedelta(seconds=1)) self.comment_6.report_abuse(user=self.user_1, save=True, category="spam") self.request = RequestFactory().get("/fake_path") self.view = SpamList() self.view = setup_view(self.view, self.request, user_id=self.user_1._id) def test_get_spam(self): res = list(self.view.get_queryset()) nt.assert_equal(len(res), 6) response_list = [r._id for r in res] should_be = [ self.comment_6._id, self.comment_5._id, self.comment_4._id, self.comment_3._id, self.comment_2._id, self.comment_1._id, ] nt.assert_list_equal(should_be, response_list) def test_get_context_data(self): self.view.object_list = self.view.get_queryset() res = self.view.get_context_data() nt.assert_is_instance(res["spam"], list) nt.assert_is_instance(res["spam"][0], dict) nt.assert_equal(res["status"], "1") nt.assert_equal(res["page_number"], 1)
class TestUserSpamListView(AdminTestCase): def setUp(self): super(TestUserSpamListView, self).setUp() self.project = ProjectFactory(is_public=True) self.user_1 = AuthUserFactory() self.user_2 = AuthUserFactory() self.project.add_contributor(self.user_1) self.project.add_contributor(self.user_2) self.project.save() self.user_1.save() self.user_2.save() self.comment_1 = CommentFactory(node=self.project, user=self.user_1) self.comment_2 = CommentFactory(node=self.project, user=self.user_1) self.comment_3 = CommentFactory(node=self.project, user=self.user_1) self.comment_4 = CommentFactory(node=self.project, user=self.user_1) self.comment_5 = CommentFactory(node=self.project, user=self.user_2) self.comment_6 = CommentFactory(node=self.project, user=self.user_2) self.comment_1.report_abuse(user=self.user_2, save=True, category="spam") self.comment_2.report_abuse(user=self.user_2, save=True, category="spam") self.comment_3.report_abuse(user=self.user_2, save=True, category="spam") self.comment_4.report_abuse(user=self.user_2, save=True, category="spam") self.comment_5.report_abuse(user=self.user_1, save=True, category="spam") self.comment_6.report_abuse(user=self.user_1, save=True, category="spam") self.request = RequestFactory().get("/fake_path") self.view = UserSpamList() self.view = setup_view(self.view, self.request, user_id=self.user_1._id) def test_get_user_spam(self): res = list(self.view.get_queryset()) nt.assert_equal(len(res), 4) def test_get_context_data(self): self.view.object_list = self.view.get_queryset() res = self.view.get_context_data() nt.assert_is_instance(res["spam"], list) nt.assert_is_instance(res["spam"][0], dict) nt.assert_equal(res["status"], "1") nt.assert_equal(res["page_number"], 1) nt.assert_equal(res["user_id"], self.user_1._id)
class TestSpamMixin(OsfTestCase): def setUp(self): super(TestSpamMixin, self).setUp() self.comment = CommentFactory() self.auth = Auth(user=self.comment.user) def test_report_abuse(self): user = UserFactory() time = datetime.utcnow() self.comment.report_abuse( user, date=time, category='spam', text='ads', save=True) assert_equal(self.comment.spam_status, SpamStatus.FLAGGED) equivalent = dict( date=time, category='spam', text='ads', retracted=False ) assert_in(user._id, self.comment.reports) assert_equal(self.comment.reports[user._id], equivalent) def test_report_abuse_own_comment(self): with assert_raises(ValueError): self.comment.report_abuse( self.comment.user, category='spam', text='ads', save=True ) assert_equal(self.comment.spam_status, SpamStatus.UNKNOWN) def test_retract_report(self): user = UserFactory() time = datetime.utcnow() self.comment.report_abuse( user, date=time, category='spam', text='ads', save=True ) assert_equal(self.comment.spam_status, SpamStatus.FLAGGED) self.comment.retract_report(user, save=True) assert_equal(self.comment.spam_status, SpamStatus.UNKNOWN) equivalent = { 'date': time, 'category': 'spam', 'text': 'ads', 'retracted': True } assert_in(user._id, self.comment.reports) assert_equal(self.comment.reports[user._id], equivalent) def test_retract_report_not_reporter(self): reporter = UserFactory() non_reporter = UserFactory() self.comment.report_abuse( reporter, category='spam', text='ads', save=True ) with assert_raises(ValueError): self.comment.retract_report(non_reporter, save=True) assert_equal(self.comment.spam_status, SpamStatus.FLAGGED) def test_retract_one_report_of_many(self): user_1 = UserFactory() user_2 = UserFactory() time = datetime.utcnow() self.comment.report_abuse( user_1, date=time, category='spam', text='ads', save=True ) assert_equal(self.comment.spam_status, SpamStatus.FLAGGED) self.comment.report_abuse( user_2, date=time, category='spam', text='all', save=True ) self.comment.retract_report(user_1, save=True) equivalent = { 'date': time, 'category': 'spam', 'text': 'ads', 'retracted': True } assert_in(user_1._id, self.comment.reports) assert_equal(self.comment.reports[user_1._id], equivalent) assert_equal(self.comment.spam_status, SpamStatus.FLAGGED) def test_flag_spam(self): self.comment.flag_spam() self.comment.save() assert_equal(self.comment.spam_status, SpamStatus.FLAGGED) def test_cannot_remove_flag_not_retracted(self): user = UserFactory() self.comment.report_abuse( user, category='spam', text='ads', save=True ) self.comment.remove_flag(save=True) assert_equal(self.comment.spam_status, SpamStatus.FLAGGED) def test_remove_flag(self): self.comment.flag_spam() self.comment.save() assert_equal(self.comment.spam_status, SpamStatus.FLAGGED) self.comment.remove_flag(save=True) assert_equal(self.comment.spam_status, SpamStatus.UNKNOWN) def test_confirm_ham(self): self.comment.confirm_ham(save=True) assert_equal(self.comment.spam_status, SpamStatus.HAM) def test_confirm_spam(self): self.comment.confirm_spam(save=True) assert_equal(self.comment.spam_status, SpamStatus.SPAM) def test_validate_reports_bad_key(self): self.comment.reports[None] = {'category': 'spam', 'text': 'ads'} with assert_raises(ValidationValueError): self.comment.save() def test_validate_reports_bad_type(self): self.comment.reports[self.comment.user._id] = 'not a dict' with assert_raises(ValidationTypeError): self.comment.save() def test_validate_reports_bad_value(self): self.comment.reports[self.comment.user._id] = {'foo': 'bar'} with assert_raises(ValidationValueError): self.comment.save()
class TestUserSpamListView(AdminTestCase): def setUp(self): super(TestUserSpamListView, self).setUp() self.project = ProjectFactory(is_public=True) self.user_1 = AuthUserFactory() self.user_2 = AuthUserFactory() self.project.add_contributor(self.user_1) self.project.add_contributor(self.user_2) self.project.save() self.user_2.save() self.user_1.save() self.comment_1 = CommentFactory(node=self.project, user=self.user_1) self.comment_2 = CommentFactory(node=self.project, user=self.user_1) self.comment_3 = CommentFactory(node=self.project, user=self.user_1) self.comment_4 = CommentFactory(node=self.project, user=self.user_1) self.comment_5 = CommentFactory(node=self.project, user=self.user_2) self.comment_6 = CommentFactory(node=self.project, user=self.user_2) self.comment_1.report_abuse(user=self.user_2, save=True, category='spam') self.comment_2.report_abuse(user=self.user_2, save=True, category='spam') self.comment_3.report_abuse(user=self.user_2, save=True, category='spam') self.comment_4.report_abuse(user=self.user_2, save=True, category='spam') self.comment_5.report_abuse(user=self.user_1, save=True, category='spam') self.comment_6.report_abuse(user=self.user_1, save=True, category='spam') def test_get_spam(self): guid = self.user_1._id request = RequestFactory().get('/fake_path') view = UserSpamList() view = setup_view(view, request, user_id=guid) res = list(view.get_queryset()) nt.assert_equal(len(res), 4)
class TestCommentModel(OsfTestCase): def setUp(self): super(TestCommentModel, self).setUp() self.comment = CommentFactory() self.auth = Auth(user=self.comment.user) def test_create(self): comment = Comment.create( auth=self.auth, user=self.comment.user, node=self.comment.node, target=self.comment.target, page='node', is_public=True, content='This is a comment.' ) assert_equal(comment.user, self.comment.user) assert_equal(comment.node, self.comment.node) assert_equal(comment.target, self.comment.target) assert_equal(len(comment.node.logs), 2) assert_equal(comment.node.logs[-1].action, NodeLog.COMMENT_ADDED) def test_create_comment_content_cannot_exceed_max_length(self): with assert_raises(ValidationValueError): comment = Comment.create( auth=self.auth, user=self.comment.user, node=self.comment.node, target=self.comment.target, is_public=True, content=''.join(['c' for c in range(settings.COMMENT_MAXLENGTH + 1)]) ) def test_create_comment_content_cannot_be_none(self): with assert_raises(ValidationError) as error: comment = Comment.create( auth=self.auth, user=self.comment.user, node=self.comment.node, target=self.comment.target, is_public=True, content=None ) assert_equal(error.exception.message, 'Value <content> is required.') def test_create_comment_content_cannot_be_empty(self): with assert_raises(ValidationValueError) as error: comment = Comment.create( auth=self.auth, user=self.comment.user, node=self.comment.node, target=self.comment.target, is_public=True, content='' ) assert_equal(error.exception.message, 'Value must not be empty.') def test_create_comment_content_cannot_be_whitespace(self): with assert_raises(ValidationValueError) as error: comment = Comment.create( auth=self.auth, user=self.comment.user, node=self.comment.node, target=self.comment.target, is_public=True, content=' ' ) assert_equal(error.exception.message, 'Value must not be empty.') def test_create_sends_comment_added_signal(self): with capture_signals() as mock_signals: comment = Comment.create( auth=self.auth, user=self.comment.user, node=self.comment.node, target=self.comment.target, is_public=True, content='This is a comment.' ) assert_equal(mock_signals.signals_sent(), set([comment_added])) def test_edit(self): self.comment.edit( auth=self.auth, content='edited', save=True ) assert_equal(self.comment.content, 'edited') assert_true(self.comment.modified) assert_equal(len(self.comment.node.logs), 2) assert_equal(self.comment.node.logs[-1].action, NodeLog.COMMENT_UPDATED) def test_delete(self): self.comment.delete(auth=self.auth, save=True) assert_equal(self.comment.is_deleted, True) assert_equal(len(self.comment.node.logs), 2) assert_equal(self.comment.node.logs[-1].action, NodeLog.COMMENT_REMOVED) def test_undelete(self): self.comment.delete(auth=self.auth, save=True) self.comment.undelete(auth=self.auth, save=True) assert_equal(self.comment.is_deleted, False) assert_equal(len(self.comment.node.logs), 3) assert_equal(self.comment.node.logs[-1].action, NodeLog.COMMENT_RESTORED) def test_report_abuse(self): user = UserFactory() self.comment.report_abuse(user, category='spam', text='ads', save=True) assert_in(user._id, self.comment.reports) assert_equal( self.comment.reports[user._id], {'category': 'spam', 'text': 'ads'} ) def test_report_abuse_own_comment(self): with assert_raises(ValueError): self.comment.report_abuse( self.comment.user, category='spam', text='ads', save=True ) def test_unreport_abuse(self): user = UserFactory() self.comment.report_abuse(user, category='spam', text='ads', save=True) self.comment.unreport_abuse(user, save=True) assert_not_in(user._id, self.comment.reports) def test_unreport_abuse_not_reporter(self): reporter = UserFactory() non_reporter = UserFactory() self.comment.report_abuse(reporter, category='spam', text='ads', save=True) with assert_raises(ValueError): self.comment.unreport_abuse(non_reporter, save=True) assert_in(reporter._id, self.comment.reports) def test_validate_reports_bad_key(self): self.comment.reports[None] = {'category': 'spam', 'text': 'ads'} with assert_raises(ValidationValueError): self.comment.save() def test_validate_reports_bad_type(self): self.comment.reports[self.comment.user._id] = 'not a dict' with assert_raises(ValidationTypeError): self.comment.save() def test_validate_reports_bad_value(self): self.comment.reports[self.comment.user._id] = {'foo': 'bar'} with assert_raises(ValidationValueError): self.comment.save() def test_read_permission_contributor_can_comment(self): project = ProjectFactory() user = UserFactory() project.set_privacy('private') project.add_contributor(user, 'read') project.save() assert_true(project.can_comment(Auth(user=user))) def test_get_content_for_not_deleted_comment(self): project = ProjectFactory(is_public=True) comment = CommentFactory(node=project) content = comment.get_content(auth=Auth(comment.user)) assert_equal(content, comment.content) def test_get_content_returns_deleted_content_to_commenter(self): comment = CommentFactory(is_deleted=True) content = comment.get_content(auth=Auth(comment.user)) assert_equal(content, comment.content) def test_get_content_does_not_return_deleted_content_to_non_commenter(self): user = AuthUserFactory() comment = CommentFactory(is_deleted=True) content = comment.get_content(auth=Auth(user)) assert_is_none(content) def test_get_content_public_project_does_not_return_deleted_content_to_logged_out_user(self): project = ProjectFactory(is_public=True) comment = CommentFactory(node=project, is_deleted=True) content = comment.get_content(auth=None) assert_is_none(content) def test_get_content_private_project_throws_permissions_error_for_logged_out_users(self): project = ProjectFactory(is_public=False) comment = CommentFactory(node=project, is_deleted=True) with assert_raises(PermissionsError): comment.get_content(auth=None) def test_find_unread_is_zero_when_no_comments(self): n_unread = Comment.find_n_unread(user=UserFactory(), node=ProjectFactory()) assert_equal(n_unread, 0) def test_find_unread_new_comments(self): project = ProjectFactory() user = UserFactory() project.add_contributor(user) project.save() comment = CommentFactory(node=project, user=project.creator) n_unread = Comment.find_n_unread(user=user, node=project) assert_equal(n_unread, 1) def test_find_unread_includes_comment_replies(self): project = ProjectFactory() user = UserFactory() project.add_contributor(user) project.save() comment = CommentFactory(node=project, user=user) reply = CommentFactory(node=project, target=comment, user=project.creator) n_unread = Comment.find_n_unread(user=user, node=project) assert_equal(n_unread, 1) # Regression test for https://openscience.atlassian.net/browse/OSF-5193 def test_find_unread_includes_edited_comments(self): project = ProjectFactory() user = AuthUserFactory() project.add_contributor(user) project.save() comment = CommentFactory(node=project, user=project.creator) url = project.api_url_for('update_comments_timestamp') payload = {'page': 'node', 'rootId': project._id} res = self.app.put_json(url, payload, auth=user.auth) user.reload() n_unread = Comment.find_n_unread(user=user, node=project) assert_equal(n_unread, 0) # Edit previously read comment comment.edit( auth=Auth(project.creator), content='edited', save=True ) n_unread = Comment.find_n_unread(user=user, node=project) assert_equal(n_unread, 1) def test_find_unread_does_not_include_deleted_comments(self): project = ProjectFactory() user = AuthUserFactory() project.add_contributor(user) project.save() comment = CommentFactory(node=project, user=project.creator, is_deleted=True) n_unread = Comment.find_n_unread(user=user, node=project) assert_equal(n_unread, 0)
class TestSpamListView(AdminTestCase): def setUp(self): super(TestSpamListView, self).setUp() self.project = ProjectFactory(is_public=True) self.user_1 = AuthUserFactory() self.user_2 = AuthUserFactory() self.project.add_contributor(self.user_1) self.project.add_contributor(self.user_2) self.project.save() self.user_1.save() self.user_2.save() date = datetime.utcnow() self.comment_1 = CommentFactory(node=self.project, user=self.user_1) self.comment_2 = CommentFactory(node=self.project, user=self.user_1) self.comment_3 = CommentFactory(node=self.project, user=self.user_1) self.comment_4 = CommentFactory(node=self.project, user=self.user_1) self.comment_5 = CommentFactory(node=self.project, user=self.user_2) self.comment_6 = CommentFactory(node=self.project, user=self.user_2) self.comment_1.report_abuse( user=self.user_2, save=True, category='spam', date=date - timedelta(seconds=5) ) self.comment_2.report_abuse( user=self.user_2, save=True, category='spam', date=date - timedelta(seconds=4) ) self.comment_3.report_abuse( user=self.user_2, save=True, category='spam', date=date - timedelta(seconds=3) ) self.comment_4.report_abuse( user=self.user_2, save=True, category='spam', date=date - timedelta(seconds=2) ) self.comment_5.report_abuse( user=self.user_1, save=True, category='spam', date=date - timedelta(seconds=1) ) self.comment_6.report_abuse(user=self.user_1, save=True, category='spam') def test_get_spam(self): guid = self.user_1._id request = RequestFactory().get('/fake_path') view = SpamList() view = setup_view(view, request, user_id=guid) res = list(view.get_queryset()) nt.assert_equal(len(res), 6) response_list = [r._id for r in res] should_be = [ self.comment_6._id, self.comment_5._id, self.comment_4._id, self.comment_3._id, self.comment_2._id, self.comment_1._id ] nt.assert_list_equal(should_be, response_list)
class TestSpamListView(AdminTestCase): def setUp(self): super(TestSpamListView, self).setUp() Comment.remove() self.project = ProjectFactory(is_public=True) self.user_1 = AuthUserFactory() self.user_2 = AuthUserFactory() self.project.add_contributor(self.user_1) self.project.add_contributor(self.user_2) self.project.save() self.user_1.save() self.user_2.save() date = datetime.utcnow() self.comment_1 = CommentFactory(node=self.project, user=self.user_1) self.comment_2 = CommentFactory(node=self.project, user=self.user_1) self.comment_3 = CommentFactory(node=self.project, user=self.user_1) self.comment_4 = CommentFactory(node=self.project, user=self.user_1) self.comment_5 = CommentFactory(node=self.project, user=self.user_2) self.comment_6 = CommentFactory(node=self.project, user=self.user_2) self.comment_1.report_abuse( user=self.user_2, save=True, category='spam', date=date - timedelta(seconds=5) ) self.comment_2.report_abuse( user=self.user_2, save=True, category='spam', date=date - timedelta(seconds=4) ) self.comment_3.report_abuse( user=self.user_2, save=True, category='spam', date=date - timedelta(seconds=3) ) self.comment_4.report_abuse( user=self.user_2, save=True, category='spam', date=date - timedelta(seconds=2) ) self.comment_5.report_abuse( user=self.user_1, save=True, category='spam', date=date - timedelta(seconds=1) ) self.comment_6.report_abuse(user=self.user_1, save=True, category='spam') self.request = RequestFactory().get('/fake_path') self.view = SpamList() self.view = setup_view(self.view, self.request, user_id=self.user_1._id) def test_get_spam(self): res = list(self.view.get_queryset()) nt.assert_equal(len(res), 6) response_list = [r._id for r in res] should_be = [ self.comment_6._id, self.comment_5._id, self.comment_4._id, self.comment_3._id, self.comment_2._id, self.comment_1._id ] nt.assert_list_equal(should_be, response_list) def test_get_context_data(self): self.view.object_list = self.view.get_queryset() res = self.view.get_context_data() nt.assert_is_instance(res['spam'], list) nt.assert_is_instance(res['spam'][0], dict) nt.assert_equal(res['status'], '1') nt.assert_equal(res['page_number'], 1)
class TestUserSpamListView(AdminTestCase): def setUp(self): super(TestUserSpamListView, self).setUp() self.project = ProjectFactory(is_public=True) self.user_1 = AuthUserFactory() self.user_2 = AuthUserFactory() self.project.add_contributor(self.user_1) self.project.add_contributor(self.user_2) self.project.save() self.user_1.save() self.user_2.save() self.comment_1 = CommentFactory(node=self.project, user=self.user_1) self.comment_2 = CommentFactory(node=self.project, user=self.user_1) self.comment_3 = CommentFactory(node=self.project, user=self.user_1) self.comment_4 = CommentFactory(node=self.project, user=self.user_1) self.comment_5 = CommentFactory(node=self.project, user=self.user_2) self.comment_6 = CommentFactory(node=self.project, user=self.user_2) self.comment_1.report_abuse(user=self.user_2, save=True, category='spam') self.comment_2.report_abuse(user=self.user_2, save=True, category='spam') self.comment_3.report_abuse(user=self.user_2, save=True, category='spam') self.comment_4.report_abuse(user=self.user_2, save=True, category='spam') self.comment_5.report_abuse(user=self.user_1, save=True, category='spam') self.comment_6.report_abuse(user=self.user_1, save=True, category='spam') self.request = RequestFactory().get('/fake_path') self.view = UserSpamList() self.view = setup_view(self.view, self.request, user_id=self.user_1._id) def test_get_user_spam(self): res = list(self.view.get_queryset()) nt.assert_equal(len(res), 4) def test_get_context_data(self): self.view.object_list = self.view.get_queryset() res = self.view.get_context_data() nt.assert_is_instance(res['spam'], list) nt.assert_is_instance(res['spam'][0], dict) nt.assert_equal(res['status'], '1') nt.assert_equal(res['page_number'], 1) nt.assert_equal(res['user_id'], self.user_1._id)
class TestSpamMixin(OsfTestCase): def setUp(self): super(TestSpamMixin, self).setUp() self.comment = CommentFactory() self.auth = Auth(user=self.comment.user) def test_report_abuse(self): user = UserFactory() time = datetime.utcnow() self.comment.report_abuse(user, date=time, category='spam', text='ads', save=True) assert_equal(self.comment.spam_status, SpamStatus.FLAGGED) equivalent = dict(date=time, category='spam', text='ads', retracted=False) assert_in(user._id, self.comment.reports) assert_equal(self.comment.reports[user._id], equivalent) def test_report_abuse_own_comment(self): with assert_raises(ValueError): self.comment.report_abuse(self.comment.user, category='spam', text='ads', save=True) assert_equal(self.comment.spam_status, SpamStatus.UNKNOWN) def test_retract_report(self): user = UserFactory() time = datetime.utcnow() self.comment.report_abuse(user, date=time, category='spam', text='ads', save=True) assert_equal(self.comment.spam_status, SpamStatus.FLAGGED) self.comment.retract_report(user, save=True) assert_equal(self.comment.spam_status, SpamStatus.UNKNOWN) equivalent = { 'date': time, 'category': 'spam', 'text': 'ads', 'retracted': True } assert_in(user._id, self.comment.reports) assert_equal(self.comment.reports[user._id], equivalent) def test_retract_report_not_reporter(self): reporter = UserFactory() non_reporter = UserFactory() self.comment.report_abuse(reporter, category='spam', text='ads', save=True) with assert_raises(ValueError): self.comment.retract_report(non_reporter, save=True) assert_equal(self.comment.spam_status, SpamStatus.FLAGGED) def test_retract_one_report_of_many(self): user_1 = UserFactory() user_2 = UserFactory() time = datetime.utcnow() self.comment.report_abuse(user_1, date=time, category='spam', text='ads', save=True) assert_equal(self.comment.spam_status, SpamStatus.FLAGGED) self.comment.report_abuse(user_2, date=time, category='spam', text='all', save=True) self.comment.retract_report(user_1, save=True) equivalent = { 'date': time, 'category': 'spam', 'text': 'ads', 'retracted': True } assert_in(user_1._id, self.comment.reports) assert_equal(self.comment.reports[user_1._id], equivalent) assert_equal(self.comment.spam_status, SpamStatus.FLAGGED) def test_flag_spam(self): self.comment.flag_spam() self.comment.save() assert_equal(self.comment.spam_status, SpamStatus.FLAGGED) def test_cannot_remove_flag_not_retracted(self): user = UserFactory() self.comment.report_abuse(user, category='spam', text='ads', save=True) self.comment.remove_flag(save=True) assert_equal(self.comment.spam_status, SpamStatus.FLAGGED) def test_remove_flag(self): self.comment.flag_spam() self.comment.save() assert_equal(self.comment.spam_status, SpamStatus.FLAGGED) self.comment.remove_flag(save=True) assert_equal(self.comment.spam_status, SpamStatus.UNKNOWN) def test_confirm_ham(self): self.comment.confirm_ham(save=True) assert_equal(self.comment.spam_status, SpamStatus.HAM) def test_confirm_spam(self): self.comment.confirm_spam(save=True) assert_equal(self.comment.spam_status, SpamStatus.SPAM) def test_validate_reports_bad_key(self): self.comment.reports[None] = {'category': 'spam', 'text': 'ads'} with assert_raises(ValidationValueError): self.comment.save() def test_validate_reports_bad_type(self): self.comment.reports[self.comment.user._id] = 'not a dict' with assert_raises(ValidationTypeError): self.comment.save() def test_validate_reports_bad_value(self): self.comment.reports[self.comment.user._id] = {'foo': 'bar'} with assert_raises(ValidationValueError): self.comment.save()