X-Git-Url: https://git.openstreetmap.org./rails.git/blobdiff_plain/0c893e91970da4ac70e77de435c4906ab260b855..e206dd527ef7c6d1829f131533d722e536e4bfb5:/test/controllers/api/relations_controller_test.rb diff --git a/test/controllers/api/relations_controller_test.rb b/test/controllers/api/relations_controller_test.rb index 040062153..803a57acf 100644 --- a/test/controllers/api/relations_controller_test.rb +++ b/test/controllers/api/relations_controller_test.rb @@ -27,11 +27,11 @@ module Api ) assert_routing( { :path => "/api/0.6/relation/1/full", :method => :get }, - { :controller => "api/relations", :action => "full", :id => "1" } + { :controller => "api/relations", :action => "show", :full => true, :id => "1" } ) assert_routing( { :path => "/api/0.6/relation/1/full.json", :method => :get }, - { :controller => "api/relations", :action => "full", :id => "1", :format => "json" } + { :controller => "api/relations", :action => "show", :full => true, :id => "1", :format => "json" } ) assert_routing( { :path => "/api/0.6/relation/1", :method => :put }, @@ -133,24 +133,99 @@ module Api end def test_show - get api_relation_path(create(:relation)) + relation = create(:relation, :timestamp => "2021-02-03T00:00:00Z") + node = create(:node, :timestamp => "2021-04-05T00:00:00Z") + create(:relation_member, :relation => relation, :member => node) + + get api_relation_path(relation) + assert_response :success + assert_not_nil @response.header["Last-Modified"] + assert_equal "2021-02-03T00:00:00Z", Time.parse(@response.header["Last-Modified"]).utc.xmlschema + assert_dom "node", :count => 0 + assert_dom "relation", :count => 1 do + assert_dom "> @id", :text => relation.id.to_s + end end def test_full_not_found - get relation_full_path(999999) + get api_relation_path(999999, :full => true) assert_response :not_found end def test_full_deleted - get relation_full_path(create(:relation, :deleted)) + get api_relation_path(create(:relation, :deleted), :full => true) assert_response :gone end def test_full_empty - get relation_full_path(create(:relation)) + relation = create(:relation) + + get api_relation_path(relation, :full => true) + + assert_response :success + assert_dom "relation", :count => 1 do + assert_dom "> @id", :text => relation.id.to_s + end + end + + def test_full_with_node_member + relation = create(:relation) + node = create(:node) + create(:relation_member, :relation => relation, :member => node) + + get api_relation_path(relation, :full => true) + assert_response :success - # FIXME: check whether this contains the stuff we want! + assert_dom "node", :count => 1 do + assert_dom "> @id", :text => node.id.to_s + end + assert_dom "relation", :count => 1 do + assert_dom "> @id", :text => relation.id.to_s + end + end + + def test_full_with_way_member + relation = create(:relation) + way = create(:way_with_nodes) + create(:relation_member, :relation => relation, :member => way) + + get api_relation_path(relation, :full => true) + + assert_response :success + assert_dom "node", :count => 1 do + assert_dom "> @id", :text => way.nodes[0].id.to_s + end + assert_dom "way", :count => 1 do + assert_dom "> @id", :text => way.id.to_s + end + assert_dom "relation", :count => 1 do + assert_dom "> @id", :text => relation.id.to_s + end + end + + def test_full_with_node_member_json + relation = create(:relation) + node = create(:node) + create(:relation_member, :relation => relation, :member => node) + + get api_relation_path(relation, :full => true, :format => "json") + + assert_response :success + js = ActiveSupport::JSON.decode(@response.body) + assert_not_nil js + assert_equal 2, js["elements"].count + + js_relations = js["elements"].filter { |e| e["type"] == "relation" } + assert_equal 1, js_relations.count + assert_equal relation.id, js_relations[0]["id"] + assert_equal 1, js_relations[0]["members"].count + assert_equal "node", js_relations[0]["members"][0]["type"] + assert_equal node.id, js_relations[0]["members"][0]["ref"] + + js_nodes = js["elements"].filter { |e| e["type"] == "node" } + assert_equal 1, js_nodes.count + assert_equal node.id, js_nodes[0]["id"] end ##