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)
|
def self.from_xml_node(pt, create=false)
|
||||||
node = Node.new
|
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.lat = pt['lat'].to_f
|
||||||
node.lon = pt['lon'].to_f
|
node.lon = pt['lon'].to_f
|
||||||
node.changeset_id = pt['changeset'].to_i
|
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
|
# version must be present unless creating
|
||||||
return nil unless create or not pt['version'].nil?
|
return nil unless create or not pt['version'].nil?
|
||||||
|
|
|
@ -35,7 +35,7 @@ class Way < ActiveRecord::Base
|
||||||
return Way.from_xml_node(pt, create)
|
return Way.from_xml_node(pt, create)
|
||||||
end
|
end
|
||||||
rescue LibXML::XML::Error => ex
|
rescue LibXML::XML::Error => ex
|
||||||
raise OSM::APIBadXMLError.new("relation", xml, ex.message)
|
raise OSM::APIBadXMLError.new("way", xml, ex.message)
|
||||||
end
|
end
|
||||||
end
|
end
|
||||||
|
|
||||||
|
|
|
@ -310,7 +310,7 @@ EOF
|
||||||
</relation>
|
</relation>
|
||||||
</modify>
|
</modify>
|
||||||
<create>
|
<create>
|
||||||
<node id='-1' changeset='4'>
|
<node id='-1' lon='0' lat='0' changeset='4'>
|
||||||
<tag k='foo' v='bar'/>
|
<tag k='foo' v='bar'/>
|
||||||
<tag k='baz' v='bat'/>
|
<tag k='baz' v='bat'/>
|
||||||
</node>
|
</node>
|
||||||
|
|
|
@ -6,7 +6,7 @@ class NodeControllerTest < ActionController::TestCase
|
||||||
|
|
||||||
def test_create
|
def test_create
|
||||||
# cannot read password from fixture as it is stored as MD5 digest
|
# 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
|
# create a node with random lat/lon
|
||||||
lat = rand(100)-50 + rand
|
lat = rand(100)-50 + rand
|
||||||
|
@ -30,6 +30,32 @@ class NodeControllerTest < ActionController::TestCase
|
||||||
assert_equal true, checknode.visible, "saved node is not visible"
|
assert_equal true, checknode.visible, "saved node is not visible"
|
||||||
end
|
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
|
def test_read
|
||||||
# check that a visible node is returned properly
|
# check that a visible node is returned properly
|
||||||
get :read, :id => current_nodes(:visible_node).id
|
get :read, :id => current_nodes(:visible_node).id
|
||||||
|
|
Loading…
Add table
Add a link
Reference in a new issue