Skip to content

Commit

Permalink
Merge remote-tracking branch 'upstream/pull/1926'
Browse files Browse the repository at this point in the history
  • Loading branch information
tomhughes committed Aug 28, 2019
2 parents a709249 + e71d7e8 commit 783b5e3
Show file tree
Hide file tree
Showing 3 changed files with 27 additions and 57 deletions.
2 changes: 1 addition & 1 deletion app/controllers/api/notes_controller.rb
Original file line number Diff line number Diff line change
Expand Up @@ -4,7 +4,7 @@ class NotesController < ApiController

before_action :check_api_readable
before_action :setup_user_auth, :only => [:create, :comment, :show]
before_action :authorize, :only => [:close, :reopen, :destroy]
before_action :authorize, :only => [:close, :reopen, :destroy, :comment]

This comment has been minimized.

Copy link
@blackboxlogic

blackboxlogic Aug 29, 2019

Was there a reason/discussion for requiring authentication when commenting on a note?
If yes, could you update the documentation?

This comment has been minimized.

Copy link
@woodpeck

woodpeck Aug 29, 2019

Contributor

authorize_resource

Expand Down
22 changes: 11 additions & 11 deletions app/views/browse/note.html.erb
Original file line number Diff line number Diff line change
Expand Up @@ -41,18 +41,18 @@
<% end %>
<% if @note.status == "open" %>
<form action="#">
<textarea class="comment" name="text" cols="40" rows="5" maxlength="2000"></textarea>
<div class="buttons clearfix">
<% if current_user and current_user.moderator? -%>
<input type="submit" name="hide" value="<%= t("javascripts.notes.show.hide") %>" class="deemphasize" data-note-id="<%= @note.id %>" data-method="DELETE" data-url="<%= note_url(@note, "json") %>">
<% end -%>
<% if current_user -%>
<% if current_user -%>
<form action="#">
<textarea class="comment" name="text" cols="40" rows="5" maxlength="2000"></textarea>
<div class="buttons clearfix">
<% if current_user.moderator? -%>
<input type="submit" name="hide" value="<%= t("javascripts.notes.show.hide") %>" class="deemphasize" data-note-id="<%= @note.id %>" data-method="DELETE" data-url="<%= note_url(@note, "json") %>">
<% end -%>
<input type="submit" name="close" value="<%= t("javascripts.notes.show.resolve") %>" data-note-id="<%= @note.id %>" data-method="POST" data-url="<%= close_note_url(@note, "json") %>">
<% end -%>
<input type="submit" name="comment" value="<%= t("javascripts.notes.show.comment") %>" data-note-id="<%= @note.id %>" data-method="POST" data-url="<%= comment_note_url(@note, "json") %>" disabled="1">
</div>
</form>
<input type="submit" name="comment" value="<%= t("javascripts.notes.show.comment") %>" data-note-id="<%= @note.id %>" data-method="POST" data-url="<%= comment_note_url(@note, "json") %>" disabled="1">
</div>
</form>
<% end -%>
<% else %>
<form action="#">
<input type="hidden" name="text" value="">
Expand Down
60 changes: 15 additions & 45 deletions test/controllers/api/notes_controller_test.rb
Original file line number Diff line number Diff line change
Expand Up @@ -222,6 +222,8 @@ def test_create_fail

def test_comment_success
open_note_with_comment = create(:note_with_comments)
user = create(:user)
basic_authorization user.email, "test"
assert_difference "NoteComment.count", 1 do
assert_no_difference "ActionMailer::Base.deliveries.size" do
perform_enqueued_jobs do
Expand All @@ -238,7 +240,7 @@ def test_comment_success
assert_equal 2, js["properties"]["comments"].count
assert_equal "commented", js["properties"]["comments"].last["action"]
assert_equal "This is an additional comment", js["properties"]["comments"].last["text"]
assert_nil js["properties"]["comments"].last["user"]
assert_equal user.display_name, js["properties"]["comments"].last["user"]

get :show, :params => { :id => open_note_with_comment.id, :format => "json" }
assert_response :success
Expand All @@ -250,7 +252,7 @@ def test_comment_success
assert_equal 2, js["properties"]["comments"].count
assert_equal "commented", js["properties"]["comments"].last["action"]
assert_equal "This is an additional comment", js["properties"]["comments"].last["text"]
assert_nil js["properties"]["comments"].last["user"]
assert_equal user.display_name, js["properties"]["comments"].last["user"]

# Ensure that emails are sent to users
first_user = create(:user)
Expand All @@ -261,47 +263,6 @@ def test_comment_success
create(:note_comment, :note => note, :author => first_user)
create(:note_comment, :note => note, :author => second_user)
end
assert_difference "NoteComment.count", 1 do
assert_difference "ActionMailer::Base.deliveries.size", 2 do
perform_enqueued_jobs do
post :comment, :params => { :id => note_with_comments_by_users.id, :text => "This is an additional comment", :format => "json" }
end
end
end
assert_response :success
js = ActiveSupport::JSON.decode(@response.body)
assert_not_nil js
assert_equal "Feature", js["type"]
assert_equal note_with_comments_by_users.id, js["properties"]["id"]
assert_equal "open", js["properties"]["status"]
assert_equal 3, js["properties"]["comments"].count
assert_equal "commented", js["properties"]["comments"].last["action"]
assert_equal "This is an additional comment", js["properties"]["comments"].last["text"]
assert_nil js["properties"]["comments"].last["user"]

email = ActionMailer::Base.deliveries.find { |e| e.to.first == first_user.email }
assert_not_nil email
assert_equal 1, email.to.length
assert_equal "[OpenStreetMap] An anonymous user has commented on one of your notes", email.subject

email = ActionMailer::Base.deliveries.find { |e| e.to.first == second_user.email }
assert_not_nil email
assert_equal 1, email.to.length
assert_equal "[OpenStreetMap] An anonymous user has commented on a note you are interested in", email.subject

get :show, :params => { :id => note_with_comments_by_users.id, :format => "json" }
assert_response :success
js = ActiveSupport::JSON.decode(@response.body)
assert_not_nil js
assert_equal "Feature", js["type"]
assert_equal note_with_comments_by_users.id, js["properties"]["id"]
assert_equal "open", js["properties"]["status"]
assert_equal 3, js["properties"]["comments"].count
assert_equal "commented", js["properties"]["comments"].last["action"]
assert_equal "This is an additional comment", js["properties"]["comments"].last["text"]
assert_nil js["properties"]["comments"].last["user"]

ActionMailer::Base.deliveries.clear

basic_authorization third_user.email, "test"

Expand All @@ -318,7 +279,7 @@ def test_comment_success
assert_equal "Feature", js["type"]
assert_equal note_with_comments_by_users.id, js["properties"]["id"]
assert_equal "open", js["properties"]["status"]
assert_equal 4, js["properties"]["comments"].count
assert_equal 3, js["properties"]["comments"].count
assert_equal "commented", js["properties"]["comments"].last["action"]
assert_equal "This is an additional comment", js["properties"]["comments"].last["text"]
assert_equal third_user.display_name, js["properties"]["comments"].last["user"]
Expand All @@ -341,7 +302,7 @@ def test_comment_success
assert_equal "Feature", js["type"]
assert_equal note_with_comments_by_users.id, js["properties"]["id"]
assert_equal "open", js["properties"]["status"]
assert_equal 4, js["properties"]["comments"].count
assert_equal 3, js["properties"]["comments"].count
assert_equal "commented", js["properties"]["comments"].last["action"]
assert_equal "This is an additional comment", js["properties"]["comments"].last["text"]
assert_equal third_user.display_name, js["properties"]["comments"].last["user"]
Expand All @@ -352,6 +313,15 @@ def test_comment_success
def test_comment_fail
open_note_with_comment = create(:note_with_comments)

user = create(:user)

assert_no_difference "NoteComment.count" do
post :comment, :params => { :text => "This is an additional comment" }
assert_response :unauthorized
end

basic_authorization user.email, "test"

assert_no_difference "NoteComment.count" do
post :comment, :params => { :text => "This is an additional comment" }
end
Expand Down

0 comments on commit 783b5e3

Please sign in to comment.