]> git.openstreetmap.org Git - rails.git/blob - test/functional/note_controller_test.rb
Update note controller tests for new GeoJSON output
[rails.git] / test / functional / note_controller_test.rb
1 require File.dirname(__FILE__) + '/../test_helper'
2
3 class NoteControllerTest < ActionController::TestCase
4   fixtures :users, :notes, :note_comments
5
6   def test_note_create_success
7     assert_difference('Note.count') do
8       assert_difference('NoteComment.count') do
9         post :create, {:lat => -1.0, :lon => -1.0, :name => "new_tester", :text => "This is a comment"}
10       end
11     end
12     assert_response :success
13     id = @response.body.sub(/ok/,"").to_i
14
15     get :read, {:id => id, :format => 'json'}
16     assert_response :success
17     js = ActiveSupport::JSON.decode(@response.body)
18     assert_not_nil js
19     assert_equal "Feature", js["type"]
20     assert_equal "Point", js["geometry"]["type"]
21     assert_equal [-1.0, -1.0], js["geometry"]["coordinates"]
22     assert_equal id, js["properties"]["id"]
23     assert_equal "open", js["properties"]["status"]
24     assert_equal 1, js["properties"]["comments"].count
25     assert_equal "opened", js["properties"]["comments"].last["action"]
26     assert_equal "This is a comment", js["properties"]["comments"].last["text"]
27     assert_equal "new_tester (a)", js["properties"]["comments"].last["user"]
28   end
29
30   def test_note_create_fail
31     assert_no_difference('Note.count') do
32       assert_no_difference('NoteComment.count') do
33         post :create, {:lon => -1.0, :name => "new_tester", :text => "This is a comment"}
34       end
35     end
36     assert_response :bad_request
37
38     assert_no_difference('Note.count') do
39       assert_no_difference('NoteComment.count') do
40         post :create, {:lat => -1.0, :name => "new_tester", :text => "This is a comment"}
41       end
42     end
43     assert_response :bad_request
44
45     assert_no_difference('Note.count') do
46       assert_no_difference('NoteComment.count') do
47         post :create, {:lat => -1.0, :lon => -1.0, :name => "new_tester"}
48       end
49     end
50     assert_response :bad_request
51
52     assert_no_difference('Note.count') do
53       assert_no_difference('NoteComment.count') do
54         post :create, {:lat => -100.0, :lon => -1.0, :name => "new_tester", :text => "This is a comment"}
55       end
56     end
57     assert_response :bad_request
58
59     assert_no_difference('Note.count') do
60       assert_no_difference('NoteComment.count') do
61         post :create, {:lat => -1.0, :lon => -200.0, :name => "new_tester", :text => "This is a comment"}
62       end
63     end
64     assert_response :bad_request
65   end
66
67   def test_note_comment_create_success
68     assert_difference('NoteComment.count') do
69       post :update, {:id => notes(:open_note_with_comment).id, :name => "new_tester2", :text => "This is an additional comment"}
70     end
71     assert_response :success
72
73     get :read, {:id => notes(:open_note_with_comment).id, :format => 'json'}
74     assert_response :success
75     js = ActiveSupport::JSON.decode(@response.body)
76     assert_not_nil js
77     assert_equal "Feature", js["type"]
78     assert_equal notes(:open_note_with_comment).id, js["properties"]["id"]
79     assert_equal "open", js["properties"]["status"]
80     assert_equal 3, js["properties"]["comments"].count
81     assert_equal "commented", js["properties"]["comments"].last["action"]
82     assert_equal "This is an additional comment", js["properties"]["comments"].last["text"]
83     assert_equal "new_tester2 (a)", js["properties"]["comments"].last["user"]
84   end
85
86   def test_note_comment_create_fail
87     assert_no_difference('NoteComment.count') do
88       post :update, {:name => "new_tester2", :text => "This is an additional comment"}
89     end
90     assert_response :bad_request
91
92     assert_no_difference('NoteComment.count') do
93       post :update, {:id => notes(:open_note_with_comment).id, :name => "new_tester2"}
94     end
95     assert_response :bad_request
96
97     assert_no_difference('NoteComment.count') do
98       post :update, {:id => 12345, :name => "new_tester2", :text => "This is an additional comment"}
99     end
100     assert_response :not_found
101
102     assert_no_difference('NoteComment.count') do
103       post :update, {:id => notes(:hidden_note_with_comment).id, :name => "new_tester2", :text => "This is an additional comment"}
104     end
105     assert_response :gone
106   end
107
108   def test_note_close_success
109     post :close, {:id => notes(:open_note_with_comment).id}
110     assert_response :success
111
112     get :read, {:id => notes(:open_note_with_comment).id, :format => 'json'}
113     assert_response :success
114     js = ActiveSupport::JSON.decode(@response.body)
115     assert_not_nil js
116     assert_equal "Feature", js["type"]
117     assert_equal notes(:open_note_with_comment).id, js["properties"]["id"]
118     assert_equal "closed", js["properties"]["status"]
119     assert_equal 3, js["properties"]["comments"].count
120     assert_equal "closed", js["properties"]["comments"].last["action"]
121     assert_equal nil, js["properties"]["comments"].last["text"]
122     assert_equal "NoName (a)", js["properties"]["comments"].last["user"]
123   end
124
125   def test_note_close_fail
126     post :close
127     assert_response :bad_request
128
129     post :close, {:id => 12345}
130     assert_response :not_found
131
132     post :close, {:id => notes(:hidden_note_with_comment).id}
133     assert_response :gone
134   end
135
136   def test_note_read_success
137 #    get :read, {:id => notes(:open_note).id}
138 #    assert_response :success      
139 #    assert_equal "application/xml", @response.content_type
140
141     get :read, {:id => notes(:open_note).id, :format => "xml"}
142     assert_response :success
143     assert_equal "application/xml", @response.content_type
144
145     get :read, {:id => notes(:open_note).id, :format => "rss"}
146     assert_response :success
147     assert_equal "application/rss+xml", @response.content_type
148
149     get :read, {:id => notes(:open_note).id, :format => "json"}
150     assert_response :success
151     assert_equal "application/json", @response.content_type
152
153     get :read, {:id => notes(:open_note).id, :format => "gpx"}
154     assert_response :success
155     assert_equal "application/gpx+xml", @response.content_type
156   end
157
158   def test_note_read_hidden_comment
159     get :read, {:id => notes(:note_with_hidden_comment).id, :format => 'json'}
160     assert_response :success
161     js = ActiveSupport::JSON.decode(@response.body)
162     assert_not_nil js
163     assert_equal notes(:note_with_hidden_comment).id, js["properties"]["id"]
164     assert_equal 2, js["properties"]["comments"].count
165     assert_equal "Valid comment for note 5", js["properties"]["comments"][0]["text"]
166     assert_equal "Another valid comment for note 5", js["properties"]["comments"][1]["text"]
167   end
168
169   def test_note_read_fail
170     post :read
171     assert_response :bad_request
172
173     get :read, {:id => 12345}
174     assert_response :not_found
175
176     get :read, {:id => notes(:hidden_note_with_comment).id}
177     assert_response :gone
178   end
179
180   def test_note_delete_success
181     delete :delete, {:id => notes(:open_note_with_comment).id}
182     assert_response :success
183
184     get :read, {:id => notes(:open_note_with_comment).id, :format => 'json'}
185     assert_response :gone
186   end
187
188   def test_note_delete_fail
189     delete :delete
190     assert_response :bad_request
191
192     delete :delete, {:id => 12345}
193     assert_response :not_found
194
195     delete :delete, {:id => notes(:hidden_note_with_comment).id}
196     assert_response :gone
197   end
198
199   def test_get_notes_success
200 #    get :list, {:bbox => '1,1,1.2,1.2'}
201 #    assert_response :success
202 #    assert_equal "text/javascript", @response.content_type
203
204     get :list, {:bbox => '1,1,1.2,1.2', :format => 'rss'}
205     assert_response :success
206     assert_equal "application/rss+xml", @response.content_type
207
208     get :list, {:bbox => '1,1,1.2,1.2', :format => 'json'}
209     assert_response :success
210     assert_equal "application/json", @response.content_type
211
212     get :list, {:bbox => '1,1,1.2,1.2', :format => 'xml'}
213     assert_response :success
214     assert_equal "application/xml", @response.content_type
215
216     get :list, {:bbox => '1,1,1.2,1.2', :format => 'gpx'}
217     assert_response :success
218     assert_equal "application/gpx+xml", @response.content_type
219   end
220
221   def test_get_notes_large_area
222 #    get :list, {:bbox => '-2.5,-2.5,2.5,2.5'}
223 #    assert_response :success
224
225 #    get :list, {:l => '-2.5', :b => '-2.5', :r => '2.5', :t => '2.5'}
226 #    assert_response :success
227
228     get :list, {:bbox => '-10,-10,12,12'}
229     assert_response :bad_request
230
231     get :list, {:l => '-10', :b => '-10', :r => '12', :t => '12'}
232     assert_response :bad_request
233   end
234
235   def test_get_notes_closed
236     get :list, {:bbox => '1,1,1.7,1.7', :closed => '7', :format => 'json'}
237     assert_response :success
238     assert_equal "application/json", @response.content_type
239     js = ActiveSupport::JSON.decode(@response.body)
240     assert_not_nil js
241     assert_equal "FeatureCollection", js["type"]
242     assert_equal 4, js["features"].count
243
244     get :list, {:bbox => '1,1,1.7,1.7', :closed => '0', :format => 'json'}
245     assert_response :success
246     assert_equal "application/json", @response.content_type
247     js = ActiveSupport::JSON.decode(@response.body)
248     assert_not_nil js
249     assert_equal "FeatureCollection", js["type"]
250     assert_equal 4, js["features"].count
251
252     get :list, {:bbox => '1,1,1.7,1.7', :closed => '-1', :format => 'json'}
253     assert_response :success
254     assert_equal "application/json", @response.content_type
255     js = ActiveSupport::JSON.decode(@response.body)
256     assert_not_nil js
257     assert_equal "FeatureCollection", js["type"]
258     assert_equal 6, js["features"].count
259   end
260
261   def test_get_notes_bad_params
262     get :list, {:bbox => '-2.5,-2.5,2.5'}
263     assert_response :bad_request
264
265     get :list, {:bbox => '-2.5,-2.5,2.5,2.5,2.5'}
266     assert_response :bad_request
267
268     get :list, {:b => '-2.5', :r => '2.5', :t => '2.5'}
269     assert_response :bad_request
270
271     get :list, {:l => '-2.5', :r => '2.5', :t => '2.5'}
272     assert_response :bad_request
273
274     get :list, {:l => '-2.5', :b => '-2.5', :t => '2.5'}
275     assert_response :bad_request
276
277     get :list, {:l => '-2.5', :b => '-2.5', :r => '2.5'}
278     assert_response :bad_request
279   end
280
281   def test_search_success
282 #    get :search, {:q => 'note 1'}
283 #    assert_response :success
284 #    assert_equal "text/javascript", @response.content_type
285
286     get :search, {:q => 'note 1', :format => 'xml'}
287     assert_response :success
288     assert_equal "application/xml", @response.content_type
289
290     get :search, {:q => 'note 1', :format => 'json'}
291     assert_response :success
292     assert_equal "application/json", @response.content_type
293
294     get :search, {:q => 'note 1', :format => 'rss'}
295     assert_response :success
296     assert_equal "application/rss+xml", @response.content_type
297
298     get :search, {:q => 'note 1', :format => 'gpx'}
299     assert_response :success
300     assert_equal "application/gpx+xml", @response.content_type
301   end
302
303   def test_search_bad_params
304     get :search
305     assert_response :bad_request
306   end
307
308   def test_rss_success
309 #    get :rss
310 #    assert_response :success
311 #    assert_equal "application/rss+xml", @response.content_type
312
313 #    get :rss, {:bbox=>'1,1,1.2,1.2'}
314 #    assert_response :success   
315 #    assert_equal "application/rss+xml", @response.content_type
316   end
317
318   def test_rss_fail
319     get :rss, {:bbox=>'1,1,1.2'}
320     assert_response :bad_request
321
322     get :rss, {:bbox=>'1,1,1.2,1.2,1.2'}
323     assert_response :bad_request
324   end
325
326   def test_user_notes_success
327     get :mine, {:display_name=>'test'}
328     assert_response :success
329
330     get :mine, {:display_name=>'pulibc_test2'}
331     assert_response :success
332
333     get :mine, {:display_name=>'non-existent'}
334     assert_response :not_found  
335   end
336 end