ensure that uploads that don't supply a lat and lon for a node. Adding related test and fixing other tests.
This commit is contained in:
parent
6e98e324e5
commit
e989b1a880
4 changed files with 32 additions and 4 deletions
|
@ -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?
|
||||
|
|
|
@ -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
|
||||
|
||||
|
|
|
@ -310,7 +310,7 @@ EOF
|
|||
</relation>
|
||||
</modify>
|
||||
<create>
|
||||
<node id='-1' changeset='4'>
|
||||
<node id='-1' lon='0' lat='0' changeset='4'>
|
||||
<tag k='foo' v='bar'/>
|
||||
<tag k='baz' v='bat'/>
|
||||
</node>
|
||||
|
|
|
@ -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("<osm><node lon='#{lon}' changeset='#{changeset.id}'/></osm>")
|
||||
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 <node lon="3.23" changeset="1"/>. lat missing', @response.body
|
||||
|
||||
# test that the upload is rejected when no lon is supplied
|
||||
# create a minimal xml file
|
||||
content("<osm><node lat='#{lat}' changeset='#{changeset.id}'/></osm>")
|
||||
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 <node lat="3.434" changeset="1"/>. lon missing', @response.body
|
||||
|
||||
end
|
||||
|
||||
def test_read
|
||||
# check that a visible node is returned properly
|
||||
get :read, :id => current_nodes(:visible_node).id
|
||||
|
|
Loading…
Add table
Add a link
Reference in a new issue