Localisation updates from https://translatewiki.net.
[rails.git] / test / controllers / site_controller_test.rb
1 require "test_helper"
2
3 class SiteControllerTest < ActionController::TestCase
4   ##
5   # setup oauth keys
6   def setup
7     super
8
9     Settings.id_key = create(:client_application).key
10     Settings.potlatch2_key = create(:client_application).key
11   end
12
13   ##
14   # clear oauth keys
15   def teardown
16     Settings.id_key = nil
17     Settings.potlatch2_key = nil
18   end
19
20   ##
21   # test all routes which lead to this controller
22   def test_routes
23     assert_routing(
24       { :path => "/", :method => :get },
25       { :controller => "site", :action => "index" }
26     )
27     assert_routing(
28       { :path => "/", :method => :post },
29       { :controller => "site", :action => "index" }
30     )
31     assert_routing(
32       { :path => "/edit", :method => :get },
33       { :controller => "site", :action => "edit" }
34     )
35     assert_recognizes(
36       { :controller => "site", :action => "edit", :format => "html" },
37       { :path => "/edit.html", :method => :get }
38     )
39     assert_routing(
40       { :path => "/copyright", :method => :get },
41       { :controller => "site", :action => "copyright" }
42     )
43     assert_routing(
44       { :path => "/copyright/locale", :method => :get },
45       { :controller => "site", :action => "copyright", :copyright_locale => "locale" }
46     )
47     assert_routing(
48       { :path => "/welcome", :method => :get },
49       { :controller => "site", :action => "welcome" }
50     )
51     assert_routing(
52       { :path => "/fixthemap", :method => :get },
53       { :controller => "site", :action => "fixthemap" }
54     )
55     assert_routing(
56       { :path => "/help", :method => :get },
57       { :controller => "site", :action => "help" }
58     )
59     assert_routing(
60       { :path => "/about", :method => :get },
61       { :controller => "site", :action => "about" }
62     )
63     assert_routing(
64       { :path => "/about/locale", :method => :get },
65       { :controller => "site", :action => "about", :about_locale => "locale" }
66     )
67     assert_routing(
68       { :path => "/export", :method => :get },
69       { :controller => "site", :action => "export" }
70     )
71     assert_recognizes(
72       { :controller => "site", :action => "export", :format => "html" },
73       { :path => "/export.html", :method => :get }
74     )
75     assert_routing(
76       { :path => "/offline", :method => :get },
77       { :controller => "site", :action => "offline" }
78     )
79     assert_routing(
80       { :path => "/key", :method => :get },
81       { :controller => "site", :action => "key" }
82     )
83     assert_routing(
84       { :path => "/go/shortcode", :method => :get },
85       { :controller => "site", :action => "permalink", :code => "shortcode" }
86     )
87     assert_routing(
88       { :path => "/preview/typename", :method => :post },
89       { :controller => "site", :action => "preview", :type => "typename" }
90     )
91     assert_routing(
92       { :path => "/id", :method => :get },
93       { :controller => "site", :action => "id" }
94     )
95   end
96
97   # Test the index page
98   def test_index
99     get :index
100     assert_response :success
101     assert_template "index"
102   end
103
104   # Test the index page redirects
105   def test_index_redirect
106     get :index, :params => { :node => 123 }
107     assert_redirected_to :controller => :browse, :action => :node, :id => 123
108
109     get :index, :params => { :way => 123 }
110     assert_redirected_to :controller => :browse, :action => :way, :id => 123
111
112     get :index, :params => { :relation => 123 }
113     assert_redirected_to :controller => :browse, :action => :relation, :id => 123
114
115     get :index, :params => { :note => 123 }
116     assert_redirected_to :controller => :browse, :action => :note, :id => 123
117
118     get :index, :params => { :query => "test" }
119     assert_redirected_to :controller => :geocoder, :action => :search, :query => "test"
120
121     get :index, :params => { :lat => 4, :lon => 5 }
122     assert_redirected_to :controller => :site, :action => :index, :anchor => "map=5/4/5"
123
124     get :index, :params => { :lat => 4, :lon => 5, :zoom => 3 }
125     assert_redirected_to :controller => :site, :action => :index, :anchor => "map=3/4/5"
126
127     get :index, :params => { :layers => "T" }
128     assert_redirected_to :controller => :site, :action => :index, :anchor => "layers=T"
129
130     get :index, :params => { :notes => "yes" }
131     assert_redirected_to :controller => :site, :action => :index, :anchor => "layers=N"
132
133     get :index, :params => { :lat => 4, :lon => 5, :zoom => 3, :layers => "T" }
134     assert_redirected_to :controller => :site, :action => :index, :anchor => "map=3/4/5&layers=T"
135   end
136
137   # Test the permalink redirect
138   def test_permalink
139     get :permalink, :params => { :code => "wBz3--" }
140     assert_response :redirect
141     assert_redirected_to :controller => :site, :action => :index, :anchor => "map=3/4.8779296875/3.955078125"
142
143     get :permalink, :params => { :code => "wBz3--", :m => "" }
144     assert_response :redirect
145     assert_redirected_to :controller => :site, :action => :index, :mlat => "4.8779296875", :mlon => "3.955078125", :anchor => "map=3/4.8779296875/3.955078125"
146
147     get :permalink, :params => { :code => "wBz3--", :layers => "T" }
148     assert_response :redirect
149     assert_redirected_to :controller => :site, :action => :index, :anchor => "map=3/4.8779296875/3.955078125&layers=T"
150
151     get :permalink, :params => { :code => "wBz3--", :node => 1 }
152     assert_response :redirect
153     assert_redirected_to :controller => :browse, :action => :node, :id => 1, :anchor => "map=3/4.8779296875/3.955078125"
154
155     get :permalink, :params => { :code => "wBz3--", :way => 2 }
156     assert_response :redirect
157     assert_redirected_to :controller => :browse, :action => :way, :id => 2, :anchor => "map=3/4.8779296875/3.955078125"
158
159     get :permalink, :params => { :code => "wBz3--", :relation => 3 }
160     assert_response :redirect
161     assert_redirected_to :controller => :browse, :action => :relation, :id => 3, :anchor => "map=3/4.8779296875/3.955078125"
162
163     get :permalink, :params => { :code => "wBz3--", :changeset => 4 }
164     assert_response :redirect
165     assert_redirected_to :controller => :browse, :action => :changeset, :id => 4, :anchor => "map=3/4.8779296875/3.955078125"
166   end
167
168   # Test the key page
169   def test_key
170     get :key, :xhr => true
171     assert_response :success
172     assert_template "key"
173     assert_template :layout => false
174   end
175
176   # Test the edit page redirects when you aren't logged in
177   def test_edit
178     get :edit
179     assert_response :redirect
180     assert_redirected_to :controller => :users, :action => :login, :referer => "/edit"
181   end
182
183   # Test the error when trying to edit without public edits
184   def test_edit_non_public
185     get :edit, :session => { :user => create(:user, :data_public => false) }
186     assert_response :success
187     assert_template "edit"
188     assert_select "a[href='https://wiki.openstreetmap.org/wiki/Disabling_anonymous_edits']"
189   end
190
191   # Test the right editor gets used when the user hasn't set a preference
192   def test_edit_without_preference
193     get :edit, :session => { :user => create(:user) }
194     assert_response :success
195     assert_template "edit"
196     assert_template :partial => "_#{Settings.default_editor}", :count => 1
197   end
198
199   # Test the right editor gets used when the user has set a preference
200   def test_edit_with_preference
201     user = create(:user)
202     user.preferred_editor = "id"
203     user.save!
204
205     get :edit, :session => { :user => user }
206     assert_response :success
207     assert_template "edit"
208     assert_template :partial => "_id", :count => 1
209
210     user = create(:user)
211     user.preferred_editor = "potlatch2"
212     user.save!
213
214     get :edit, :session => { :user => user }
215     assert_response :success
216     assert_template "edit"
217     assert_template :partial => "_potlatch2", :count => 1
218
219     user = create(:user)
220     user.preferred_editor = "potlatch"
221     user.save!
222
223     get :edit, :session => { :user => user }
224     assert_response :success
225     assert_template "edit"
226     assert_template :partial => "_potlatch", :count => 1
227
228     user = create(:user)
229     user.preferred_editor = "remote"
230     user.save!
231
232     get :edit, :session => { :user => user }
233     assert_response :success
234     assert_template "index"
235   end
236
237   # Test the right editor gets used when the URL has an override
238   def test_edit_with_override
239     get :edit, :params => { :editor => "id" }, :session => { :user => create(:user) }
240     assert_response :success
241     assert_template "edit"
242     assert_template :partial => "_id", :count => 1
243
244     get :edit, :params => { :editor => "potlatch2" }, :session => { :user => create(:user) }
245     assert_response :success
246     assert_template "edit"
247     assert_template :partial => "_potlatch2", :count => 1
248
249     get :edit, :params => { :editor => "potlatch" }, :session => { :user => create(:user) }
250     assert_response :success
251     assert_template "edit"
252     assert_template :partial => "_potlatch", :count => 1
253
254     get :edit, :params => { :editor => "remote" }, :session => { :user => create(:user) }
255     assert_response :success
256     assert_template "index"
257   end
258
259   # Test editing a specific node
260   def test_edit_with_node
261     user = create(:user)
262     node = create(:node, :lat => 1.0, :lon => 1.0)
263
264     get :edit, :params => { :node => node.id }, :session => { :user => user }
265     assert_response :success
266     assert_template "edit"
267     assert_equal 1.0, assigns(:lat)
268     assert_equal 1.0, assigns(:lon)
269     assert_equal 18, assigns(:zoom)
270   end
271
272   # Test editing inaccessible nodes
273   def test_edit_with_inaccessible_nodes
274     user = create(:user)
275     deleted_node = create(:node, :lat => 1.0, :lon => 1.0, :visible => false)
276
277     get :edit, :params => { :node => 99999 }, :session => { :user => user }
278     assert_response :success
279     assert_template "edit"
280     assert_nil assigns(:lat)
281     assert_nil assigns(:lon)
282     assert_nil assigns(:zoom)
283
284     get :edit, :params => { :node => deleted_node.id }, :session => { :user => user }
285     assert_response :success
286     assert_template "edit"
287     assert_nil assigns(:lat)
288     assert_nil assigns(:lon)
289     assert_nil assigns(:zoom)
290   end
291
292   # Test editing a specific way
293   def test_edit_with_way
294     user = create(:user)
295     node = create(:node, :lat => 3, :lon => 3)
296     way = create(:way)
297     create(:way_node, :node => node, :way => way)
298
299     get :edit, :params => { :way => way.id }, :session => { :user => user }
300     assert_response :success
301     assert_template "edit"
302     assert_equal 3.0, assigns(:lat)
303     assert_equal 3.0, assigns(:lon)
304     assert_equal 17, assigns(:zoom)
305   end
306
307   # Test editing inaccessible ways
308   def test_edit_with_inaccessible_ways
309     user = create(:user)
310     deleted_way = create(:way, :visible => false)
311
312     get :edit, :params => { :way => 99999 }, :session => { :user => user }
313     assert_response :success
314     assert_template "edit"
315     assert_nil assigns(:lat)
316     assert_nil assigns(:lon)
317     assert_nil assigns(:zoom)
318
319     get :edit, :params => { :way => deleted_way.id }, :session => { :user => user }
320     assert_response :success
321     assert_template "edit"
322     assert_nil assigns(:lat)
323     assert_nil assigns(:lon)
324     assert_nil assigns(:zoom)
325   end
326
327   # Test editing a specific note
328   def test_edit_with_note
329     user = create(:user)
330     note = create(:note) do |n|
331       n.comments.create(:author_id => user.id)
332     end
333
334     get :edit, :params => { :note => note.id }, :session => { :user => user }
335     assert_response :success
336     assert_template "edit"
337     assert_equal 1.0, assigns(:lat)
338     assert_equal 1.0, assigns(:lon)
339     assert_equal 17, assigns(:zoom)
340   end
341
342   # Test editing inaccessible notes
343   def test_edit_with_inaccessible_notes
344     user = create(:user)
345     deleted_note = create(:note, :status => "hidden") do |n|
346       n.comments.create(:author_id => user.id)
347     end
348
349     get :edit, :params => { :note => 99999 }, :session => { :user => user }
350     assert_response :success
351     assert_template "edit"
352     assert_nil assigns(:lat)
353     assert_nil assigns(:lon)
354     assert_nil assigns(:zoom)
355
356     get :edit, :params => { :note => deleted_note.id }, :session => { :user => user }
357     assert_response :success
358     assert_template "edit"
359     assert_nil assigns(:lat)
360     assert_nil assigns(:lon)
361     assert_nil assigns(:zoom)
362   end
363
364   # Test editing a specific GPX trace
365   def test_edit_with_gpx
366     user = create(:user)
367     gpx = create(:trace, :latitude => 1, :longitude => 1)
368
369     get :edit, :params => { :gpx => gpx.id }, :session => { :user => user }
370     assert_response :success
371     assert_template "edit"
372     assert_equal 1.0, assigns(:lat)
373     assert_equal 1.0, assigns(:lon)
374     assert_equal 16, assigns(:zoom)
375   end
376
377   # Test editing inaccessible GPX traces
378   def test_edit_with_inaccessible_gpxes
379     user = create(:user)
380     deleted_gpx = create(:trace, :deleted, :latitude => 1, :longitude => 1)
381     private_gpx = create(:trace, :latitude => 1, :longitude => 1, :visibility => "private")
382
383     get :edit, :params => { :gpx => 99999 }, :session => { :user => user }
384     assert_response :success
385     assert_template "edit"
386     assert_nil assigns(:lat)
387     assert_nil assigns(:lon)
388     assert_nil assigns(:zoom)
389
390     get :edit, :params => { :gpx => deleted_gpx.id }, :session => { :user => user }
391     assert_response :success
392     assert_template "edit"
393     assert_nil assigns(:lat)
394     assert_nil assigns(:lon)
395     assert_nil assigns(:zoom)
396
397     get :edit, :params => { :gpx => private_gpx.id }, :session => { :user => user }
398     assert_response :success
399     assert_template "edit"
400     assert_nil assigns(:lat)
401     assert_nil assigns(:lon)
402     assert_nil assigns(:zoom)
403   end
404
405   # Test the edit page redirects
406   def test_edit_redirect
407     get :edit, :params => { :lat => 4, :lon => 5 }
408     assert_redirected_to :controller => :site, :action => :edit, :anchor => "map=5/4/5"
409
410     get :edit, :params => { :lat => 4, :lon => 5, :zoom => 3 }
411     assert_redirected_to :controller => :site, :action => :edit, :anchor => "map=3/4/5"
412
413     get :edit, :params => { :lat => 4, :lon => 5, :zoom => 3, :editor => "id" }
414     assert_redirected_to :controller => :site, :action => :edit, :editor => "id", :anchor => "map=3/4/5"
415   end
416
417   # Test the copyright page
418   def test_copyright
419     get :copyright
420     assert_response :success
421     assert_template "copyright"
422     assert_select "div[lang='en'][dir='ltr']"
423
424     get :copyright, :params => { :copyright_locale => "fr" }
425     assert_response :success
426     assert_template "copyright"
427     assert_select "div[lang='fr'][dir='ltr']"
428
429     get :copyright, :params => { :copyright_locale => "ar" }
430     assert_response :success
431     assert_template "copyright"
432     assert_select "div[lang='ar'][dir='rtl']"
433   end
434
435   # Test the welcome page
436   def test_welcome
437     get :welcome
438     assert_response :redirect
439     assert_redirected_to :controller => :users, :action => :login, :referer => "/welcome"
440
441     get :welcome, :session => { :user => create(:user) }
442     assert_response :success
443     assert_template "welcome"
444   end
445
446   # Test the fixthemap page
447   def test_fixthemap
448     get :fixthemap
449     assert_response :success
450     assert_template "fixthemap"
451   end
452
453   # Test the help page
454   def test_help
455     get :help
456     assert_response :success
457     assert_template "help"
458   end
459
460   # Test the about page
461   def test_about
462     get :about
463     assert_response :success
464     assert_template "about"
465     assert_select "div[lang='en'][dir='ltr']"
466
467     get :about, :params => { :about_locale => "fr" }
468     assert_response :success
469     assert_template "about"
470     assert_select "div[lang='fr'][dir='ltr']"
471
472     get :about, :params => { :about_locale => "ar" }
473     assert_response :success
474     assert_template "about"
475     assert_select "div[lang='ar'][dir='rtl']"
476   end
477
478   # Test the export page
479   def test_export
480     get :export
481     assert_response :success
482     assert_template "export"
483     assert_template :layout => "map"
484
485     get :export, :xhr => true
486     assert_response :success
487     assert_template "export"
488     assert_template :layout => "xhr"
489   end
490
491   # Test the offline page
492   def test_offline
493     get :offline
494     assert_response :success
495     assert_template "offline"
496   end
497
498   # Test the rich text preview
499   def test_preview
500     post :preview, :xhr => true, :params => { :type => "html" }
501     assert_response :success
502
503     post :preview, :xhr => true, :params => { :type => "markdown" }
504     assert_response :success
505
506     post :preview, :xhr => true, :params => { :type => "text" }
507     assert_response :success
508   end
509
510   # Test the id frame
511   def test_id
512     get :id, :session => { :user => create(:user) }
513     assert_response :success
514     assert_template "id"
515     assert_template :layout => false
516   end
517 end