Fixed a couple of bugs with changeset bounding box calculation when modifying or deleting.

This commit is contained in:
Matt Amos 2009-03-27 12:22:23 +00:00
parent 663416ae0b
commit be75a1504f
4 changed files with 107 additions and 11 deletions

View file

@ -553,6 +553,84 @@ EOF
"shouldn't be able to re-use placeholder IDs"
end
##
# test what happens if a diff is uploaded containing only a node
# move.
def test_upload_node_move
basic_authorization "test@openstreetmap.org", "test"
content "<osm><changeset>" +
"<tag k='created_by' v='osm test suite checking changesets'/>" +
"</changeset></osm>"
put :create
assert_response :success
changeset_id = @response.body.to_i
old_node = current_nodes(:visible_node)
diff = XML::Document.new
diff.root = XML::Node.new "osmChange"
modify = XML::Node.new "modify"
xml_old_node = old_node.to_xml_node
xml_old_node["lat"] = (2.0).to_s
xml_old_node["lon"] = (2.0).to_s
xml_old_node["changeset"] = changeset_id.to_s
modify << xml_old_node
diff.root << modify
# upload it
content diff
post :upload, :id => changeset_id
assert_response :success,
"diff should have uploaded OK"
# check the bbox
changeset = Changeset.find(changeset_id)
assert_equal 1*SCALE, changeset.min_lon, "min_lon should be 1 degree"
assert_equal 2*SCALE, changeset.max_lon, "max_lon should be 2 degrees"
assert_equal 1*SCALE, changeset.min_lat, "min_lat should be 1 degree"
assert_equal 2*SCALE, changeset.max_lat, "max_lat should be 2 degrees"
end
##
# test what happens if a diff is uploaded adding a node to a way.
def test_upload_way_extend
basic_authorization "test@openstreetmap.org", "test"
content "<osm><changeset>" +
"<tag k='created_by' v='osm test suite checking changesets'/>" +
"</changeset></osm>"
put :create
assert_response :success
changeset_id = @response.body.to_i
old_way = current_ways(:visible_way)
diff = XML::Document.new
diff.root = XML::Node.new "osmChange"
modify = XML::Node.new "modify"
xml_old_way = old_way.to_xml_node
nd_ref = XML::Node.new "nd"
nd_ref["ref"] = current_nodes(:visible_node).id.to_s
xml_old_way << nd_ref
xml_old_way["changeset"] = changeset_id.to_s
modify << xml_old_way
diff.root << modify
# upload it
content diff
post :upload, :id => changeset_id
assert_response :success,
"diff should have uploaded OK"
# check the bbox
changeset = Changeset.find(changeset_id)
assert_equal 1*SCALE, changeset.min_lon, "min_lon should be 1 degree"
assert_equal 3*SCALE, changeset.max_lon, "max_lon should be 3 degrees"
assert_equal 1*SCALE, changeset.min_lat, "min_lat should be 1 degree"
assert_equal 3*SCALE, changeset.max_lat, "max_lat should be 3 degrees"
end
##
# test for more issues in #1568
def test_upload_empty_invalid
@ -773,7 +851,7 @@ EOF
assert_select "osm>changeset[min_lat=1.0]", 1
assert_select "osm>changeset[max_lat=2.0]", 1
# add (delete) a way to it
# add (delete) a way to it, which contains a point at (3,3)
with_controller(WayController.new) do
content update_changeset(current_ways(:visible_way).to_xml,
changeset_id)
@ -784,6 +862,7 @@ EOF
# get the bounding box back from the changeset
get :read, :id => changeset_id
assert_response :success, "Couldn't read back changeset for the third time."
# note that the 3.1 here is because of the bbox overexpansion
assert_select "osm>changeset[min_lon=1.0]", 1
assert_select "osm>changeset[max_lon=3.1]", 1
assert_select "osm>changeset[min_lat=1.0]", 1