Commit 947607f0206cfe40e86a6f152315ebb466edded9
1 parent
49557601
Exists in
master
and in
29 other branches
[comments-refactor-review] Testing permissions to edit comment too
Showing
2 changed files
with
39 additions
and
9 deletions
Show diff stats
app/controllers/public/comment_controller.rb
| @@ -108,11 +108,8 @@ class CommentController < ApplicationController | @@ -108,11 +108,8 @@ class CommentController < ApplicationController | ||
| 108 | def edit | 108 | def edit |
| 109 | begin | 109 | begin |
| 110 | @comment = profile.comments_received.find(params[:id]) | 110 | @comment = profile.comments_received.find(params[:id]) |
| 111 | + raise ActiveRecord::RecordNotFound unless @comment.can_be_updated_by?(user) # Not reveal that the comment exists | ||
| 111 | rescue ActiveRecord::RecordNotFound | 112 | rescue ActiveRecord::RecordNotFound |
| 112 | - @comment = nil | ||
| 113 | - end | ||
| 114 | - | ||
| 115 | - if @comment.nil? | ||
| 116 | render_not_found | 113 | render_not_found |
| 117 | return | 114 | return |
| 118 | end | 115 | end |
| @@ -123,11 +120,8 @@ class CommentController < ApplicationController | @@ -123,11 +120,8 @@ class CommentController < ApplicationController | ||
| 123 | def update | 120 | def update |
| 124 | begin | 121 | begin |
| 125 | @comment = profile.comments_received.find(params[:id]) | 122 | @comment = profile.comments_received.find(params[:id]) |
| 123 | + raise ActiveRecord::RecordNotFound unless @comment.can_be_updated_by?(user) # Not reveal that the comment exists | ||
| 126 | rescue ActiveRecord::RecordNotFound | 124 | rescue ActiveRecord::RecordNotFound |
| 127 | - @comment = nil | ||
| 128 | - end | ||
| 129 | - | ||
| 130 | - if @comment.nil? or user != @comment.author | ||
| 131 | render_not_found | 125 | render_not_found |
| 132 | return | 126 | return |
| 133 | end | 127 | end |
test/functional/comment_controller_test.rb
| @@ -477,7 +477,7 @@ class CommentControllerTest < ActionController::TestCase | @@ -477,7 +477,7 @@ class CommentControllerTest < ActionController::TestCase | ||
| 477 | should 'edit comment from a page' do | 477 | should 'edit comment from a page' do |
| 478 | login_as profile.identifier | 478 | login_as profile.identifier |
| 479 | page = profile.articles.create!(:name => 'myarticle', :body => 'the body of the text') | 479 | page = profile.articles.create!(:name => 'myarticle', :body => 'the body of the text') |
| 480 | - comment = fast_create(Comment, :body => 'Original comment', :source_id => page.id, :source_type => 'Article') | 480 | + comment = fast_create(Comment, :body => 'Original comment', :source_id => page.id, :source_type => 'Article', :author_id => profile.id) |
| 481 | 481 | ||
| 482 | get :edit, :id => comment.id, :profile => profile.identifier, :comment => { :body => 'Comment edited' } | 482 | get :edit, :id => comment.id, :profile => profile.identifier, :comment => { :body => 'Comment edited' } |
| 483 | assert_tag :tag => 'textarea', :attributes => {:id => 'comment_body'}, :content => 'Original comment' | 483 | assert_tag :tag => 'textarea', :attributes => {:id => 'comment_body'}, :content => 'Original comment' |
| @@ -491,6 +491,24 @@ class CommentControllerTest < ActionController::TestCase | @@ -491,6 +491,24 @@ class CommentControllerTest < ActionController::TestCase | ||
| 491 | assert_response 404 | 491 | assert_response 404 |
| 492 | end | 492 | end |
| 493 | 493 | ||
| 494 | + should 'not be able to edit comment not logged' do | ||
| 495 | + page = profile.articles.create!(:name => 'myarticle', :body => 'the body of the text') | ||
| 496 | + comment = fast_create(Comment, :body => 'Original comment', :source_id => page.id, :source_type => 'Article') | ||
| 497 | + | ||
| 498 | + get :edit, :id => comment.id, :profile => profile.identifier, :comment => { :body => 'Comment edited' } | ||
| 499 | + assert_response 404 | ||
| 500 | + end | ||
| 501 | + | ||
| 502 | + should 'not be able to edit comment if does not have the permission to' do | ||
| 503 | + user = create_user('any_guy').person | ||
| 504 | + login_as user.identifier | ||
| 505 | + page = profile.articles.create!(:name => 'myarticle', :body => 'the body of the text') | ||
| 506 | + comment = fast_create(Comment, :body => 'Original comment', :source_id => page.id, :source_type => 'Article') | ||
| 507 | + | ||
| 508 | + get :edit, :id => comment.id, :profile => profile.identifier, :comment => { :body => 'Comment edited' } | ||
| 509 | + assert_response 404 | ||
| 510 | + end | ||
| 511 | + | ||
| 494 | should 'be able to update a comment' do | 512 | should 'be able to update a comment' do |
| 495 | login_as profile.identifier | 513 | login_as profile.identifier |
| 496 | page = profile.articles.create!(:name => 'myarticle', :body => 'the body of the text', :accept_comments => false) | 514 | page = profile.articles.create!(:name => 'myarticle', :body => 'the body of the text', :accept_comments => false) |
| @@ -509,6 +527,24 @@ class CommentControllerTest < ActionController::TestCase | @@ -509,6 +527,24 @@ class CommentControllerTest < ActionController::TestCase | ||
| 509 | assert_response 404 | 527 | assert_response 404 |
| 510 | end | 528 | end |
| 511 | 529 | ||
| 530 | + should 'not be able to update comment not logged' do | ||
| 531 | + page = profile.articles.create!(:name => 'myarticle', :body => 'the body of the text') | ||
| 532 | + comment = fast_create(Comment, :body => 'Original comment', :source_id => page.id, :source_type => 'Article') | ||
| 533 | + | ||
| 534 | + xhr :post, :update, :id => comment.id, :profile => profile.identifier, :comment => { :body => 'Comment edited' } | ||
| 535 | + assert_response 404 | ||
| 536 | + end | ||
| 537 | + | ||
| 538 | + should 'not be able to update comment if does not have the permission to' do | ||
| 539 | + user = create_user('any_guy').person | ||
| 540 | + login_as user.identifier | ||
| 541 | + page = profile.articles.create!(:name => 'myarticle', :body => 'the body of the text') | ||
| 542 | + comment = fast_create(Comment, :body => 'Original comment', :source_id => page.id, :source_type => 'Article') | ||
| 543 | + | ||
| 544 | + xhr :post, :update, :id => comment.id, :profile => profile.identifier, :comment => { :body => 'Comment edited' } | ||
| 545 | + assert_response 404 | ||
| 546 | + end | ||
| 547 | + | ||
| 512 | should 'returns ids of menu items that has to be displayed' do | 548 | should 'returns ids of menu items that has to be displayed' do |
| 513 | class TestActionPlugin < Noosfero::Plugin | 549 | class TestActionPlugin < Noosfero::Plugin |
| 514 | def check_comment_actions(c) | 550 | def check_comment_actions(c) |