Fixed 'raw' raises by converting them to the appropriate OSM::APIError type. Made the error messages for placeholder fixing more informative. Added tests for these.

This commit is contained in:
Matt Amos 2009-04-29 10:07:35 +00:00
parent 9acc6d3288
commit 3e9b6845d3
5 changed files with 116 additions and 8 deletions

View file

@ -573,6 +573,114 @@ EOF
"shouldn't be able to re-use placeholder IDs"
end
##
# test that uploading a way referencing invalid placeholders gives a
# proper error, not a 500.
def test_upload_placeholder_invalid_way
basic_authorization "test@example.com", "test"
diff = <<EOF
<osmChange>
<create>
<node id="-1" lon="0" lat="0" changeset="2" version="1"/>
<node id="-2" lon="1" lat="1" changeset="2" version="1"/>
<node id="-3" lon="2" lat="2" changeset="2" version="1"/>
<way id="-1" changeset="2" version="1">
<nd ref="-1"/>
<nd ref="-2"/>
<nd ref="-3"/>
<nd ref="-4"/>
</way>
</create>
</osmChange>
EOF
# upload it
content diff
post :upload, :id => 2
assert_response :bad_request,
"shouldn't be able to use invalid placeholder IDs"
assert_equal "Placeholder node not found for reference -4 in way -1", @response.body
# the same again, but this time use an existing way
diff = <<EOF
<osmChange>
<create>
<node id="-1" lon="0" lat="0" changeset="2" version="1"/>
<node id="-2" lon="1" lat="1" changeset="2" version="1"/>
<node id="-3" lon="2" lat="2" changeset="2" version="1"/>
<way id="1" changeset="2" version="1">
<nd ref="-1"/>
<nd ref="-2"/>
<nd ref="-3"/>
<nd ref="-4"/>
</way>
</create>
</osmChange>
EOF
# upload it
content diff
post :upload, :id => 2
assert_response :bad_request,
"shouldn't be able to use invalid placeholder IDs"
assert_equal "Placeholder node not found for reference -4 in way 1", @response.body
end
##
# test that uploading a relation referencing invalid placeholders gives a
# proper error, not a 500.
def test_upload_placeholder_invalid_relation
basic_authorization "test@example.com", "test"
diff = <<EOF
<osmChange>
<create>
<node id="-1" lon="0" lat="0" changeset="2" version="1"/>
<node id="-2" lon="1" lat="1" changeset="2" version="1"/>
<node id="-3" lon="2" lat="2" changeset="2" version="1"/>
<relation id="-1" changeset="2" version="1">
<member type="node" role="foo" ref="-1"/>
<member type="node" role="foo" ref="-2"/>
<member type="node" role="foo" ref="-3"/>
<member type="node" role="foo" ref="-4"/>
</relation>
</create>
</osmChange>
EOF
# upload it
content diff
post :upload, :id => 2
assert_response :bad_request,
"shouldn't be able to use invalid placeholder IDs"
assert_equal "Placeholder Node not found for reference -4 in relation -1.", @response.body
# the same again, but this time use an existing way
diff = <<EOF
<osmChange>
<create>
<node id="-1" lon="0" lat="0" changeset="2" version="1"/>
<node id="-2" lon="1" lat="1" changeset="2" version="1"/>
<node id="-3" lon="2" lat="2" changeset="2" version="1"/>
<relation id="1" changeset="2" version="1">
<member type="node" role="foo" ref="-1"/>
<member type="node" role="foo" ref="-2"/>
<member type="node" role="foo" ref="-3"/>
<member type="way" role="bar" ref="-1"/>
</relation>
</create>
</osmChange>
EOF
# upload it
content diff
post :upload, :id => 2
assert_response :bad_request,
"shouldn't be able to use invalid placeholder IDs"
assert_equal "Placeholder Way not found for reference -1 in relation 1.", @response.body
end
##
# test what happens if a diff is uploaded containing only a node
# move.