Standardise on double quoted strings
[rails.git] / test / test_helper.rb
1 ENV["RAILS_ENV"] = "test"
2 require File.expand_path("../../config/environment", __FILE__)
3 require "rails/test_help"
4 load "composite_primary_keys/fixtures.rb"
5
6 module ActiveSupport
7   class TestCase
8     # Load standard fixtures needed to test API methods
9     def self.api_fixtures
10       # print "setting up the api_fixtures"
11       fixtures :users, :user_roles, :changesets, :changeset_tags
12
13       fixtures :current_nodes, :nodes
14       set_fixture_class :current_nodes => Node
15       set_fixture_class :nodes => OldNode
16
17       fixtures :current_node_tags, :node_tags
18       set_fixture_class :current_node_tags => NodeTag
19       set_fixture_class :node_tags => OldNodeTag
20
21       fixtures :current_ways
22       set_fixture_class :current_ways => Way
23
24       fixtures :current_way_nodes, :current_way_tags
25       set_fixture_class :current_way_nodes => WayNode
26       set_fixture_class :current_way_tags => WayTag
27
28       fixtures :ways
29       set_fixture_class :ways => OldWay
30
31       fixtures :way_nodes, :way_tags
32       set_fixture_class :way_nodes => OldWayNode
33       set_fixture_class :way_tags => OldWayTag
34
35       fixtures :current_relations
36       set_fixture_class :current_relations => Relation
37
38       fixtures :current_relation_members, :current_relation_tags
39       set_fixture_class :current_relation_members => RelationMember
40       set_fixture_class :current_relation_tags => RelationTag
41
42       fixtures :relations
43       set_fixture_class :relations => OldRelation
44
45       fixtures :relation_members, :relation_tags
46       set_fixture_class :relation_members => OldRelationMember
47       set_fixture_class :relation_tags => OldRelationTag
48
49       fixtures :gpx_files, :gps_points, :gpx_file_tags
50       set_fixture_class :gpx_files => Trace
51       set_fixture_class :gps_points => Tracepoint
52       set_fixture_class :gpx_file_tags => Tracetag
53
54       fixtures :client_applications
55
56       fixtures :redactions
57
58       fixtures :notes, :note_comments
59     end
60
61     ##
62     # takes a block which is executed in the context of a different
63     # ActionController instance. this is used so that code can call methods
64     # on the node controller whilst testing the old_node controller.
65     def with_controller(new_controller)
66       controller_save = @controller
67       begin
68         @controller = new_controller
69         yield
70       ensure
71         @controller = controller_save
72       end
73     end
74
75     ##
76     # for some reason assert_equal a, b fails when the relations are
77     # actually equal, so this method manually checks the fields...
78     def assert_relations_are_equal(a, b)
79       assert_not_nil a, "first relation is not allowed to be nil"
80       assert_not_nil b, "second relation #{a.id} is not allowed to be nil"
81       assert_equal a.id, b.id, "relation IDs"
82       assert_equal a.changeset_id, b.changeset_id, "changeset ID on relation #{a.id}"
83       assert_equal a.visible, b.visible, "visible on relation #{a.id}, #{a.visible.inspect} != #{b.visible.inspect}"
84       assert_equal a.version, b.version, "version on relation #{a.id}"
85       assert_equal a.tags, b.tags, "tags on relation #{a.id}"
86       assert_equal a.members, b.members, "member references on relation #{a.id}"
87     end
88
89     ##
90     # for some reason assert_equal a, b fails when the ways are actually
91     # equal, so this method manually checks the fields...
92     def assert_ways_are_equal(a, b)
93       assert_not_nil a, "first way is not allowed to be nil"
94       assert_not_nil b, "second way #{a.id} is not allowed to be nil"
95       assert_equal a.id, b.id, "way IDs"
96       assert_equal a.changeset_id, b.changeset_id, "changeset ID on way #{a.id}"
97       assert_equal a.visible, b.visible, "visible on way #{a.id}, #{a.visible.inspect} != #{b.visible.inspect}"
98       assert_equal a.version, b.version, "version on way #{a.id}"
99       assert_equal a.tags, b.tags, "tags on way #{a.id}"
100       assert_equal a.nds, b.nds, "node references on way #{a.id}"
101     end
102
103     ##
104     # for some reason a==b is false, but there doesn't seem to be any
105     # difference between the nodes, so i'm checking all the attributes
106     # manually and blaming it on ActiveRecord
107     def assert_nodes_are_equal(a, b)
108       assert_equal a.id, b.id, "node IDs"
109       assert_equal a.latitude, b.latitude, "latitude on node #{a.id}"
110       assert_equal a.longitude, b.longitude, "longitude on node #{a.id}"
111       assert_equal a.changeset_id, b.changeset_id, "changeset ID on node #{a.id}"
112       assert_equal a.visible, b.visible, "visible on node #{a.id}"
113       assert_equal a.version, b.version, "version on node #{a.id}"
114       assert_equal a.tags, b.tags, "tags on node #{a.id}"
115     end
116
117     def basic_authorization(user, pass)
118       @request.env["HTTP_AUTHORIZATION"] = "Basic %s" % Base64.encode64("#{user}:#{pass}")
119     end
120
121     def error_format(format)
122       @request.env["HTTP_X_ERROR_FORMAT"] = format
123     end
124
125     def content(c)
126       @request.env["RAW_POST_DATA"] = c.to_s
127     end
128
129     # Used to check that the error header and the forbidden responses are given
130     # when the owner of the changset has their data not marked as public
131     def assert_require_public_data(msg = "Shouldn't be able to use API when the user's data is not public")
132       assert_response :forbidden, msg
133       assert_equal @response.headers["Error"], "You must make your edits public to upload new data", "Wrong error message"
134     end
135
136     # Not sure this is the best response we could give
137     def assert_inactive_user(msg = "an inactive user shouldn't be able to access the API")
138       assert_response :unauthorized, msg
139       # assert_equal @response.headers['Error'], ""
140     end
141
142     def assert_no_missing_translations(msg = "")
143       assert_select "span[class=translation_missing]", false, "Missing translation #{msg}"
144     end
145
146     # Set things up for OpenID testing
147     def openid_setup
148       Net::HTTP.get_response(URI.parse("http://localhost:1123/"))
149     rescue
150       # It isn't, so start a new instance.
151       rots = IO.popen("#{Rails.root}/vendor/gems/rots-0.2.1/bin/rots --silent")
152
153       # Wait for up to 30 seconds for the server to start and respond before continuing
154       1.upto(30).each do
155         begin
156           sleep 1
157           Net::HTTP.get_response(URI.parse("http://localhost:1123/"))
158           # If the rescue block doesn't fire, ROTS is up and running and we can continue
159           break
160         rescue
161           # If the connection failed, do nothing and repeat the loop
162           next
163         end
164       end
165
166       # Arrange to kill the process when we exit - note that we need
167       # to kill it really har due to a bug in ROTS
168       Kernel.at_exit do
169         Process.kill("KILL", rots.pid)
170       end
171     end
172
173     def openid_request(openid_request_uri)
174       openid_response = Net::HTTP.get_response(URI.parse(openid_request_uri))
175       openid_response_uri = URI(openid_response["Location"])
176       openid_response_qs = Rack::Utils.parse_query(openid_response_uri.query)
177
178       openid_response_qs
179     end
180
181     # Add more helper methods to be used by all tests here...
182   end
183 end