-
Notifications
You must be signed in to change notification settings - Fork 909
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
Merge pull request #4587 from AntonKhorev/changeset-comment-routes
Move changeset comments feed to resourceful routes
- Loading branch information
Showing
11 changed files
with
144 additions
and
134 deletions.
There are no files selected for viewing
This file was deleted.
Oops, something went wrong.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,52 @@ | ||
module Feeds | ||
class ChangesetCommentsController < ApplicationController | ||
before_action :authorize_web | ||
before_action :set_locale | ||
|
||
authorize_resource | ||
|
||
before_action -> { check_database_readable(:need_api => true) } | ||
around_action :web_timeout | ||
|
||
## | ||
# Get a feed of recent changeset comments | ||
def index | ||
if params[:changeset_id] | ||
# Extract the arguments | ||
changeset_id = params[:changeset_id].to_i | ||
|
||
# Find the changeset | ||
changeset = Changeset.find(changeset_id) | ||
|
||
# Return comments for this changeset only | ||
@comments = changeset.comments.includes(:author, :changeset).reverse_order.limit(comments_limit) | ||
else | ||
# Return comments | ||
@comments = ChangesetComment.includes(:author, :changeset).where(:visible => true).order("created_at DESC").limit(comments_limit).preload(:changeset) | ||
end | ||
|
||
# Render the result | ||
respond_to do |format| | ||
format.rss | ||
end | ||
rescue OSM::APIBadUserInput | ||
head :bad_request | ||
end | ||
|
||
private | ||
|
||
## | ||
# Get the maximum number of comments to return | ||
def comments_limit | ||
if params[:limit] | ||
if params[:limit].to_i.positive? && params[:limit].to_i <= 10000 | ||
params[:limit].to_i | ||
else | ||
raise OSM::APIBadUserInput, "Comments limit must be between 1 and 10000" | ||
end | ||
else | ||
100 | ||
end | ||
end | ||
end | ||
end |
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
File renamed without changes.
File renamed without changes.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
This file was deleted.
Oops, something went wrong.
72 changes: 72 additions & 0 deletions
72
test/controllers/feeds/changeset_comments_controller_test.rb
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,72 @@ | ||
require "test_helper" | ||
|
||
module Feeds | ||
class ChangesetCommentsControllerTest < ActionDispatch::IntegrationTest | ||
## | ||
# test all routes which lead to this controller | ||
def test_routes | ||
assert_routing( | ||
{ :path => "/changeset/1/comments/feed", :method => :get }, | ||
{ :controller => "feeds/changeset_comments", :action => "index", :changeset_id => "1", :format => "rss" } | ||
) | ||
assert_routing( | ||
{ :path => "/history/comments/feed", :method => :get }, | ||
{ :controller => "feeds/changeset_comments", :action => "index", :format => "rss" } | ||
) | ||
end | ||
|
||
## | ||
# test comments feed | ||
def test_feed | ||
changeset = create(:changeset, :closed) | ||
create_list(:changeset_comment, 3, :changeset => changeset) | ||
|
||
get feeds_changeset_comments_path(:format => "rss") | ||
assert_response :success | ||
assert_equal "application/rss+xml", @response.media_type | ||
assert_select "rss", :count => 1 do | ||
assert_select "channel", :count => 1 do | ||
assert_select "item", :count => 3 | ||
end | ||
end | ||
|
||
get feeds_changeset_comments_path(:format => "rss", :limit => 2) | ||
assert_response :success | ||
assert_equal "application/rss+xml", @response.media_type | ||
assert_select "rss", :count => 1 do | ||
assert_select "channel", :count => 1 do | ||
assert_select "item", :count => 2 | ||
end | ||
end | ||
|
||
get changeset_feeds_changeset_comments_path(changeset, :format => "rss") | ||
assert_response :success | ||
assert_equal "application/rss+xml", @response.media_type | ||
last_comment_id = -1 | ||
assert_select "rss", :count => 1 do | ||
assert_select "channel", :count => 1 do | ||
assert_select "item", :count => 3 do |items| | ||
items.each do |item| | ||
assert_select item, "link", :count => 1 do |link| | ||
match = assert_match(/^#{changeset_url changeset}#c(\d+)$/, link.text) | ||
comment_id = match[1].to_i | ||
assert_operator comment_id, "<", last_comment_id if last_comment_id != -1 | ||
last_comment_id = comment_id | ||
end | ||
end | ||
end | ||
end | ||
end | ||
end | ||
|
||
## | ||
# test comments feed | ||
def test_feed_bad_limit | ||
get feeds_changeset_comments_path(:format => "rss", :limit => 0) | ||
assert_response :bad_request | ||
|
||
get feeds_changeset_comments_path(:format => "rss", :limit => 100001) | ||
assert_response :bad_request | ||
end | ||
end | ||
end |