Merge remote-tracking branch 'openstreetmap/pull/1347' into master
[rails.git] / test / controllers / site_controller_test.rb
1 require "test_helper"
2
3 class SiteControllerTest < ActionController::TestCase
4   api_fixtures
5
6   ##
7   # setup oauth keys
8   def setup
9     Object.const_set("ID_KEY", create(:client_application).key)
10     Object.const_set("POTLATCH2_KEY", create(:client_application).key)
11
12     stub_hostip_requests
13   end
14
15   ##
16   # clear oauth keys
17   def teardown
18     Object.send("remove_const", "ID_KEY")
19     Object.send("remove_const", "POTLATCH2_KEY")
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/formatname", :method => :post },
79       { :controller => "site", :action => "preview", :format => "formatname" }
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, :node => 123
97     assert_redirected_to :controller => :browse, :action => :node, :id => 123
98
99     get :index, :way => 123
100     assert_redirected_to :controller => :browse, :action => :way, :id => 123
101
102     get :index, :relation => 123
103     assert_redirected_to :controller => :browse, :action => :relation, :id => 123
104
105     get :index, :note => 123
106     assert_redirected_to :controller => :browse, :action => :note, :id => 123
107
108     get :index, :query => "test"
109     assert_redirected_to :controller => :geocoder, :action => :search, :query => "test"
110
111     get :index, :lat => 4, :lon => 5
112     assert_redirected_to :controller => :site, :action => :index, :anchor => "map=5/4/5"
113
114     get :index, :lat => 4, :lon => 5, :zoom => 3
115     assert_redirected_to :controller => :site, :action => :index, :anchor => "map=3/4/5"
116
117     get :index, :layers => "T"
118     assert_redirected_to :controller => :site, :action => :index, :anchor => "layers=T"
119
120     get :index, :notes => "yes"
121     assert_redirected_to :controller => :site, :action => :index, :anchor => "layers=N"
122
123     get :index, :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, :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, :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, :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, :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, :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, :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, :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     xhr :get, :key
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 => :user, :action => :login, :referer => "/edit"
171   end
172
173   # Test the right editor gets used when the user hasn't set a preference
174   def test_edit_without_preference
175     get :edit, nil, :user => users(:public_user).id
176     assert_response :success
177     assert_template "edit"
178     assert_template :partial => "_#{DEFAULT_EDITOR}", :count => 1
179   end
180
181   # Test the right editor gets used when the user has set a preference
182   def test_edit_with_preference
183     user = users(:public_user)
184     user.preferred_editor = "id"
185     user.save!
186
187     get :edit, nil, :user => user.id
188     assert_response :success
189     assert_template "edit"
190     assert_template :partial => "_id", :count => 1
191
192     user = users(:public_user)
193     user.preferred_editor = "potlatch2"
194     user.save!
195
196     get :edit, nil, :user => user.id
197     assert_response :success
198     assert_template "edit"
199     assert_template :partial => "_potlatch2", :count => 1
200
201     user = users(:public_user)
202     user.preferred_editor = "potlatch"
203     user.save!
204
205     get :edit, nil, :user => user.id
206     assert_response :success
207     assert_template "edit"
208     assert_template :partial => "_potlatch", :count => 1
209
210     user = users(:public_user)
211     user.preferred_editor = "remote"
212     user.save!
213
214     get :edit, nil, :user => user.id
215     assert_response :success
216     assert_template "index"
217   end
218
219   # Test the right editor gets used when the URL has an override
220   def test_edit_with_override
221     get :edit, { :editor => "id" }, { :user => users(:public_user).id }
222     assert_response :success
223     assert_template "edit"
224     assert_template :partial => "_id", :count => 1
225
226     get :edit, { :editor => "potlatch2" }, { :user => users(:public_user).id }
227     assert_response :success
228     assert_template "edit"
229     assert_template :partial => "_potlatch2", :count => 1
230
231     get :edit, { :editor => "potlatch" }, { :user => users(:public_user).id }
232     assert_response :success
233     assert_template "edit"
234     assert_template :partial => "_potlatch", :count => 1
235
236     get :edit, { :editor => "remote" }, { :user => users(:public_user).id }
237     assert_response :success
238     assert_template "index"
239   end
240
241   # Test editing a specific node
242   def test_edit_with_node
243     user = users(:public_user)
244     node = current_nodes(:visible_node)
245
246     get :edit, { :node => node.id }, { :user => user.id }
247     assert_response :success
248     assert_template "edit"
249     assert_equal 1.0, assigns(:lat)
250     assert_equal 1.0, assigns(:lon)
251     assert_equal 18, assigns(:zoom)
252   end
253
254   # Test editing a specific way
255   def test_edit_with_way
256     user = users(:public_user)
257     way  = current_ways(:visible_way)
258
259     get :edit, { :way => way.id }, { :user => user.id }
260     assert_response :success
261     assert_template "edit"
262     assert_equal 3.0, assigns(:lat)
263     assert_equal 3.0, assigns(:lon)
264     assert_equal 17, assigns(:zoom)
265   end
266
267   # Test editing a specific note
268   def test_edit_with_note
269     user = users(:public_user)
270     note = create(:note) do |n|
271       n.comments.create(:author_id => user.id)
272     end
273
274     get :edit, { :note => note.id }, { :user => user.id }
275     assert_response :success
276     assert_template "edit"
277     assert_equal 1.0, assigns(:lat)
278     assert_equal 1.0, assigns(:lon)
279     assert_equal 17, assigns(:zoom)
280   end
281
282   # Test editing a specific GPX trace
283   def test_edit_with_gpx
284     user = users(:public_user)
285     gpx  = create(:trace, :latitude => 1, :longitude => 1)
286
287     get :edit, { :gpx => gpx.id }, { :user => user.id }
288     assert_response :success
289     assert_template "edit"
290     assert_equal 1.0, assigns(:lat)
291     assert_equal 1.0, assigns(:lon)
292     assert_equal 16, assigns(:zoom)
293   end
294
295   # Test the edit page redirects
296   def test_edit_redirect
297     get :edit, :lat => 4, :lon => 5
298     assert_redirected_to :controller => :site, :action => :edit, :anchor => "map=5/4/5"
299
300     get :edit, :lat => 4, :lon => 5, :zoom => 3
301     assert_redirected_to :controller => :site, :action => :edit, :anchor => "map=3/4/5"
302
303     get :edit, :lat => 4, :lon => 5, :zoom => 3, :editor => "id"
304     assert_redirected_to :controller => :site, :action => :edit, :editor => "id", :anchor => "map=3/4/5"
305   end
306
307   # Test the copyright page
308   def test_copyright
309     get :copyright
310     assert_response :success
311     assert_template "copyright"
312   end
313
314   # Test the welcome page
315   def test_welcome
316     get :welcome
317     assert_response :redirect
318     assert_redirected_to :controller => :user, :action => :login, :referer => "/welcome"
319
320     get :welcome, nil, :user => users(:public_user).id
321     assert_response :success
322     assert_template "welcome"
323   end
324
325   # Test the fixthemap page
326   def test_fixthemap
327     get :fixthemap
328     assert_response :success
329     assert_template "fixthemap"
330   end
331
332   # Test the help page
333   def test_help
334     get :help
335     assert_response :success
336     assert_template "help"
337   end
338
339   # Test the about page
340   def test_about
341     get :about
342     assert_response :success
343     assert_template "about"
344   end
345
346   # Test the export page
347   def test_export
348     get :export
349     assert_response :success
350     assert_template "export"
351     assert_template :layout => "map"
352
353     xhr :get, :export
354     assert_response :success
355     assert_template "export"
356     assert_template :layout => "xhr"
357   end
358
359   # Test the offline page
360   def test_offline
361     get :offline
362     assert_response :success
363     assert_template "offline"
364   end
365
366   # Test the rich text preview
367   def test_preview
368     xhr :post, :preview, :format => "html"
369     assert_response :success
370
371     xhr :post, :preview, :format => "markdown"
372     assert_response :success
373
374     xhr :post, :preview, :format => "text"
375     assert_response :success
376   end
377
378   # Test the id frame
379   def test_id
380     get :id, nil, :user => users(:public_user).id
381     assert_response :success
382     assert_template "id"
383     assert_template :layout => false
384   end
385 end