X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/8264fb92ffeb46e06229a41b1db05a3bb6b8d3a6..e1d873cde99eaa6eafaca6659c221ec2b98de36e:/test/functional/amf_controller_test.rb diff --git a/test/functional/amf_controller_test.rb b/test/functional/amf_controller_test.rb index 3bb1d273e..46ff71eb7 100644 --- a/test/functional/amf_controller_test.rb +++ b/test/functional/amf_controller_test.rb @@ -5,6 +5,19 @@ include Potlatch class AmfControllerTest < ActionController::TestCase api_fixtures + ## + # test all routes which lead to this controller + def test_routes + assert_routing( + { :path => "/api/0.6/amf/read", :method => :post }, + { :controller => "amf", :action => "amf_read" } + ) + assert_routing( + { :path => "/api/0.6/amf/write", :method => :post }, + { :controller => "amf", :action => "amf_write" } + ) + end + def test_getway # check a visible way id = current_ways(:visible_way).id @@ -208,16 +221,16 @@ class AmfControllerTest < ActionController::TestCase # instead of a version number... # try to get version 1 v1 = ways(:way_with_versions_v1) - { latest => '', - v1 => v1.timestamp.strftime("%d %b %Y, %H:%M:%S") - }.each do |way, t| - amf_content "getway_old", "/1", [way.id, t] + { latest.id => '', + v1.way_id => v1.timestamp.strftime("%d %b %Y, %H:%M:%S") + }.each do |id, t| + amf_content "getway_old", "/1", [id, t] post :amf_read assert_response :success amf_parse_response returned_way = amf_result("/1") assert_equal 0, returned_way[0] - assert_equal way.id, returned_way[2] + assert_equal id, returned_way[2] # API returns the *latest* version, even for old ways... assert_equal latest.version, returned_way[5] end @@ -251,11 +264,11 @@ class AmfControllerTest < ActionController::TestCase v1 = ways(:way_with_versions_v1) # try to get last visible version of non-existent way # try to get specific version of non-existent way - [[nil, ''], - [nil, '1 Jan 1970, 00:00:00'], - [v1, (v1.timestamp - 10).strftime("%d %b %Y, %H:%M:%S")] - ].each do |way, t| - amf_content "getway_old", "/1", [way.nil? ? 0 : way.id, t] + [[0, ''], + [0, '1 Jan 1970, 00:00:00'], + [v1.way_id, (v1.timestamp - 10).strftime("%d %b %Y, %H:%M:%S")] + ].each do |id, t| + amf_content "getway_old", "/1", [id, t] post :amf_read assert_response :success amf_parse_response @@ -398,7 +411,7 @@ class AmfControllerTest < ActionController::TestCase # Finally check that the node that was saved has saved the data correctly # in both the current and history tables # First check the current table - current_node = Node.find(result[3]) + current_node = Node.find(result[3].to_i) assert_in_delta lat, current_node.lat, 0.00001, "The latitude was not retreieved correctly" assert_in_delta lon, current_node.lon, 0.00001, "The longitude was not retreived correctly" assert_equal 0, current_node.tags.size, "There seems to be a tag that has been added to the node" @@ -437,7 +450,7 @@ class AmfControllerTest < ActionController::TestCase # Finally check that the node that was saved has saved the data correctly # in both the current and history tables # First check the current table - current_node = Node.find(result[3]) + current_node = Node.find(result[3].to_i) assert_in_delta lat, current_node.lat, 0.00001, "The latitude was not retreieved correctly" assert_in_delta lon, current_node.lon, 0.00001, "The longitude was not retreived correctly" assert_equal 2, current_node.tags.size, "There seems to be a tag that has been added to the node" @@ -483,7 +496,7 @@ class AmfControllerTest < ActionController::TestCase # Finally check that the node that was saved has saved the data correctly # in both the current and history tables # First check the current table - current_node = Node.find(result[3]) + current_node = Node.find(result[3].to_i) assert_equal 1, current_node.tags.size, "There seems to be a tag that has been added to the node" assert_equal({ "something" => "foo\t\n\rbar" }, current_node.tags, "tags were not fixed correctly") assert_equal result[4], current_node.version, "The version returned, is different to the one returned by the amf" @@ -529,6 +542,24 @@ class AmfControllerTest < ActionController::TestCase end + def test_startchangeset_invalid_xmlchar_comment + invalid = "\035\022" + comment = "foo#{invalid}bar" + + amf_content "startchangeset", "/1", ["test@example.com:test", Hash.new, nil, comment, 1] + post :amf_write + assert_response :success + amf_parse_response + result = amf_result("/1") + + assert_equal 3, result.size, result.inspect + assert_equal 0, result[0] + new_cs_id = result[2].to_i + + cs = Changeset.find(new_cs_id) + assert_equal "foobar", cs.tags["comment"] + end + # ************************************************************ # AMF Helper functions @@ -559,13 +590,8 @@ class AmfControllerTest < ActionController::TestCase # The result is a hash of message_ref => data. # The attribute @amf_result is initialised to this hash. def amf_parse_response - if @response.body.class.to_s == 'Proc' - res = StringIO.new() - @response.body.call @response, res - req = StringIO.new(res.string) - else - req = StringIO.new(@response.body) - end + req = StringIO.new(@response.body) + req.read(2) # version # parse through any headers