Ticket #11625: 11625.2.diff
File 11625.2.diff, 7.6 KB (added by , 15 years ago) |
---|
-
django/contrib/comments/admin.py
diff --git a/django/contrib/comments/admin.py b/django/contrib/comments/admin.py index 3b1fb14..4ce2fca 100644
a b 1 1 from django.contrib import admin 2 from django.contrib.comments.models import Comment 2 from django.contrib.comments.models import Comment, CommentFlag 3 3 from django.utils.translation import ugettext_lazy as _ 4 from django.contrib.comments import get_model 4 from django.contrib.comments import get_model, signals 5 from django.core.exceptions import PermissionDenied 5 6 6 7 class CommentsAdmin(admin.ModelAdmin): 7 8 fieldsets = ( … … class CommentsAdmin(admin.ModelAdmin): 21 22 date_hierarchy = 'submit_date' 22 23 ordering = ('-submit_date',) 23 24 search_fields = ('comment', 'user__username', 'user_name', 'user_email', 'user_url', 'ip_address') 25 actions = ['approve_selected', 'remove_selected'] 26 27 def approve_selected(self, request, queryset): 28 """ Approve comments through moderation. """ 29 30 if not request.user.has_perm('comments.can_moderate') 31 raise PermissionDenied 32 33 for comment in queryset: 34 # Flag the comment as approved. 35 flag, created = CommentFlag.objects.get_or_create( 36 comment = comment, 37 user = request.user, 38 flag = CommentFlag.MODERATOR_APPROVAL 39 ) 40 41 comment.is_removed = False 42 comment.is_public = True 43 comment.save() 44 45 signals.comment_was_flagged.send( 46 sender = comment.__class__, 47 comment = comment, 48 flag = flag, 49 created = created, 50 request = request 51 ) 52 53 self.message_user(request, '%s successfully approved.' % self._get_message_bit(queryset.count())) 54 55 approve_selected.short_description = 'Approve selected comments' 56 57 def remove_selected(self, request, queryset): 58 """ Remove comments through moderation. """ 59 60 if not request.user.has_perm('comments.can_moderate') 61 raise PermissionDenied 62 63 for comment in queryset: 64 # Flag the comment as removed. 65 flag, created = CommentFlag.objects.get_or_create( 66 comment = comment, 67 user = request.user, 68 flag = CommentFlag.MODERATOR_DELETION 69 ) 70 71 comment.is_removed = True 72 comment.save() 73 74 signals.comment_was_flagged.send( 75 sender = comment.__class__, 76 comment = comment, 77 flag = flag, 78 created = created, 79 request = request 80 ) 81 82 self.message_user(request, '%s successfully removed.' % self._get_message_bit(queryset.count())) 83 84 remove_selected.short_description = 'Remove selected comments' 85 86 def _get_message_bit(self, rows_updated): 87 if rows_updated == 1: 88 return '1 comment was' 89 else: 90 return '%s comments were' % rows_updated 24 91 25 92 # Only register the default admin if the model is the built-in comment model 26 93 # (this won't be true if there's a custom comment app). -
tests/regressiontests/comment_tests/tests/__init__.py
diff --git a/tests/regressiontests/comment_tests/tests/__init__.py b/tests/regressiontests/comment_tests/tests/__init__.py index 449fea4..b2ead81 100644
a b from regressiontests.comment_tests.tests.templatetag_tests import * 87 87 from regressiontests.comment_tests.tests.comment_view_tests import * 88 88 from regressiontests.comment_tests.tests.moderation_view_tests import * 89 89 from regressiontests.comment_tests.tests.comment_utils_moderators_tests import * 90 from regressiontests.comment_tests.tests.admin_moderation_tests import * -
new file tests/regressiontests/comment_tests/tests/admin_moderation_tests.py
diff --git a/tests/regressiontests/comment_tests/tests/admin_moderation_tests.py b/tests/regressiontests/comment_tests/tests/admin_moderation_tests.py new file mode 100644 index 0000000..61b60ce
- + 1 from django.contrib.comments.models import Comment, CommentFlag 2 from regressiontests.comment_tests.tests import CommentTestCase 3 from regressiontests.comment_tests.tests.moderation_view_tests import makeModerator 4 from django.contrib.comments import signals 5 from django.contrib.admin.helpers import ACTION_CHECKBOX_NAME 6 7 class AdminModerationTests(CommentTestCase): 8 fixtures = ['comment_tests'] 9 10 def setUp(self): 11 makeModerator('normaluser') 12 self.client.login(username='normaluser', password='normaluser') 13 14 def tearDown(self): 15 self.client.logout() 16 17 def test_comment_admin_approve_action(self): 18 "Tests the builtin aprove action defined as an admin method." 19 c1, c2, c3, c4 = self.createSomeComments() 20 c1.is_public = False 21 c1.is_removed = True 22 c1.save() 23 action_data = { 24 ACTION_CHECKBOX_NAME: [1], 25 'action' : 'approve_selected', 26 'index' : c1.pk, 27 } 28 response = self.client.post('/admin/comments/comment', action_data) 29 self.assertEqual(response.status_code, 302) 30 c = Comment.objects.get(pk=c1.pk) 31 self.assertTrue(c.is_public) 32 self.assertFalse(c.is_removed) 33 self.assertEqual(c.flags.filter(flag=CommentFlag.MODERATOR_APPROVAL, user__username="super").count(), 1) 34 35 def test_approve_action_signals(self): 36 "Test signal is received upon aprove action." 37 def receive(sender, **kwargs): 38 received_signals.append(kwargs.get('signal')) 39 40 received_signals = [] 41 signals.comment_was_flagged.connect(receive) 42 43 self.test_comment_admin_approve_action() 44 self.assertEqual(received_signals, [signals.comment_was_flagged]) 45 46 def test_comment_admin_remove_action(self): 47 "Tests the builtin remove action defined as an admin method." 48 c1, c2, c3, c4 = self.createSomeComments() 49 action_data = { 50 ACTION_CHECKBOX_NAME: [1], 51 'action' : 'remove_selected', 52 'index' : c1.pk, 53 } 54 response = self.client.post('/admin/comments/comment/', action_data) 55 self.assertEqual(response.status_code, 302) 56 c = Comment.objects.get(pk=c1.pk) 57 self.assertTrue(c.is_removed) 58 self.assertEqual(c.flags.filter(flag=CommentFlag.MODERATOR_DELETION, user__username="super").count(), 1) 59 60 def test_remove_action_signals(self): 61 "Test signal is received upon remove action." 62 def receive(sender, **kwargs): 63 received_signals.append(kwargs.get('signal')) 64 65 received_signals = [] 66 signals.comment_was_flagged.connect(receive) 67 68 self.test_comment_admin_remove_action() 69 self.assertEqual(received_signals, [signals.comment_was_flagged]) 70 -
tests/regressiontests/comment_tests/urls.py
diff --git a/tests/regressiontests/comment_tests/urls.py b/tests/regressiontests/comment_tests/urls.py index 0058689..76ca4b9 100644
a b 1 1 from django.conf.urls.defaults import * 2 from django.contrib import admin 2 3 3 4 urlpatterns = patterns('regressiontests.comment_tests.custom_comments.views', 4 5 url(r'^post/$', 'custom_submit_comment'), … … urlpatterns = patterns('regressiontests.comment_tests.custom_comments.views', 7 8 url(r'^approve/(\d+)/$', 'custom_approve_comment'), 8 9 ) 9 10 11 urlpatterns += patterns('', 12 url(r'^admin/', include(admin.site.urls)), 13 ) 14