Commit 0541cc4a14da751d744dcfd132ee4bbef0db4266

Authored by Daniela Feitosa
1 parent e7153498

Searching comments on page before editing it

- Added render_not_found screen when comment id doesn't exist
- Displaying message when trying to edit a comment from other page
- Fixed a test on ToleranceTimePlugin
app/controllers/public/content_viewer_controller.rb
@@ -127,15 +127,20 @@ class ContentViewerController < ApplicationController @@ -127,15 +127,20 @@ class ContentViewerController < ApplicationController
127 path = params[:page].join('/') 127 path = params[:page].join('/')
128 @page = profile.articles.find_by_path(path) 128 @page = profile.articles.find_by_path(path)
129 @form_div = 'opened' 129 @form_div = 'opened'
130 - @comment = Comment.find(params[:id])  
131 - if request.post?  
132 - begin  
133 - @comment.update_attributes(params[:comment])  
134 - session[:notice] = _('Comment updated.')  
135 - redirect_to :action => 'view_page', :profile => profile.identifier, :page => @comment.article.explode_path  
136 - rescue  
137 - session[:notice] = _('Comment could not be updated.') 130 + @comment = @page.comments.find_by_id(params[:id])
  131 + if @comment
  132 + if request.post?
  133 + begin
  134 + @comment.update_attributes(params[:comment])
  135 + session[:notice] = _('Comment succesfully updated')
  136 + redirect_to :action => 'view_page', :profile => profile.identifier, :page => @comment.article.explode_path
  137 + rescue
  138 + session[:notice] = _('Comment could not be updated')
  139 + end
138 end 140 end
  141 + else
  142 + redirect_to @page.view_url
  143 + session[:notice] = _('Could not find the comment in the article')
139 end 144 end
140 end 145 end
141 146
@@ -217,8 +222,12 @@ class ContentViewerController < ApplicationController @@ -217,8 +222,12 @@ class ContentViewerController < ApplicationController
217 end 222 end
218 223
219 def comment_author 224 def comment_author
220 - comment = Comment.find(params[:id])  
221 - render_access_denied if comment.author.blank? || comment.author != user 225 + comment = Comment.find_by_id(params[:id])
  226 + if comment
  227 + render_access_denied if comment.author.blank? || comment.author != user
  228 + else
  229 + render_not_found
  230 + end
222 end 231 end
223 232
224 end 233 end
app/views/content_viewer/_comment_form.rhtml
@@ -32,15 +32,17 @@ function submit_comment_form(button) { @@ -32,15 +32,17 @@ function submit_comment_form(button) {
32 32
33 <div class="post_comment_box <%= @form_div %>"> 33 <div class="post_comment_box <%= @form_div %>">
34 34
35 -<h4 onclick="var d = jQuery(this).parent('.post_comment_box');  
36 - if (d.hasClass('closed')) {  
37 - d.removeClass('closed');  
38 - d.addClass('opened');  
39 - d.find('input[name=comment[title]], textarea').val('');  
40 - d.find('.comment_form input[name=comment[<%= focus_on %>]]').focus();  
41 - }">  
42 - <%= content_tag('a', '', :name => 'comment_form') + _('Post a comment') if display_link %>  
43 -</h4> 35 +<% if display_link %>
  36 + <h4 onclick="var d = jQuery(this).parent('.post_comment_box');
  37 + if (d.hasClass('closed')) {
  38 + d.removeClass('closed');
  39 + d.addClass('opened');
  40 + d.find('input[name=comment[title]], textarea').val('');
  41 + d.find('.comment_form input[name=comment[<%= focus_on %>]]').focus();
  42 + }">
  43 + <%= content_tag('a', '', :name => 'comment_form') + _('Post a comment') %>
  44 + </h4>
  45 +<% end %>
44 46
45 <% unless pass_without_comment_captcha? %> 47 <% unless pass_without_comment_captcha? %>
46 <div id="recaptcha-container" style="display: none"> 48 <div id="recaptcha-container" style="display: none">
plugins/tolerance_time/lib/tolerance_time_plugin.rb
@@ -35,7 +35,7 @@ class ToleranceTimePlugin &lt; Noosfero::Plugin @@ -35,7 +35,7 @@ class ToleranceTimePlugin &lt; Noosfero::Plugin
35 block = lambda do 35 block = lambda do
36 content = Article.find(params[:id]) 36 content = Article.find(params[:id])
37 if ToleranceTimePlugin.expired?(content) 37 if ToleranceTimePlugin.expired?(content)
38 - session[:notice] = _('This content can\'t be edited anymore because it expired the tolerance time') 38 + session[:notice] = _("This content can't be edited anymore because it expired the tolerance time")
39 redirect_to content.url 39 redirect_to content.url
40 end 40 end
41 end 41 end
@@ -51,7 +51,7 @@ class ToleranceTimePlugin &lt; Noosfero::Plugin @@ -51,7 +51,7 @@ class ToleranceTimePlugin &lt; Noosfero::Plugin
51 block = lambda do 51 block = lambda do
52 content = Comment.find(params[:id]) 52 content = Comment.find(params[:id])
53 if ToleranceTimePlugin.expired?(content) 53 if ToleranceTimePlugin.expired?(content)
54 - session[:notice] = _('This content can\'t be edited anymore because it expired the tolerance time') 54 + session[:notice] = _("This content can't be edited anymore because it expired the tolerance time")
55 redirect_to content.article.url 55 redirect_to content.article.url
56 end 56 end
57 end 57 end
plugins/tolerance_time/lib/tolerance_time_plugin/publication.rb
@@ -22,6 +22,6 @@ class ToleranceTimePlugin::Publication &lt; Noosfero::Plugin::ActiveRecord @@ -22,6 +22,6 @@ class ToleranceTimePlugin::Publication &lt; Noosfero::Plugin::ActiveRecord
22 else 22 else
23 tolerance_time = 1.0/0 23 tolerance_time = 1.0/0
24 end 24 end
25 - created_at.to_i+tolerance_time < Time.now.to_i 25 + created_at.to_f.to_i+tolerance_time < Time.now.to_i
26 end 26 end
27 end 27 end
test/functional/content_viewer_controller_test.rb
@@ -1464,4 +1464,42 @@ end @@ -1464,4 +1464,42 @@ end
1464 assert spam.spam? 1464 assert spam.spam?
1465 end 1465 end
1466 1466
  1467 + should 'be able to edit a comment' do
  1468 + login_as profile.identifier
  1469 + page = profile.articles.create!(:name => 'myarticle', :body => 'the body of the text', :accept_comments => false)
  1470 + comment = fast_create(Comment, :body => 'Original comment', :author_id => profile.id, :source_id => page.id, :source_type => 'Article')
  1471 +
  1472 + post :edit_comment, :id => comment.id, :profile => profile.identifier, :page => [ 'myarticle' ], :comment => { :body => 'Comment edited' }
  1473 + assert_equal 'Comment edited', Comment.find(comment.id).body
  1474 + end
  1475 +
  1476 + should 'edit comment from a page' do
  1477 + login_as profile.identifier
  1478 + page = profile.articles.create!(:name => 'myarticle', :body => 'the body of the text')
  1479 + comment = fast_create(Comment, :body => 'Original comment', :author_id => profile.id, :source_id => page.id, :source_type => 'Article')
  1480 +
  1481 + get :edit_comment, :id => comment.id, :profile => profile.identifier, :page => [ 'myarticle' ], :comment => { :body => 'Comment edited' }
  1482 + assert_tag :tag => 'h1', :content => 'Edit comment'
  1483 + end
  1484 +
  1485 + should 'not edit comment from other page' do
  1486 + login_as profile.identifier
  1487 + page = profile.articles.create!(:name => 'myarticle', :body => 'the body of the text')
  1488 + comment = fast_create(Comment, :body => 'Original comment', :author_id => profile.id, :source_id => page.id, :source_type => 'Article')
  1489 +
  1490 + other_page = profile.articles.create!(:name => 'my other article', :body => 'the body of the text')
  1491 + comment_on_other_page = fast_create(Comment, :body => 'Comment on other article', :author_id => profile.id, :source_id => other_page.id, :source_type => 'Article')
  1492 +
  1493 + get :edit_comment, :id => comment_on_other_page.id, :profile => profile.identifier, :page => [ 'myarticle' ], :comment => { :body => 'Comment edited' }
  1494 + assert_redirected_to page.url
  1495 + end
  1496 +
  1497 + should 'not crash on edit comment if comment does not exist' do
  1498 + login_as profile.identifier
  1499 + page = profile.articles.create!(:name => 'myarticle', :body => 'the body of the text')
  1500 +
  1501 + get :edit_comment, :id => 1000, :profile => profile.identifier, :page => [ 'myarticle' ], :comment => { :body => 'Comment edited' }
  1502 + assert_response 404
  1503 + end
  1504 +
1467 end 1505 end