From: Tom Hughes Date: Fri, 24 Jan 2025 15:10:03 +0000 (+0000) Subject: Merge remote-tracking branch 'upstream/pull/5545' X-Git-Tag: live~176 X-Git-Url: https://git.openstreetmap.org./rails.git/commitdiff_plain/49e257200e26a11719cfa154a6c87efba1550a1b?hp=605d7a5f694ca2e3310f65267c50f20d2a7ee5cd Merge remote-tracking branch 'upstream/pull/5545' --- diff --git a/app/controllers/api/map_controller.rb b/app/controllers/api/maps_controller.rb similarity index 98% rename from app/controllers/api/map_controller.rb rename to app/controllers/api/maps_controller.rb index da8138597..2aa25fdd7 100644 --- a/app/controllers/api/map_controller.rb +++ b/app/controllers/api/maps_controller.rb @@ -1,5 +1,5 @@ module Api - class MapController < ApiController + class MapsController < ApiController authorize_resource :class => false before_action :set_request_formats @@ -13,7 +13,7 @@ module Api # Then all the relations that reference the already found nodes and ways are # fetched. All the nodes and ways that are referenced by those ways are then # fetched. Finally all the xml is returned. - def index + def show # Figure out the bbox # check boundary is sane and area within defined # see /config/application.yml diff --git a/app/controllers/export_controller.rb b/app/controllers/export_controller.rb index 5a2b159ef..fdae75b9a 100644 --- a/app/controllers/export_controller.rb +++ b/app/controllers/export_controller.rb @@ -19,7 +19,7 @@ class ExportController < ApplicationController case style when "osm" # redirect to API map get - redirect_to :controller => "api/map", :action => "index", :bbox => bbox + redirect_to api_map_path(:bbox => bbox) when "mapnik" # redirect to a special 'export' cgi script diff --git a/app/views/api/map/_bounds.json.jbuilder b/app/views/api/maps/_bounds.json.jbuilder similarity index 100% rename from app/views/api/map/_bounds.json.jbuilder rename to app/views/api/maps/_bounds.json.jbuilder diff --git a/app/views/api/map/_bounds.xml.builder b/app/views/api/maps/_bounds.xml.builder similarity index 100% rename from app/views/api/map/_bounds.xml.builder rename to app/views/api/maps/_bounds.xml.builder diff --git a/app/views/api/map/index.json.jbuilder b/app/views/api/maps/show.json.jbuilder similarity index 100% rename from app/views/api/map/index.json.jbuilder rename to app/views/api/maps/show.json.jbuilder diff --git a/app/views/api/map/index.xml.builder b/app/views/api/maps/show.xml.builder similarity index 100% rename from app/views/api/map/index.xml.builder rename to app/views/api/maps/show.xml.builder diff --git a/config/routes.rb b/config/routes.rb index d8e83b97b..84e5e8619 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -62,11 +62,11 @@ OpenStreetMap::Application.routes.draw do put "relation/:id" => "relations#update", :id => /\d+/ delete "relation/:id" => "relations#delete", :id => /\d+/ get "relations" => "relations#index" - - get "map" => "map#index" end namespace :api, :path => "api/0.6" do + resource :map, :only => :show + resources :tracepoints, :path => "trackpoints", :only => :index resources :users, :only => :index diff --git a/test/controllers/api/map_controller_test.rb b/test/controllers/api/maps_controller_test.rb similarity index 91% rename from test/controllers/api/map_controller_test.rb rename to test/controllers/api/maps_controller_test.rb index c050100ae..f61a1fac2 100644 --- a/test/controllers/api/map_controller_test.rb +++ b/test/controllers/api/maps_controller_test.rb @@ -1,7 +1,7 @@ require "test_helper" module Api - class MapControllerTest < ActionDispatch::IntegrationTest + class MapsControllerTest < ActionDispatch::IntegrationTest def setup super @badbigbbox = %w[-0.1,-0.1,1.1,1.1 10,10,11,11] @@ -21,11 +21,11 @@ module Api def test_routes assert_routing( { :path => "/api/0.6/map", :method => :get }, - { :controller => "api/map", :action => "index" } + { :controller => "api/maps", :action => "show" } ) assert_routing( { :path => "/api/0.6/map.json", :method => :get }, - { :controller => "api/map", :action => "index", :format => "json" } + { :controller => "api/maps", :action => "show", :format => "json" } ) end @@ -42,67 +42,67 @@ module Api # Accept: XML format -> use XML accept_header = accept_format_header("text/xml") - get map_path(:bbox => bbox), :headers => accept_header + get api_map_path(:bbox => bbox), :headers => accept_header assert_response :success, "Expected success with the map call" assert_equal "application/xml; charset=utf-8", @response.header["Content-Type"] # Accept: Any format -> use XML accept_header = accept_format_header("*/*") - get map_path(:bbox => bbox), :headers => accept_header + get api_map_path(:bbox => bbox), :headers => accept_header assert_response :success, "Expected success with the map call" assert_equal "application/xml; charset=utf-8", @response.header["Content-Type"] # Accept: Any format, .json URL suffix -> use json accept_header = accept_format_header("*/*") - get map_path(:bbox => bbox, :format => "json"), :headers => accept_header + get api_map_path(:bbox => bbox, :format => "json"), :headers => accept_header assert_response :success, "Expected success with the map call" assert_equal "application/json; charset=utf-8", @response.header["Content-Type"] # Accept: Firefox header -> use XML accept_header = accept_format_header("text/html,application/xhtml+xml,application/xml;q=0.9,image/webp,*/*;q=0.8") - get map_path(:bbox => bbox), :headers => accept_header + get api_map_path(:bbox => bbox), :headers => accept_header assert_response :success, "Expected success with the map call" assert_equal "application/xml; charset=utf-8", @response.header["Content-Type"] # Accept: JOSM header text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2 -> use XML # Note: JOSM's header does not comply with RFC 7231, section 5.3.1 accept_header = accept_format_header("text/html, image/gif, image/jpeg, *; q=.2, */*; q=.2") - get map_path(:bbox => bbox), :headers => accept_header + get api_map_path(:bbox => bbox), :headers => accept_header assert_response :success, "Expected success with the map call" assert_equal "application/xml; charset=utf-8", @response.header["Content-Type"] # Accept: text/plain, */* -> use XML accept_header = accept_format_header("text/plain, */*") - get map_path(:bbox => bbox), :headers => accept_header + get api_map_path(:bbox => bbox), :headers => accept_header assert_response :success, "Expected success with the map call" assert_equal "application/xml; charset=utf-8", @response.header["Content-Type"] # Accept: text/* -> use XML accept_header = accept_format_header("text/*") - get map_path(:bbox => bbox), :headers => accept_header + get api_map_path(:bbox => bbox), :headers => accept_header assert_response :success, "Expected success with the map call" assert_equal "application/xml; charset=utf-8", @response.header["Content-Type"] # Accept: json, */* format -> use json accept_header = accept_format_header("application/json, */*") - get map_path(:bbox => bbox), :headers => accept_header + get api_map_path(:bbox => bbox), :headers => accept_header assert_response :success, "Expected success with the map call" assert_equal "application/json; charset=utf-8", @response.header["Content-Type"] # Accept: json format -> use json accept_header = accept_format_header("application/json") - get map_path(:bbox => bbox), :headers => accept_header + get api_map_path(:bbox => bbox), :headers => accept_header assert_response :success, "Expected success with the map call" assert_equal "application/json; charset=utf-8", @response.header["Content-Type"] # text/json is in invalid format, return HTTP 406 Not acceptable accept_header = accept_format_header("text/json") - get map_path(:bbox => bbox), :headers => accept_header + get api_map_path(:bbox => bbox), :headers => accept_header assert_response :not_acceptable, "text/json should fail" # image/jpeg is a format which we don't support, return HTTP 406 Not acceptable accept_header = accept_format_header("image/jpeg") - get map_path(:bbox => bbox), :headers => accept_header + get api_map_path(:bbox => bbox), :headers => accept_header assert_response :not_acceptable, "text/json should fail" end @@ -124,7 +124,7 @@ module Api maxlon = node.lon + 0.1 maxlat = node.lat + 0.1 bbox = "#{minlon},#{minlat},#{maxlon},#{maxlat}" - get map_path(:bbox => bbox) + get api_map_path(:bbox => bbox) if $VERBOSE print @request.to_yaml print @response.body @@ -167,7 +167,7 @@ module Api maxlon = node.lon + 0.1 maxlat = node.lat + 0.1 bbox = "#{minlon},#{minlat},#{maxlon},#{maxlat}" - get map_path(:bbox => bbox, :format => "json") + get api_map_path(:bbox => bbox, :format => "json") if $VERBOSE print @request.to_yaml print @response.body @@ -211,7 +211,7 @@ module Api relation = create(:relation_member, :member => node).relation bbox = "#{node.lon},#{node.lat},#{node.lon},#{node.lat}" - get map_path(:bbox => bbox) + get api_map_path(:bbox => bbox) assert_response :success, "The map call should have succeeded" assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", :count => 1 do assert_select "bounds[minlon='#{node.lon}']" \ @@ -248,7 +248,7 @@ module Api relation = create(:relation_member, :member => way1).relation bbox = "#{node.lon},#{node.lat},#{node.lon},#{node.lat}" - get map_path(:bbox => bbox) + get api_map_path(:bbox => bbox) assert_response :success, "The map call should have succeeded" assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", :count => 1 do assert_select "bounds[minlon='#{node.lon}'][minlat='#{node.lat}'][maxlon='#{node.lon}'][maxlat='#{node.lat}']", :count => 1 @@ -265,7 +265,7 @@ module Api end def test_map_empty - get map_path(:bbox => "179.998,89.998,179.999.1,89.999") + get api_map_path(:bbox => "179.998,89.998,179.999.1,89.999") assert_response :success, "The map call should have succeeded" assert_select "osm[version='#{Settings.api_version}'][generator='#{Settings.generator}']", :count => 1 do assert_select "bounds[minlon='179.9980000'][minlat='89.9980000'][maxlon='179.9990000'][maxlat='89.9990000']", :count => 1 @@ -276,14 +276,14 @@ module Api end def test_map_without_bbox - get map_path + get api_map_path assert_response :bad_request assert_equal "The parameter bbox is required", @response.body, "A bbox param was expected" end def test_bbox_too_big @badbigbbox.each do |bbox| - get map_path(:bbox => bbox) + get api_map_path(:bbox => bbox) assert_response :bad_request, "The bbox:#{bbox} was expected to be too big" assert_equal "The maximum bbox size is #{Settings.max_request_area}, and your request was too large. Either request a smaller area, or use planet.osm", @response.body, "bbox: #{bbox}" end @@ -291,7 +291,7 @@ module Api def test_bbox_malformed @badmalformedbbox.each do |bbox| - get map_path(:bbox => bbox) + get api_map_path(:bbox => bbox) assert_response :bad_request, "The bbox:#{bbox} was expected to be malformed" assert_equal "The parameter bbox must be of the form min_lon,min_lat,max_lon,max_lat", @response.body, "bbox: #{bbox}" end @@ -299,7 +299,7 @@ module Api def test_bbox_lon_mixedup @badlonmixedbbox.each do |bbox| - get map_path(:bbox => bbox) + get api_map_path(:bbox => bbox) assert_response :bad_request, "The bbox:#{bbox} was expected to have the longitude mixed up" assert_equal "The minimum longitude must be less than the maximum longitude, but it wasn't", @response.body, "bbox: #{bbox}" end @@ -307,7 +307,7 @@ module Api def test_bbox_lat_mixedup @badlatmixedbbox.each do |bbox| - get map_path(:bbox => bbox) + get api_map_path(:bbox => bbox) assert_response :bad_request, "The bbox:#{bbox} was expected to have the latitude mixed up" assert_equal "The minimum latitude must be less than the maximum latitude, but it wasn't", @response.body, "bbox: #{bbox}" end diff --git a/test/controllers/export_controller_test.rb b/test/controllers/export_controller_test.rb index 64d5a6866..7f7b4ee8c 100644 --- a/test/controllers/export_controller_test.rb +++ b/test/controllers/export_controller_test.rb @@ -18,7 +18,7 @@ class ExportControllerTest < ActionDispatch::IntegrationTest # test the finish action for raw OSM data def test_finish_osm post export_finish_path(:minlon => 0, :minlat => 50, :maxlon => 1, :maxlat => 51, :format => "osm") - assert_redirected_to "controller" => "api/map", "action" => "index", "bbox" => "0.0,50.0,1.0,51.0" + assert_redirected_to api_map_path(:bbox => "0.0,50.0,1.0,51.0") end ###