Commit 08b5be5ba7e325f95a20518a65d9c6e07d5cdb1e

Authored by Rodrigo Souto
1 parent 5ae2a0b6

[comments-refactor-review] Encapsulating comment mark_as_spam check

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 = {})
... ...