assert_select "osm>changeset[id=#{changeset_id}]", 1
end
+ ##
+ # test that the user who opened a change can close it
def test_close
- # FIXME FIXME FIXME!
+ basic_authorization "test@openstreetmap.org", "test"
+
+ put :close, :id => changesets(:normal_user_first_change).id
+ assert_response :success
+ end
+
+ ##
+ # test that a different user can't close another user's changeset
+ def test_close_invalid
+ basic_authorization "test@example.com", "test"
+
+ put :close, :id => changesets(:normal_user_first_change).id
+ assert_response :conflict
end
##
"can't upload a simple valid creation to changeset: #{@response.body}"
# check the returned payload
- assert_select "osm[version=#{API_VERSION}][generator=\"OpenStreetMap server\"]", 1
- assert_select "osm>node", 1
- assert_select "osm>way", 1
- assert_select "osm>relation", 1
+ assert_select "diffResult[version=#{API_VERSION}][generator=\"OpenStreetMap server\"]", 1
+ assert_select "diffResult>node", 1
+ assert_select "diffresult>way", 1
+ assert_select "diffResult>relation", 1
# inspect the response to find out what the new element IDs are
doc = XML::Parser.string(@response.body).parse
- new_node_id = doc.find("//osm/node").first["new_id"].to_i
- new_way_id = doc.find("//osm/way").first["new_id"].to_i
- new_rel_id = doc.find("//osm/relation").first["new_id"].to_i
+ new_node_id = doc.find("//diffResult/node").first["new_id"].to_i
+ new_way_id = doc.find("//diffResult/way").first["new_id"].to_i
+ new_rel_id = doc.find("//diffResult/relation").first["new_id"].to_i
# check the old IDs are all present and negative one
- assert_equal -1, doc.find("//osm/node").first["old_id"].to_i
- assert_equal -1, doc.find("//osm/way").first["old_id"].to_i
- assert_equal -1, doc.find("//osm/relation").first["old_id"].to_i
+ assert_equal -1, doc.find("//diffResult/node").first["old_id"].to_i
+ assert_equal -1, doc.find("//diffResult/way").first["old_id"].to_i
+ assert_equal -1, doc.find("//diffResult/relation").first["old_id"].to_i
# check the versions are present and equal one
- assert_equal 1, doc.find("//osm/node").first["new_version"].to_i
- assert_equal 1, doc.find("//osm/way").first["new_version"].to_i
- assert_equal 1, doc.find("//osm/relation").first["new_version"].to_i
+ assert_equal 1, doc.find("//diffResult/node").first["new_version"].to_i
+ assert_equal 1, doc.find("//diffResult/way").first["new_version"].to_i
+ assert_equal 1, doc.find("//diffResult/relation").first["new_version"].to_i
# check that the changes made it into the database
assert_equal 2, Node.find(new_node_id).tags.size, "new node should have two tags"
"can't upload a complex diff to changeset: #{@response.body}"
# check the returned payload
- assert_select "osm[version=#{API_VERSION}][generator=\"#{GENERATOR}\"]", 1
- assert_select "osm>node", 1
- assert_select "osm>way", 1
- assert_select "osm>relation", 1
+ assert_select "diffResult[version=#{API_VERSION}][generator=\"#{GENERATOR}\"]", 1
+ assert_select "diffResult>node", 1
+ assert_select "diffResult>way", 1
+ assert_select "diffResult>relation", 1
# inspect the response to find out what the new element IDs are
doc = XML::Parser.string(@response.body).parse
- new_node_id = doc.find("//osm/node").first["new_id"].to_i
+ new_node_id = doc.find("//diffResult/node").first["new_id"].to_i
# check that the changes made it into the database
assert_equal 2, Node.find(new_node_id).tags.size, "new node should have two tags"
# get the bounding box back from the changeset
get :read, :id => changeset_id
assert_response :success, "Couldn't read back changeset."
- assert_select "osm>changeset[min_lon=1]", 1
- assert_select "osm>changeset[max_lon=1]", 1
- assert_select "osm>changeset[min_lat=2]", 1
- assert_select "osm>changeset[max_lat=2]", 1
+ assert_select "osm>changeset[min_lon=1.0]", 1
+ assert_select "osm>changeset[max_lon=1.0]", 1
+ assert_select "osm>changeset[min_lat=2.0]", 1
+ assert_select "osm>changeset[max_lat=2.0]", 1
# add another node to it
with_controller(NodeController.new) do
# get the bounding box back from the changeset
get :read, :id => changeset_id
assert_response :success, "Couldn't read back changeset for the second time."
- assert_select "osm>changeset[min_lon=1]", 1
- assert_select "osm>changeset[max_lon=2]", 1
- assert_select "osm>changeset[min_lat=1]", 1
- assert_select "osm>changeset[max_lat=2]", 1
+ assert_select "osm>changeset[min_lon=1.0]", 1
+ assert_select "osm>changeset[max_lon=2.0]", 1
+ assert_select "osm>changeset[min_lat=1.0]", 1
+ assert_select "osm>changeset[max_lat=2.0]", 1
# add (delete) a way to it
with_controller(WayController.new) do
# 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."
- assert_select "osm>changeset[min_lon=1]", 1
- assert_select "osm>changeset[max_lon=3]", 1
- assert_select "osm>changeset[min_lat=1]", 1
- assert_select "osm>changeset[max_lat=3]", 1
+ 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
+ assert_select "osm>changeset[max_lat=3.1]", 1
end
##
# FIXME: write the actual test bit after fixing the fixtures!
end
+ ##
+ # check updating tags on a changeset
+ def test_changeset_update
+ basic_authorization "test@openstreetmap.org", "test"
+
+ changeset = changesets(:normal_user_first_change)
+ new_changeset = changeset.to_xml
+ new_tag = XML::Node.new "tag"
+ new_tag['k'] = "testing"
+ new_tag['v'] = "testing"
+ new_changeset.find("//osm/changeset").first << new_tag
+
+ content new_changeset
+ put :update, :id => changeset.id
+ assert_response :success
+
+ assert_select "osm>changeset[id=#{changeset.id}]", 1
+ assert_select "osm>changeset>tag", 2
+ assert_select "osm>changeset>tag[k=testing][v=testing]", 1
+ end
+
+ ##
+ # check that a user different from the one who opened the changeset
+ # can't modify it.
+ def test_changeset_update_invalid
+ basic_authorization "test@example.com", "test"
+
+ changeset = changesets(:normal_user_first_change)
+ new_changeset = changeset.to_xml
+ new_tag = XML::Node.new "tag"
+ new_tag['k'] = "testing"
+ new_tag['v'] = "testing"
+ new_changeset.find("//osm/changeset").first << new_tag
+
+ content new_changeset
+ put :update, :id => changeset.id
+ assert_response :conflict
+ end
+
#------------------------------------------------------------
# utility functions
#------------------------------------------------------------