From e989b1a880f79fd1835a44d16de115a778f890af Mon Sep 17 00:00:00 2001 From: Shaun McDonald Date: Mon, 1 Dec 2008 18:32:54 +0000 Subject: [PATCH] ensure that uploads that don't supply a lat and lon for a node. Adding related test and fixing other tests. --- app/models/node.rb | 4 ++- app/models/way.rb | 2 +- test/functional/changeset_controller_test.rb | 2 +- test/functional/node_controller_test.rb | 28 +++++++++++++++++++- 4 files changed, 32 insertions(+), 4 deletions(-) diff --git a/app/models/node.rb b/app/models/node.rb index b2650b61d..e90c32950 100644 --- a/app/models/node.rb +++ b/app/models/node.rb @@ -79,11 +79,13 @@ class Node < ActiveRecord::Base def self.from_xml_node(pt, create=false) node = Node.new + raise OSM::APIBadXMLError.new("node", pt, "lat missing") if pt['lat'].nil? + raise OSM::APIBadXMLError.new("node", pt, "lon missing") if pt['lon'].nil? node.lat = pt['lat'].to_f node.lon = pt['lon'].to_f node.changeset_id = pt['changeset'].to_i - return nil unless node.in_world? + raise OSM::APIBadUserInput.new("The node is outside this world") unless node.in_world? # version must be present unless creating return nil unless create or not pt['version'].nil? diff --git a/app/models/way.rb b/app/models/way.rb index d4bca19aa..d6aa12af1 100644 --- a/app/models/way.rb +++ b/app/models/way.rb @@ -35,7 +35,7 @@ class Way < ActiveRecord::Base return Way.from_xml_node(pt, create) end rescue LibXML::XML::Error => ex - raise OSM::APIBadXMLError.new("relation", xml, ex.message) + raise OSM::APIBadXMLError.new("way", xml, ex.message) end end diff --git a/test/functional/changeset_controller_test.rb b/test/functional/changeset_controller_test.rb index 59c92e19b..e8648e5c3 100644 --- a/test/functional/changeset_controller_test.rb +++ b/test/functional/changeset_controller_test.rb @@ -310,7 +310,7 @@ EOF - + diff --git a/test/functional/node_controller_test.rb b/test/functional/node_controller_test.rb index 9d7f48ca4..2289953fe 100644 --- a/test/functional/node_controller_test.rb +++ b/test/functional/node_controller_test.rb @@ -6,7 +6,7 @@ class NodeControllerTest < ActionController::TestCase def test_create # cannot read password from fixture as it is stored as MD5 digest - basic_authorization(users(:normal_user).email, "test"); + basic_authorization(users(:normal_user).email, "test") # create a node with random lat/lon lat = rand(100)-50 + rand @@ -30,6 +30,32 @@ class NodeControllerTest < ActionController::TestCase assert_equal true, checknode.visible, "saved node is not visible" end + def test_create_invalid_xml + # Initial setup + basic_authorization(users(:normal_user).email, "test") + # normal user has a changeset open, so we'll use that. + changeset = changesets(:normal_user_first_change) + lat = 3.434 + lon = 3.23 + + # test that the upload is rejected when no lat is supplied + # create a minimal xml file + content("") + put :create + # 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 + + # test that the upload is rejected when no lon is supplied + # create a minimal xml file + content("") + put :create + # 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 + + end + def test_read # check that a visible node is returned properly get :read, :id => current_nodes(:visible_node).id -- 2.43.2