Merge remote-tracking branch 'upstream/pull/4240'

This commit is contained in:
Tom Hughes 2023-09-14 17:42:04 +01:00
commit 85b17a1f2a
8 changed files with 92 additions and 0 deletions

View file

@ -21,6 +21,7 @@ class ApiAbility
can [:history, :version], OldNode
can [:history, :version], OldWay
can [:history, :version], OldRelation
can [:show], UserBlock
end
if user&.active?

View file

@ -0,0 +1,18 @@
module Api
class UserBlocksController < ApiController
before_action :check_api_readable
authorize_resource
around_action :api_call_handle_error, :api_call_timeout
before_action :set_request_formats
def show
raise OSM::APIBadUserInput, "No id was given" unless params[:id]
@user_block = UserBlock.find(params[:id])
rescue ActiveRecord::RecordNotFound
raise OSM::APINotFoundError
end
end
end

View file

@ -0,0 +1,13 @@
json.user_block do
json.id user_block.id
json.created_at user_block.created_at.xmlschema
json.updated_at user_block.updated_at.xmlschema
json.ends_at user_block.ends_at.xmlschema
json.needs_view user_block.needs_view
json.user :uid => user_block.user_id, :user => user_block.user.display_name
json.creator :uid => user_block.creator_id, :user => user_block.creator.display_name
json.revoker :uid => user_block.revoker_id, :user => user_block.revoker.display_name if user_block.revoker
json.reason user_block.reason
end

View file

@ -0,0 +1,14 @@
attrs = {
"id" => user_block.id,
"created_at" => user_block.created_at.xmlschema,
"updated_at" => user_block.updated_at.xmlschema,
"ends_at" => user_block.ends_at.xmlschema,
"needs_view" => user_block.needs_view
}
xml.user_block(attrs) do
xml.user :uid => user_block.user_id, :user => user_block.user.display_name
xml.creator :uid => user_block.creator_id, :user => user_block.creator.display_name
xml.revoker :uid => user_block.revoker_id, :user => user_block.revoker.display_name if user_block.revoker
xml.reason user_block.reason
end

View file

@ -0,0 +1,3 @@
json.partial! "api/root_attributes"
json.partial! @user_block

View file

@ -0,0 +1,5 @@
xml.instruct!
xml.osm(OSM::API.new.xml_root_attributes) do |osm|
osm << (render(@user_block) || "")
end

View file

@ -102,6 +102,8 @@ OpenStreetMap::Application.routes.draw do
post "notes/editPOIexec" => "api/notes#comment"
get "notes/getGPX" => "api/notes#index", :format => "gpx"
get "notes/getRSSfeed" => "api/notes#feed", :format => "rss"
resources :user_blocks, :only => [:show], :constraints => { :id => /\d+/ }, :controller => "api/user_blocks", :as => :api_user_blocks
end
# Data browsing

View file

@ -0,0 +1,36 @@
require "test_helper"
module Api
class UserBlocksControllerTest < ActionDispatch::IntegrationTest
def test_routes
assert_routing(
{ :path => "/api/0.6/user_blocks/1", :method => :get },
{ :controller => "api/user_blocks", :action => "show", :id => "1" }
)
assert_routing(
{ :path => "/api/0.6/user_blocks/1.json", :method => :get },
{ :controller => "api/user_blocks", :action => "show", :id => "1", :format => "json" }
)
end
def test_show
block = create(:user_block)
get api_user_block_path(:id => block)
assert_response :success
assert_select "user_block[id='#{block.id}']", 1
get api_user_block_path(:id => block, :format => "json")
assert_response :success
js = ActiveSupport::JSON.decode(@response.body)
assert_not_nil js
assert_equal block.id, js["user_block"]["id"]
end
def test_show_not_found
get api_user_block_path(:id => 123)
assert_response :not_found
assert_equal "text/plain", @response.media_type
end
end
end