]> git.openstreetmap.org Git - rails.git/blob - test/controllers/site_controller_test.rb
91fb83b670ecfba59dd22ab12fe6e28a819b94ab
[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
12     stub_hostip_requests
13   end
14
15   ##
16   # clear oauth keys
17   def teardown
18     Settings.id_key = nil
19     Settings.potlatch2_key = nil
20   end
21
22   ##
23   # test all routes which lead to this controller
24   def test_routes
25     assert_routing(
26       { :path => "/", :method => :get },
27       { :controller => "site", :action => "index" }
28     )
29     assert_routing(
30       { :path => "/", :method => :post },
31       { :controller => "site", :action => "index" }
32     )
33     assert_routing(
34       { :path => "/edit", :method => :get },
35       { :controller => "site", :action => "edit" }
36     )
37     assert_recognizes(
38       { :controller => "site", :action => "edit", :format => "html" },
39       { :path => "/edit.html", :method => :get }
40     )
41     assert_routing(
42       { :path => "/copyright", :method => :get },
43       { :controller => "site", :action => "copyright" }
44     )
45     assert_routing(
46       { :path => "/copyright/locale", :method => :get },
47       { :controller => "site", :action => "copyright", :copyright_locale => "locale" }
48     )
49     assert_routing(
50       { :path => "/welcome", :method => :get },
51       { :controller => "site", :action => "welcome" }
52     )
53     assert_routing(
54       { :path => "/fixthemap", :method => :get },
55       { :controller => "site", :action => "fixthemap" }
56     )
57     assert_routing(
58       { :path => "/export", :method => :get },
59       { :controller => "site", :action => "export" }
60     )
61     assert_recognizes(
62       { :controller => "site", :action => "export", :format => "html" },
63       { :path => "/export.html", :method => :get }
64     )
65     assert_routing(
66       { :path => "/offline", :method => :get },
67       { :controller => "site", :action => "offline" }
68     )
69     assert_routing(
70       { :path => "/key", :method => :get },
71       { :controller => "site", :action => "key" }
72     )
73     assert_routing(
74       { :path => "/go/shortcode", :method => :get },
75       { :controller => "site", :action => "permalink", :code => "shortcode" }
76     )
77     assert_routing(
78       { :path => "/preview/typename", :method => :post },
79       { :controller => "site", :action => "preview", :type => "typename" }
80     )
81     assert_routing(
82       { :path => "/id", :method => :get },
83       { :controller => "site", :action => "id" }
84     )
85   end
86
87   # Test the index page
88   def test_index
89     get :index
90     assert_response :success
91     assert_template "index"
92   end
93
94   # Test the index page redirects
95   def test_index_redirect
96     get :index, :params => { :node => 123 }
97     assert_redirected_to :controller => :browse, :action => :node, :id => 123
98
99     get :index, :params => { :way => 123 }
100     assert_redirected_to :controller => :browse, :action => :way, :id => 123
101
102     get :index, :params => { :relation => 123 }
103     assert_redirected_to :controller => :browse, :action => :relation, :id => 123
104
105     get :index, :params => { :note => 123 }
106     assert_redirected_to :controller => :browse, :action => :note, :id => 123
107
108     get :index, :params => { :query => "test" }
109     assert_redirected_to :controller => :geocoder, :action => :search, :query => "test"
110
111     get :index, :params => { :lat => 4, :lon => 5 }
112     assert_redirected_to :controller => :site, :action => :index, :anchor => "map=5/4/5"
113
114     get :index, :params => { :lat => 4, :lon => 5, :zoom => 3 }
115     assert_redirected_to :controller => :site, :action => :index, :anchor => "map=3/4/5"
116
117     get :index, :params => { :layers => "T" }
118     assert_redirected_to :controller => :site, :action => :index, :anchor => "layers=T"
119
120     get :index, :params => { :notes => "yes" }
121     assert_redirected_to :controller => :site, :action => :index, :anchor => "layers=N"
122
123     get :index, :params => { :lat => 4, :lon => 5, :zoom => 3, :layers => "T" }
124     assert_redirected_to :controller => :site, :action => :index, :anchor => "map=3/4/5&layers=T"
125   end
126
127   # Test the permalink redirect
128   def test_permalink
129     get :permalink, :params => { :code => "wBz3--" }
130     assert_response :redirect
131     assert_redirected_to :controller => :site, :action => :index, :anchor => "map=3/4.8779296875/3.955078125"
132
133     get :permalink, :params => { :code => "wBz3--", :m => "" }
134     assert_response :redirect
135     assert_redirected_to :controller => :site, :action => :index, :mlat => "4.8779296875", :mlon => "3.955078125", :anchor => "map=3/4.8779296875/3.955078125"
136
137     get :permalink, :params => { :code => "wBz3--", :layers => "T" }
138     assert_response :redirect
139     assert_redirected_to :controller => :site, :action => :index, :anchor => "map=3/4.8779296875/3.955078125&layers=T"
140
141     get :permalink, :params => { :code => "wBz3--", :node => 1 }
142     assert_response :redirect
143     assert_redirected_to :controller => :browse, :action => :node, :id => 1, :anchor => "map=3/4.8779296875/3.955078125"
144
145     get :permalink, :params => { :code => "wBz3--", :way => 2 }
146     assert_response :redirect
147     assert_redirected_to :controller => :browse, :action => :way, :id => 2, :anchor => "map=3/4.8779296875/3.955078125"
148
149     get :permalink, :params => { :code => "wBz3--", :relation => 3 }
150     assert_response :redirect
151     assert_redirected_to :controller => :browse, :action => :relation, :id => 3, :anchor => "map=3/4.8779296875/3.955078125"
152
153     get :permalink, :params => { :code => "wBz3--", :changeset => 4 }
154     assert_response :redirect
155     assert_redirected_to :controller => :browse, :action => :changeset, :id => 4, :anchor => "map=3/4.8779296875/3.955078125"
156   end
157
158   # Test the key page
159   def test_key
160     get :key, :xhr => true
161     assert_response :success
162     assert_template "key"
163     assert_template :layout => false
164   end
165
166   # Test the edit page redirects when you aren't logged in
167   def test_edit
168     get :edit
169     assert_response :redirect
170     assert_redirected_to :controller => :users, :action => :login, :referer => "/edit"
171   end
172
173   # Test the error when trying to edit without public edits
174   def test_edit_non_public
175     get :edit, :session => { :user => create(:user, :data_public => false) }
176     assert_response :success
177     assert_template "edit"
178     assert_select "a[href='https://wiki.openstreetmap.org/wiki/Disabling_anonymous_edits']"
179   end
180
181   # Test the right editor gets used when the user hasn't set a preference
182   def test_edit_without_preference
183     get :edit, :session => { :user => create(:user) }
184     assert_response :success
185     assert_template "edit"
186     assert_template :partial => "_#{Settings.default_editor}", :count => 1
187   end
188
189   # Test the right editor gets used when the user has set a preference
190   def test_edit_with_preference
191     user = create(:user)
192     user.preferred_editor = "id"
193     user.save!
194
195     get :edit, :session => { :user => user }
196     assert_response :success
197     assert_template "edit"
198     assert_template :partial => "_id", :count => 1
199
200     user = create(:user)
201     user.preferred_editor = "potlatch2"
202     user.save!
203
204     get :edit, :session => { :user => user }
205     assert_response :success
206     assert_template "edit"
207     assert_template :partial => "_potlatch2", :count => 1
208
209     user = create(:user)
210     user.preferred_editor = "potlatch"
211     user.save!
212
213     get :edit, :session => { :user => user }
214     assert_response :success
215     assert_template "edit"
216     assert_template :partial => "_potlatch", :count => 1
217
218     user = create(:user)
219     user.preferred_editor = "remote"
220     user.save!
221
222     get :edit, :session => { :user => user }
223     assert_response :success
224     assert_template "index"
225   end
226
227   # Test the right editor gets used when the URL has an override
228   def test_edit_with_override
229     get :edit, :params => { :editor => "id" }, :session => { :user => create(:user) }
230     assert_response :success
231     assert_template "edit"
232     assert_template :partial => "_id", :count => 1
233
234     get :edit, :params => { :editor => "potlatch2" }, :session => { :user => create(:user) }
235     assert_response :success
236     assert_template "edit"
237     assert_template :partial => "_potlatch2", :count => 1
238
239     get :edit, :params => { :editor => "potlatch" }, :session => { :user => create(:user) }
240     assert_response :success
241     assert_template "edit"
242     assert_template :partial => "_potlatch", :count => 1
243
244     get :edit, :params => { :editor => "remote" }, :session => { :user => create(:user) }
245     assert_response :success
246     assert_template "index"
247   end
248
249   # Test editing a specific node
250   def test_edit_with_node
251     user = create(:user)
252     node = create(:node, :lat => 1.0, :lon => 1.0)
253
254     get :edit, :params => { :node => node.id }, :session => { :user => user }
255     assert_response :success
256     assert_template "edit"
257     assert_equal 1.0, assigns(:lat)
258     assert_equal 1.0, assigns(:lon)
259     assert_equal 18, assigns(:zoom)
260   end
261
262   # Test editing a specific way
263   def test_edit_with_way
264     user = create(:user)
265     node = create(:node, :lat => 3, :lon => 3)
266     way  = create(:way)
267     create(:way_node, :node => node, :way => way)
268
269     get :edit, :params => { :way => way.id }, :session => { :user => user }
270     assert_response :success
271     assert_template "edit"
272     assert_equal 3.0, assigns(:lat)
273     assert_equal 3.0, assigns(:lon)
274     assert_equal 17, assigns(:zoom)
275   end
276
277   # Test editing a specific note
278   def test_edit_with_note
279     user = create(:user)
280     note = create(:note) do |n|
281       n.comments.create(:author_id => user.id)
282     end
283
284     get :edit, :params => { :note => note.id }, :session => { :user => user }
285     assert_response :success
286     assert_template "edit"
287     assert_equal 1.0, assigns(:lat)
288     assert_equal 1.0, assigns(:lon)
289     assert_equal 17, assigns(:zoom)
290   end
291
292   # Test editing a specific GPX trace
293   def test_edit_with_gpx
294     user = create(:user)
295     gpx  = create(:trace, :latitude => 1, :longitude => 1)
296
297     get :edit, :params => { :gpx => gpx.id }, :session => { :user => user }
298     assert_response :success
299     assert_template "edit"
300     assert_equal 1.0, assigns(:lat)
301     assert_equal 1.0, assigns(:lon)
302     assert_equal 16, assigns(:zoom)
303   end
304
305   # Test the edit page redirects
306   def test_edit_redirect
307     get :edit, :params => { :lat => 4, :lon => 5 }
308     assert_redirected_to :controller => :site, :action => :edit, :anchor => "map=5/4/5"
309
310     get :edit, :params => { :lat => 4, :lon => 5, :zoom => 3 }
311     assert_redirected_to :controller => :site, :action => :edit, :anchor => "map=3/4/5"
312
313     get :edit, :params => { :lat => 4, :lon => 5, :zoom => 3, :editor => "id" }
314     assert_redirected_to :controller => :site, :action => :edit, :editor => "id", :anchor => "map=3/4/5"
315   end
316
317   # Test the copyright page
318   def test_copyright
319     get :copyright
320     assert_response :success
321     assert_template "copyright"
322   end
323
324   # Test the welcome page
325   def test_welcome
326     get :welcome
327     assert_response :redirect
328     assert_redirected_to :controller => :users, :action => :login, :referer => "/welcome"
329
330     get :welcome, :session => { :user => create(:user) }
331     assert_response :success
332     assert_template "welcome"
333   end
334
335   # Test the fixthemap page
336   def test_fixthemap
337     get :fixthemap
338     assert_response :success
339     assert_template "fixthemap"
340   end
341
342   # Test the help page
343   def test_help
344     get :help
345     assert_response :success
346     assert_template "help"
347   end
348
349   # Test the about page
350   def test_about
351     get :about
352     assert_response :success
353     assert_template "about"
354   end
355
356   # Test the export page
357   def test_export
358     get :export
359     assert_response :success
360     assert_template "export"
361     assert_template :layout => "map"
362
363     get :export, :xhr => true
364     assert_response :success
365     assert_template "export"
366     assert_template :layout => "xhr"
367   end
368
369   # Test the offline page
370   def test_offline
371     get :offline
372     assert_response :success
373     assert_template "offline"
374   end
375
376   # Test the rich text preview
377   def test_preview
378     post :preview, :xhr => true, :params => { :type => "html" }
379     assert_response :success
380
381     post :preview, :xhr => true, :params => { :type => "markdown" }
382     assert_response :success
383
384     post :preview, :xhr => true, :params => { :type => "text" }
385     assert_response :success
386   end
387
388   # Test the id frame
389   def test_id
390     get :id, :session => { :user => create(:user) }
391     assert_response :success
392     assert_template "id"
393     assert_template :layout => false
394   end
395 end