From 96671cf0c0f014e61ac1eb3f11460376e067f0c2 Mon Sep 17 00:00:00 2001 From: Anton Khorev Date: Sat, 1 Feb 2025 13:19:07 +0300 Subject: [PATCH] Make api create node path resourceful --- config/routes.rb | 6 ++- .../api/changesets_controller_test.rb | 6 +-- test/controllers/api/nodes_controller_test.rb | 37 +++++++++++-------- 3 files changed, 28 insertions(+), 21 deletions(-) diff --git a/config/routes.rb b/config/routes.rb index 3079da18f..75e05d2ca 100644 --- a/config/routes.rb +++ b/config/routes.rb @@ -30,7 +30,6 @@ OpenStreetMap::Application.routes.draw do post "changeset/comment/:id/hide" => "changeset_comments#destroy", :as => :changeset_comment_hide, :id => /\d+/ post "changeset/comment/:id/unhide" => "changeset_comments#restore", :as => :changeset_comment_unhide, :id => /\d+/ - put "node/create" => "nodes#create" get "node/:id/ways" => "ways#ways_for_node", :as => :node_ways, :id => /\d+/ get "node/:id/relations" => "relations#relations_for_node", :as => :node_relations, :id => /\d+/ get "node/:id/history" => "old_nodes#history", :as => :api_node_history, :id => /\d+/ @@ -62,8 +61,11 @@ OpenStreetMap::Application.routes.draw do end namespace :api, :path => "api/0.6" do - resources :nodes, :only => :index + resources :nodes, :only => [:index, :create] + put "node/create" => "nodes#create", :as => nil + resources :ways, :only => :index + resources :relations, :only => :index resource :map, :only => :show diff --git a/test/controllers/api/changesets_controller_test.rb b/test/controllers/api/changesets_controller_test.rb index c0be42a21..d9afb94a2 100644 --- a/test/controllers/api/changesets_controller_test.rb +++ b/test/controllers/api/changesets_controller_test.rb @@ -2115,7 +2115,7 @@ module Api # add a single node to it with_controller(NodesController.new) do xml = "" - put node_create_path, :params => xml, :headers => auth_header + post api_nodes_path, :params => xml, :headers => auth_header assert_response :success, "Couldn't create node." end @@ -2130,7 +2130,7 @@ module Api # add another node to it with_controller(NodesController.new) do xml = "" - put node_create_path, :params => xml, :headers => auth_header + post api_nodes_path, :params => xml, :headers => auth_header assert_response :success, "Couldn't create second node." end @@ -2500,7 +2500,7 @@ module Api with_controller(NodesController.new) do # create a new node xml = "" - put node_create_path, :params => xml, :headers => auth_header + post api_nodes_path, :params => xml, :headers => auth_header assert_response :success, "can't create a new node" node_id = @response.body.to_i diff --git a/test/controllers/api/nodes_controller_test.rb b/test/controllers/api/nodes_controller_test.rb index 075b8b61b..04120dace 100644 --- a/test/controllers/api/nodes_controller_test.rb +++ b/test/controllers/api/nodes_controller_test.rb @@ -14,7 +14,7 @@ module Api { :controller => "api/nodes", :action => "index", :format => "json" } ) assert_routing( - { :path => "/api/0.6/node/create", :method => :put }, + { :path => "/api/0.6/nodes", :method => :post }, { :controller => "api/nodes", :action => "create" } ) assert_routing( @@ -33,6 +33,11 @@ module Api { :path => "/api/0.6/node/1", :method => :delete }, { :controller => "api/nodes", :action => "delete", :id => "1" } ) + + assert_recognizes( + { :controller => "api/nodes", :action => "create" }, + { :path => "/api/0.6/node/create", :method => :put } + ) end ## @@ -96,7 +101,7 @@ module Api # create a minimal xml file xml = "" assert_difference("OldNode.count", 0) do - put node_create_path, :params => xml + post api_nodes_path, :params => xml end # hope for unauthorized assert_response :unauthorized, "node upload did not return unauthorized status" @@ -107,7 +112,7 @@ module Api # create a minimal xml file xml = "" assert_difference("Node.count", 0) do - put node_create_path, :params => xml, :headers => auth_header + post api_nodes_path, :params => xml, :headers => auth_header end # hope for success assert_require_public_data "node create did not return forbidden status" @@ -117,7 +122,7 @@ module Api # create a minimal xml file xml = "" - put node_create_path, :params => xml, :headers => auth_header + post api_nodes_path, :params => xml, :headers => auth_header # hope for success assert_response :success, "node upload did not return success status" @@ -145,14 +150,14 @@ module Api # test that the upload is rejected when xml is valid, but osm doc isn't xml = "" - put node_create_path, :params => xml, :headers => auth_header + post api_nodes_path, :params => xml, :headers => auth_header assert_response :bad_request, "node upload did not return bad_request status" assert_equal "Cannot parse valid node from xml string . XML doesn't contain an osm/node element.", @response.body # test that the upload is rejected when no lat is supplied # create a minimal xml file xml = "" - put node_create_path, :params => xml, :headers => auth_header + post api_nodes_path, :params => xml, :headers => auth_header # hope for success assert_response :bad_request, "node upload did not return bad_request status" assert_equal "Cannot parse valid node from xml string . lat missing", @response.body @@ -160,7 +165,7 @@ module Api # test that the upload is rejected when no lon is supplied # create a minimal xml file xml = "" - put node_create_path, :params => xml, :headers => auth_header + post api_nodes_path, :params => xml, :headers => auth_header # hope for success assert_response :bad_request, "node upload did not return bad_request status" assert_equal "Cannot parse valid node from xml string . lon missing", @response.body @@ -168,7 +173,7 @@ module Api # test that the upload is rejected when lat is non-numeric # create a minimal xml file xml = "" - put node_create_path, :params => xml, :headers => auth_header + post api_nodes_path, :params => xml, :headers => auth_header # hope for success assert_response :bad_request, "node upload did not return bad_request status" assert_equal "Cannot parse valid node from xml string . lat not a number", @response.body @@ -176,14 +181,14 @@ module Api # test that the upload is rejected when lon is non-numeric # create a minimal xml file xml = "" - put node_create_path, :params => xml, :headers => auth_header + post api_nodes_path, :params => xml, :headers => auth_header # hope for success assert_response :bad_request, "node upload did not return bad_request status" assert_equal "Cannot parse valid node from xml string . lon not a number", @response.body # test that the upload is rejected when we have a tag which is too long xml = "" - put node_create_path, :params => xml, :headers => auth_header + post api_nodes_path, :params => xml, :headers => auth_header assert_response :bad_request, "node upload did not return bad_request status" assert_match(/ v: is too long \(maximum is 255 characters\) /, @response.body) end @@ -510,7 +515,7 @@ module Api xml = "" \ "" \ "" - put node_create_path, :params => xml, :headers => auth_header + post api_nodes_path, :params => xml, :headers => auth_header assert_require_public_data "Shouldn't be able to create with non-public user" ## Then try with the public data user @@ -521,7 +526,7 @@ module Api xml = "" \ "" \ "" - put node_create_path, :params => xml, :headers => auth_header + post api_nodes_path, :params => xml, :headers => auth_header assert_response :success nodeid = @response.body @@ -556,7 +561,7 @@ module Api # try creating a node xml = "" - put node_create_path, :params => xml, :headers => auth_header + post api_nodes_path, :params => xml, :headers => auth_header assert_response :success, "node create did not return success status" # get the id of the node we created @@ -574,7 +579,7 @@ module Api # try creating a node, which should be rate limited xml = "" - put node_create_path, :params => xml, :headers => auth_header + post api_nodes_path, :params => xml, :headers => auth_header assert_response :too_many_requests, "node create did not hit rate limit" end @@ -603,7 +608,7 @@ module Api # try creating a node xml = "" - put node_create_path, :params => xml, :headers => auth_header + post api_nodes_path, :params => xml, :headers => auth_header assert_response :success, "node create did not return success status" # get the id of the node we created @@ -621,7 +626,7 @@ module Api # try creating a node, which should be rate limited xml = "" - put node_create_path, :params => xml, :headers => auth_header + post api_nodes_path, :params => xml, :headers => auth_header assert_response :too_many_requests, "node create did not hit rate limit" end -- 2.39.5