- assert_routing(
- { :path => "/api/0.6/way/1/relations.json", :method => :get },
- { :controller => "api/relations", :action => "relations_for_way", :id => "1", :format => "json" }
- )
- assert_routing(
- { :path => "/api/0.6/relation/1/relations.json", :method => :get },
- { :controller => "api/relations", :action => "relations_for_relation", :id => "1", :format => "json" }
- )
- end
-
- # -------------------------------------
- # Test showing relations.
- # -------------------------------------
-
- def test_show
- # check that a visible relation is returned properly
- get api_relation_path(create(:relation))
- assert_response :success
-
- # check that an invisible relation is not returned
- get api_relation_path(create(:relation, :deleted))
- assert_response :gone
-
- # check chat a non-existent relation is not returned
- get api_relation_path(0)
- assert_response :not_found
- end
-
- ##
- # check that all relations containing a particular node, and no extra
- # relations, are returned from the relations_for_node call.
- def test_relations_for_node
- node = create(:node)
- # should include relations with that node as a member
- relation_with_node = create(:relation_member, :member => node).relation
- # should ignore relations without that node as a member
- _relation_without_node = create(:relation_member).relation
- # should ignore relations with the node involved indirectly, via a way
- way = create(:way_node, :node => node).way
- _relation_with_way = create(:relation_member, :member => way).relation
- # should ignore relations with the node involved indirectly, via a relation
- second_relation = create(:relation_member, :member => node).relation
- _super_relation = create(:relation_member, :member => second_relation).relation
- # should combine multiple relation_member references into just one relation entry
- create(:relation_member, :member => node, :relation => relation_with_node)
- # should not include deleted relations
- deleted_relation = create(:relation, :deleted)
- create(:relation_member, :member => node, :relation => deleted_relation)
-
- check_relations_for_element(node_relations_path(node), "node",
- node.id,
- [relation_with_node, second_relation])
- end
-
- def test_relations_for_way
- way = create(:way)
- # should include relations with that way as a member
- relation_with_way = create(:relation_member, :member => way).relation
- # should ignore relations without that way as a member
- _relation_without_way = create(:relation_member).relation
- # should ignore relations with the way involved indirectly, via a relation
- second_relation = create(:relation_member, :member => way).relation
- _super_relation = create(:relation_member, :member => second_relation).relation
- # should combine multiple relation_member references into just one relation entry
- create(:relation_member, :member => way, :relation => relation_with_way)
- # should not include deleted relations
- deleted_relation = create(:relation, :deleted)
- create(:relation_member, :member => way, :relation => deleted_relation)
-
- check_relations_for_element(way_relations_path(way), "way",
- way.id,
- [relation_with_way, second_relation])
- end
-
- def test_relations_for_relation
- relation = create(:relation)
- # should include relations with that relation as a member
- relation_with_relation = create(:relation_member, :member => relation).relation
- # should ignore any relation without that relation as a member
- _relation_without_relation = create(:relation_member).relation
- # should ignore relations with the relation involved indirectly, via a relation
- second_relation = create(:relation_member, :member => relation).relation
- _super_relation = create(:relation_member, :member => second_relation).relation
- # should combine multiple relation_member references into just one relation entry
- create(:relation_member, :member => relation, :relation => relation_with_relation)
- # should not include deleted relations
- deleted_relation = create(:relation, :deleted)
- create(:relation_member, :member => relation, :relation => deleted_relation)
- check_relations_for_element(relation_relations_path(relation), "relation",
- relation.id,
- [relation_with_relation, second_relation])
- end
-
- def test_full
- # check the "full" mode
- get relation_full_path(:id => 999999)
- assert_response :not_found
-
- get relation_full_path(:id => create(:relation, :deleted).id)
- assert_response :gone
-
- get relation_full_path(:id => create(:relation).id)
- assert_response :success
- # FIXME: check whether this contains the stuff we want!