]> git.openstreetmap.org Git - rails.git/commitdiff
Make api create changeset path resourceful
authorAnton Khorev <tony29@yandex.ru>
Tue, 11 Feb 2025 23:59:46 +0000 (02:59 +0300)
committerAnton Khorev <tony29@yandex.ru>
Wed, 19 Feb 2025 23:10:29 +0000 (02:10 +0300)
config/routes.rb
test/controllers/api/changesets_controller_test.rb
test/controllers/api/relations_controller_test.rb

index 67991b251a7238277944216cf47accdcae92d546..fcdf8b93246f99ada2a4a38c92e72109acc16b72 100644 (file)
@@ -17,7 +17,6 @@ OpenStreetMap::Application.routes.draw do
     get "capabilities" => "capabilities#show"
     get "permissions" => "permissions#show"
 
-    put "changeset/create" => "changesets#create"
     post "changeset/:id/upload" => "changesets#upload", :as => :changeset_upload, :id => /\d+/
     get "changeset/:id/download" => "changesets#download", :as => :changeset_download, :id => /\d+/
     get "changeset/:id" => "changesets#show", :as => :changeset_show, :id => /\d+/
@@ -32,6 +31,9 @@ OpenStreetMap::Application.routes.draw do
   end
 
   namespace :api, :path => "api/0.6" do
+    resources :changesets, :only => :create
+    put "changeset/create" => "changesets#create", :as => nil
+
     resources :changeset_comments, :only => :index
 
     resources :nodes, :only => [:index, :create]
index ff77ef6cec43a4f3c6debe7c477c492efad3a9ff..76c05fc0aa7095d4f4f836b4c723e94a9364db33 100644 (file)
@@ -6,7 +6,7 @@ module Api
     # test all routes which lead to this controller
     def test_routes
       assert_routing(
-        { :path => "/api/0.6/changeset/create", :method => :put },
+        { :path => "/api/0.6/changesets", :method => :post },
         { :controller => "api/changesets", :action => "create" }
       )
       assert_routing(
@@ -57,6 +57,11 @@ module Api
         { :path => "/api/0.6/changesets.json", :method => :get },
         { :controller => "api/changesets", :action => "index", :format => "json" }
       )
+
+      assert_recognizes(
+        { :controller => "api/changesets", :action => "create" },
+        { :path => "/api/0.6/changeset/create", :method => :put }
+      )
     end
 
     # -----------------------
@@ -69,7 +74,7 @@ module Api
       xml = "<osm><changeset>" \
             "<tag k='created_by' v='osm test suite checking changesets'/>" \
             "</changeset></osm>"
-      put changeset_create_path, :params => xml, :headers => auth_header
+      post api_changesets_path, :params => xml, :headers => auth_header
       assert_require_public_data
 
       auth_header = bearer_authorization_header
@@ -77,7 +82,7 @@ module Api
       xml = "<osm><changeset>" \
             "<tag k='created_by' v='osm test suite checking changesets'/>" \
             "</changeset></osm>"
-      put changeset_create_path, :params => xml, :headers => auth_header
+      post api_changesets_path, :params => xml, :headers => auth_header
 
       assert_response :success, "Creation of changeset did not return success status"
       newid = @response.body.to_i
@@ -101,47 +106,55 @@ module Api
     def test_create_invalid
       auth_header = bearer_authorization_header create(:user, :data_public => false)
       xml = "<osm><changeset></osm>"
-      put changeset_create_path, :params => xml, :headers => auth_header
+      post api_changesets_path, :params => xml, :headers => auth_header
       assert_require_public_data
 
       ## Try the public user
       auth_header = bearer_authorization_header
       xml = "<osm><changeset></osm>"
-      put changeset_create_path, :params => xml, :headers => auth_header
+      post api_changesets_path, :params => xml, :headers => auth_header
       assert_response :bad_request, "creating a invalid changeset should fail"
     end
 
     def test_create_invalid_no_content
       ## First check with no auth
-      put changeset_create_path
+      post api_changesets_path
       assert_response :unauthorized, "shouldn't be able to create a changeset with no auth"
 
       ## Now try to with a non-public user
       auth_header = bearer_authorization_header create(:user, :data_public => false)
-      put changeset_create_path, :headers => auth_header
+      post api_changesets_path, :headers => auth_header
       assert_require_public_data
 
       ## Try an inactive user
       auth_header = bearer_authorization_header create(:user, :pending)
-      put changeset_create_path, :headers => auth_header
+      post api_changesets_path, :headers => auth_header
       assert_inactive_user
 
       ## Now try to use a normal user
       auth_header = bearer_authorization_header
-      put changeset_create_path, :headers => auth_header
+      post api_changesets_path, :headers => auth_header
       assert_response :bad_request, "creating a changeset with no content should fail"
     end
 
     def test_create_wrong_method
       auth_header = bearer_authorization_header
 
-      get changeset_create_path, :headers => auth_header
+      put api_changesets_path, :headers => auth_header
       assert_response :not_found
       assert_template "rescues/routing_error"
+    end
 
-      post changeset_create_path, :headers => auth_header
-      assert_response :not_found
-      assert_template "rescues/routing_error"
+    def test_create_legacy_path
+      auth_header = bearer_authorization_header
+      xml = "<osm><changeset></changeset></osm>"
+
+      assert_difference "Changeset.count", 1 do
+        put "/api/0.6/changeset/create", :params => xml, :headers => auth_header
+      end
+
+      assert_response :success, "Creation of changeset did not return success status"
+      assert_equal Changeset.last.id, @response.body.to_i
     end
 
     ##
@@ -759,7 +772,7 @@ module Api
               "<tag k='created_by' v='osm test suite checking changesets'/>" \
               "</changeset></osm>"
         assert_difference "Changeset.count", 1 do
-          put changeset_create_path, :params => xml, :headers => auth_header
+          post api_changesets_path, :params => xml, :headers => auth_header
         end
         assert_response :success
       end
@@ -773,7 +786,7 @@ module Api
       create(:changeset, :user => user, :created_at => Time.now.utc - 28.days)
 
       # create a changeset
-      put changeset_create_path, :params => "<osm><changeset/></osm>", :headers => auth_header
+      post api_changesets_path, :params => "<osm><changeset/></osm>", :headers => auth_header
       assert_response :success, "Should be able to create a changeset: #{@response.body}"
       changeset_id = @response.body.to_i
 
@@ -1455,7 +1468,7 @@ module Api
       xml = "<osm><changeset>" \
             "<tag k='created_by' v='osm test suite checking changesets'/>" \
             "</changeset></osm>"
-      put changeset_create_path, :params => xml, :headers => auth_header
+      post api_changesets_path, :params => xml, :headers => auth_header
       assert_response :success
       changeset_id = @response.body.to_i
 
@@ -1492,7 +1505,7 @@ module Api
       xml = "<osm><changeset>" \
             "<tag k='created_by' v='osm test suite checking changesets'/>" \
             "</changeset></osm>"
-      put changeset_create_path, :params => xml, :headers => auth_header
+      post api_changesets_path, :params => xml, :headers => auth_header
       assert_response :success
       changeset_id = @response.body.to_i
 
@@ -1895,7 +1908,7 @@ module Api
       xml = "<osm><changeset>" \
             "<tag k='created_by' v='osm test suite checking changesets'/>" \
             "</changeset></osm>"
-      put changeset_create_path, :params => xml, :headers => auth_header
+      post api_changesets_path, :params => xml, :headers => auth_header
       assert_response :forbidden
 
       ## Now try with a normal user
@@ -1905,7 +1918,7 @@ module Api
       xml = "<osm><changeset>" \
             "<tag k='created_by' v='osm test suite checking changesets'/>" \
             "</changeset></osm>"
-      put changeset_create_path, :params => xml, :headers => auth_header
+      post api_changesets_path, :params => xml, :headers => auth_header
       assert_response :success
       changeset_id = @response.body.to_i
 
@@ -1950,7 +1963,7 @@ module Api
       xml = "<osm><changeset>" \
             "<tag k='created_by' v='osm test suite checking changesets'/>" \
             "</changeset></osm>"
-      put changeset_create_path, :params => xml, :headers => auth_header
+      post api_changesets_path, :params => xml, :headers => auth_header
       assert_response :success
       changeset_id = @response.body.to_i
 
@@ -2011,7 +2024,7 @@ module Api
       xml = "<osm><changeset>" \
             "<tag k='created_by' v='osm test suite checking changesets'/>" \
             "</changeset></osm>"
-      put changeset_create_path, :params => xml, :headers => auth_header
+      post api_changesets_path, :params => xml, :headers => auth_header
       assert_response :success
       changeset_id = @response.body.to_i
 
@@ -2124,7 +2137,7 @@ module Api
 
       # create a new changeset
       xml = "<osm><changeset/></osm>"
-      put changeset_create_path, :params => xml, :headers => auth_header
+      post api_changesets_path, :params => xml, :headers => auth_header
       assert_response :success, "Creating of changeset failed."
       changeset_id = @response.body.to_i
 
@@ -2501,7 +2514,7 @@ module Api
 
       # open a new changeset
       xml = "<osm><changeset/></osm>"
-      put changeset_create_path, :params => xml, :headers => auth_header
+      post api_changesets_path, :params => xml, :headers => auth_header
       assert_response :success, "can't create a new changeset"
       cs_id = @response.body.to_i
 
index 9e2972495756de8b987d642b5f90ab4d4ee7667a..f585c5c2cf6dda76c32d2a73e34890f941715d2e 100644 (file)
@@ -1043,7 +1043,7 @@ module Api
       # that the bounding box will be newly-generated.
       with_controller(Api::ChangesetsController.new) do
         xml = "<osm><changeset/></osm>"
-        put changeset_create_path, :params => xml, :headers => auth_header
+        post api_changesets_path, :params => xml, :headers => auth_header
         assert_response :forbidden, "shouldn't be able to create changeset for modify test, as should get forbidden"
       end
 
@@ -1054,7 +1054,7 @@ module Api
       # that the bounding box will be newly-generated.
       changeset_id = with_controller(Api::ChangesetsController.new) do
         xml = "<osm><changeset/></osm>"
-        put changeset_create_path, :params => xml, :headers => auth_header
+        post api_changesets_path, :params => xml, :headers => auth_header
         assert_response :success, "couldn't create changeset for modify test"
         @response.body.to_i
       end