Commit 08b5be5ba7e325f95a20518a65d9c6e07d5cdb1e
1 parent
5ae2a0b6
Exists in
master
and in
29 other branches
[comments-refactor-review] Encapsulating comment mark_as_spam check
Showing
3 changed files
with
41 additions
and
3 deletions
Show diff stats
app/controllers/public/comment_controller.rb
... | ... | @@ -96,9 +96,7 @@ class CommentController < ApplicationController |
96 | 96 | |
97 | 97 | def mark_as_spam |
98 | 98 | comment = profile.comments_received.find(params[:id]) |
99 | - could_mark_as_spam = (user == comment.profile || user.has_permission?(:moderate_comments, comment.profile)) | |
100 | - | |
101 | - if logged_in? && could_mark_as_spam | |
99 | + if comment.can_be_marked_as_spam_by?(user) | |
102 | 100 | comment.spam! |
103 | 101 | render :text => {'ok' => true}.to_json, :content_type => 'application/json' |
104 | 102 | else | ... | ... |
app/models/comment.rb
... | ... | @@ -264,4 +264,9 @@ class Comment < ActiveRecord::Base |
264 | 264 | user == author || user == profile || user.has_permission?(:moderate_comments, profile) |
265 | 265 | end |
266 | 266 | |
267 | + def can_be_marked_as_spam_by?(user) | |
268 | + return if user.nil? | |
269 | + user == profile || user.has_permission?(:moderate_comments, profile) | |
270 | + end | |
271 | + | |
267 | 272 | end | ... | ... |
test/unit/comment_test.rb
... | ... | @@ -635,6 +635,41 @@ class CommentTest < ActiveSupport::TestCase |
635 | 635 | assert comment.can_be_destroyed_by?(user) |
636 | 636 | end |
637 | 637 | |
638 | + should 'not be able to mark comment as spam without user' do | |
639 | + comment = Comment.new | |
640 | + | |
641 | + assert !comment.can_be_marked_as_spam_by?(nil) | |
642 | + end | |
643 | + | |
644 | + should 'not be able to mark comment as spam' do | |
645 | + user = Person.new | |
646 | + profile = Profile.new | |
647 | + article = Article.new(:profile => profile) | |
648 | + comment = Comment.new(:article => article) | |
649 | + user.expects(:has_permission?).with(:moderate_comments, profile).returns(false) | |
650 | + | |
651 | + assert !comment.can_be_marked_as_spam_by?(user) | |
652 | + end | |
653 | + | |
654 | + should 'be able to mark comment as spam if is the profile' do | |
655 | + user = Person.new | |
656 | + article = Article.new(:profile => user) | |
657 | + comment = Comment.new(:article => article) | |
658 | + | |
659 | + assert comment.can_be_marked_as_spam_by?(user) | |
660 | + end | |
661 | + | |
662 | + should 'be able to mark comment as spam if can moderate_comments on the profile' do | |
663 | + user = Person.new | |
664 | + profile = Profile.new | |
665 | + article = Article.new(:profile => profile) | |
666 | + comment = Comment.new(:article => article) | |
667 | + | |
668 | + user.expects(:has_permission?).with(:moderate_comments, profile).returns(true) | |
669 | + | |
670 | + assert comment.can_be_marked_as_spam_by?(user) | |
671 | + end | |
672 | + | |
638 | 673 | private |
639 | 674 | |
640 | 675 | def create_comment(args = {}) | ... | ... |