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) |