From 183ffc78648938ca079f7ea5f899d3e71e829333 Mon Sep 17 00:00:00 2001 From: Shaun McDonald Date: Mon, 3 Nov 2008 18:54:19 +0000 Subject: [PATCH] Adding an extra test to make sure that the correct response is returned when an invalid changeset action is uploaded. --- lib/diff_reader.rb | 2 +- lib/osm.rb | 13 +++++++++++++ test/functional/changeset_controller_test.rb | 20 +++++++++++++++++++- 3 files changed, 33 insertions(+), 2 deletions(-) diff --git a/lib/diff_reader.rb b/lib/diff_reader.rb index eca6d438c..165e30e20 100644 --- a/lib/diff_reader.rb +++ b/lib/diff_reader.rb @@ -156,7 +156,7 @@ class DiffReader else # no other actions to choose from, so it must be the users fault! - raise "Unknown action #{action_name}, choices are create, modify, delete." + raise OSM::APIChangesetActionInvalid.new(action_name) end end diff --git a/lib/osm.rb b/lib/osm.rb index b002ebbe8..223e351f4 100644 --- a/lib/osm.rb +++ b/lib/osm.rb @@ -66,6 +66,19 @@ module OSM "#{@allowed} is allowed.", :status => :conflict } end end + + # Raised when a diff upload has an unknown action. You can only have create, + # modify, or delete + class APIChangesetActionInvalid < APIError + def initialize(provided) + @provided = provided + end + + def render_opts + { :text => "Unknown action #{@provided}, choices are create, modify, delete.", + :status => :bad_request } + end + end # Raised when bad XML is encountered which stops things parsing as # they should. diff --git a/test/functional/changeset_controller_test.rb b/test/functional/changeset_controller_test.rb index 5e26c2071..31ade9fce 100644 --- a/test/functional/changeset_controller_test.rb +++ b/test/functional/changeset_controller_test.rb @@ -233,7 +233,7 @@ EOF "can't upload a complex diff to changeset: #{@response.body}" # check the returned payload - assert_select "osm[version=#{API_VERSION}][generator=\"OpenStreetMap server\"]", 1 + assert_select "osm[version=#{API_VERSION}][generator=\"#{GENERATOR}\"]", 1 assert_select "osm>node", 1 assert_select "osm>way", 1 assert_select "osm>relation", 1 @@ -369,6 +369,24 @@ EOF assert_response :bad_request, "shouldn't be able to upload an element without version: #{@response.body}" end + + ## + # try to upload with commands other than create, modify, or delete + def test_action_upload_invalid + basic_authorization "test@openstreetmap.org", "test" + + diff = < + + + + +EOF + content diff + post :upload, :id => 1 + assert_response :bad_request, "Shouldn't be able to upload a diff with the action ping" + assert_equal @response.body, "Unknown action ping, choices are create, modify, delete." + end ## # when we make some simple changes we get the same changes back from the -- 2.43.2