1 require File.dirname(__FILE__) + '/../test_helper'
2 require 'segment_controller'
4 # Re-raise errors caught by the controller.
5 class SegmentController; def rescue_action(e) raise e end; end
7 class SegmentControllerTest < Test::Unit::TestCase
8 fixtures :current_nodes, :nodes, :users, :current_segments, :segments, :current_ways, :ways, :current_way_segments, :way_segments
9 set_fixture_class :current_nodes => :Node
10 set_fixture_class :nodes => :OldNode
11 set_fixture_class :current_segments => :Segment
12 set_fixture_class :segments => :OldSegment
13 set_fixture_class :current_ways => :Way
14 set_fixture_class :ways => :OldWay
15 set_fixture_class :current_way_segments => :WaySegment
16 set_fixture_class :way_segments => :OldWaySegment
19 @controller = SegmentController.new
20 @request = ActionController::TestRequest.new
21 @response = ActionController::TestResponse.new
25 # cannot read password from fixture as it is stored as MD5 digest
26 basic_authorization("test@openstreetmap.org", "test");
27 na = current_nodes(:used_node_1).id
28 nb = current_nodes(:used_node_2).id
29 content("<osm><segment from='#{na}' to='#{nb}' /></osm>")
32 assert_response :success, "segment upload did not return success status"
33 # read id of created segment and search for it
34 segmentid = @response.body
35 checksegment = Segment.find(segmentid)
36 assert_not_nil checksegment, "uploaded segment not found in data base after upload"
38 assert_equal na, checksegment.node_a, "saved segment does not match requested from-node"
39 assert_equal nb, checksegment.node_b, "saved segment does not match requested to-node"
40 assert_equal users(:normal_user).id, checksegment.user_id, "saved segment does not belong to user that created it"
41 assert_equal true, checksegment.visible, "saved segment is not visible"
44 def test_create_invalid
45 basic_authorization("test@openstreetmap.org", "test");
46 # create a segment with one invalid node
47 na = current_nodes(:used_node_1).id
49 content("<osm><segment from='#{na}' to='#{nb}' /></osm>")
52 assert_response :precondition_failed, "upload of invalid segment did not return 'precondition failed'"
56 # check that a visible segment is returned properly
57 get :read, :id => current_segments(:visible_segment).id
58 assert_response :success
59 # TODO: check for <segment> tag in return data
61 # check that an invisible segment is not returned
62 get :read, :id => current_segments(:invisible_segment).id
65 # check chat a non-existent segment is not returned
67 assert_response :not_found
70 # this tests deletion restrictions - basic deletion is tested in the unit
74 # first try to delete segment without auth
75 delete :delete, :id => current_segments(:visible_segment).id
76 assert_response :unauthorized
79 basic_authorization("test@openstreetmap.org", "test");
82 delete :delete, :id => current_segments(:visible_segment).id
83 assert_response :success
85 # this won't work since the segment is already deleted
86 delete :delete, :id => current_segments(:invisible_segment).id
89 # this won't work since the segment never existed
90 delete :delete, :id => 0
91 assert_response :not_found
93 # this won't work since the segment is in use
94 delete :delete, :id => current_segments(:used_segment).id
95 assert_response :precondition_failed
99 def basic_authorization(user, pass)
100 @request.env["HTTP_AUTHORIZATION"] = "Basic %s" % Base64.encode64("#{user}:#{pass}")
104 @request.env["RAW_POST_DATA"] = c