Commit aa6be22b2af8fec732f9ae4d46d33fba55aced79
1 parent
09e8041b
Exists in
master
and in
29 other branches
[comments-refactor-review] Encapsulating comment moderation check
Showing
3 changed files
with
48 additions
and
1 deletions
Show diff stats
app/controllers/public/comment_controller.rb
| @@ -57,7 +57,7 @@ class CommentController < ApplicationController | @@ -57,7 +57,7 @@ class CommentController < ApplicationController | ||
| 57 | return | 57 | return |
| 58 | end | 58 | end |
| 59 | 59 | ||
| 60 | - if @comment.article.moderate_comments? && !(@comment.author && @comment.author_id == @comment.article.author_id) | 60 | + if @comment.need_moderation? |
| 61 | @comment.created_at = Time.now | 61 | @comment.created_at = Time.now |
| 62 | ApproveComment.create!(:requestor => @comment.author, :target => profile, :comment_attributes => @comment.attributes.to_json) | 62 | ApproveComment.create!(:requestor => @comment.author, :target => profile, :comment_attributes => @comment.attributes.to_json) |
| 63 | 63 |
app/models/comment.rb
| @@ -255,4 +255,8 @@ class Comment < ActiveRecord::Base | @@ -255,4 +255,8 @@ class Comment < ActiveRecord::Base | ||
| 255 | plugins.dispatch(:comment_marked_as_ham, self) | 255 | plugins.dispatch(:comment_marked_as_ham, self) |
| 256 | end | 256 | end |
| 257 | 257 | ||
| 258 | + def need_moderation? | ||
| 259 | + article.moderate_comments? && (author.nil? || article.author != author) | ||
| 260 | + end | ||
| 261 | + | ||
| 258 | end | 262 | end |
test/unit/comment_test.rb
| @@ -550,6 +550,49 @@ class CommentTest < ActiveSupport::TestCase | @@ -550,6 +550,49 @@ class CommentTest < ActiveSupport::TestCase | ||
| 550 | SpammerLogger.clean_log | 550 | SpammerLogger.clean_log |
| 551 | end | 551 | end |
| 552 | 552 | ||
| 553 | + should 'not need moderation if article is not moderated' do | ||
| 554 | + article = Article.new | ||
| 555 | + comment = Comment.new(:article => article) | ||
| 556 | + | ||
| 557 | + assert !comment.need_moderation? | ||
| 558 | + end | ||
| 559 | + | ||
| 560 | + should 'not need moderation if the comment author is the article author' do | ||
| 561 | + author = Person.new | ||
| 562 | + article = Article.new | ||
| 563 | + | ||
| 564 | + article.stubs(:author).returns(author) | ||
| 565 | + article.moderate_comments = true | ||
| 566 | + | ||
| 567 | + comment = Comment.new(:article => article) | ||
| 568 | + comment.stubs(:author).returns(author) | ||
| 569 | + | ||
| 570 | + assert !comment.need_moderation? | ||
| 571 | + end | ||
| 572 | + | ||
| 573 | + should 'need moderation if article is moderated and the comment has no author' do | ||
| 574 | + article = Article.new | ||
| 575 | + article.stubs(:moderate_comments?).returns(true) | ||
| 576 | + | ||
| 577 | + comment = Comment.new(:article => article) | ||
| 578 | + | ||
| 579 | + assert comment.need_moderation? | ||
| 580 | + end | ||
| 581 | + | ||
| 582 | + should 'need moderation if article is moderated and the comment author is different from article author' do | ||
| 583 | + article_author = Person.new | ||
| 584 | + comment_author = Person.new | ||
| 585 | + | ||
| 586 | + article = Article.new | ||
| 587 | + article.stubs(:author).returns(article_author) | ||
| 588 | + article.stubs(:moderate_comments?).returns(true) | ||
| 589 | + | ||
| 590 | + comment = Comment.new(:article => article) | ||
| 591 | + comment.stubs(:author).returns(comment_author) | ||
| 592 | + | ||
| 593 | + assert comment.need_moderation? | ||
| 594 | + end | ||
| 595 | + | ||
| 553 | private | 596 | private |
| 554 | 597 | ||
| 555 | def create_comment(args = {}) | 598 | def create_comment(args = {}) |