]> git.openstreetmap.org Git - rails.git/blob - test/controllers/site_controller_test.rb
Refactor the user list test to use factory-built users and explicit assertions.
[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 => create(:user)
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 = create(:user)
184     user.preferred_editor = "id"
185     user.save!
186
187     get :edit, nil, :user => user
188     assert_response :success
189     assert_template "edit"
190     assert_template :partial => "_id", :count => 1
191
192     user = create(:user)
193     user.preferred_editor = "potlatch2"
194     user.save!
195
196     get :edit, nil, :user => user
197     assert_response :success
198     assert_template "edit"
199     assert_template :partial => "_potlatch2", :count => 1
200
201     user = create(:user)
202     user.preferred_editor = "potlatch"
203     user.save!
204
205     get :edit, nil, :user => user
206     assert_response :success
207     assert_template "edit"
208     assert_template :partial => "_potlatch", :count => 1
209
210     user = create(:user)
211     user.preferred_editor = "remote"
212     user.save!
213
214     get :edit, nil, :user => user
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 => create(:user) }
222     assert_response :success
223     assert_template "edit"
224     assert_template :partial => "_id", :count => 1
225
226     get :edit, { :editor => "potlatch2" }, { :user => create(:user) }
227     assert_response :success
228     assert_template "edit"
229     assert_template :partial => "_potlatch2", :count => 1
230
231     get :edit, { :editor => "potlatch" }, { :user => create(:user) }
232     assert_response :success
233     assert_template "edit"
234     assert_template :partial => "_potlatch", :count => 1
235
236     get :edit, { :editor => "remote" }, { :user => create(:user) }
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 = create(:user)
244     node = create(:node, :lat => 1.0, :lon => 1.0)
245
246     get :edit, { :node => node.id }, { :user => user }
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 = create(:user)
257     node = create(:node, :lat => 3, :lon => 3)
258     way  = create(:way)
259     create(:way_node, :node => node, :way => way)
260
261     get :edit, { :way => way.id }, { :user => user }
262     assert_response :success
263     assert_template "edit"
264     assert_equal 3.0, assigns(:lat)
265     assert_equal 3.0, assigns(:lon)
266     assert_equal 17, assigns(:zoom)
267   end
268
269   # Test editing a specific note
270   def test_edit_with_note
271     user = create(:user)
272     note = create(:note) do |n|
273       n.comments.create(:author_id => user.id)
274     end
275
276     get :edit, { :note => note.id }, { :user => user }
277     assert_response :success
278     assert_template "edit"
279     assert_equal 1.0, assigns(:lat)
280     assert_equal 1.0, assigns(:lon)
281     assert_equal 17, assigns(:zoom)
282   end
283
284   # Test editing a specific GPX trace
285   def test_edit_with_gpx
286     user = create(:user)
287     gpx  = create(:trace, :latitude => 1, :longitude => 1)
288
289     get :edit, { :gpx => gpx.id }, { :user => user }
290     assert_response :success
291     assert_template "edit"
292     assert_equal 1.0, assigns(:lat)
293     assert_equal 1.0, assigns(:lon)
294     assert_equal 16, assigns(:zoom)
295   end
296
297   # Test the edit page redirects
298   def test_edit_redirect
299     get :edit, :lat => 4, :lon => 5
300     assert_redirected_to :controller => :site, :action => :edit, :anchor => "map=5/4/5"
301
302     get :edit, :lat => 4, :lon => 5, :zoom => 3
303     assert_redirected_to :controller => :site, :action => :edit, :anchor => "map=3/4/5"
304
305     get :edit, :lat => 4, :lon => 5, :zoom => 3, :editor => "id"
306     assert_redirected_to :controller => :site, :action => :edit, :editor => "id", :anchor => "map=3/4/5"
307   end
308
309   # Test the copyright page
310   def test_copyright
311     get :copyright
312     assert_response :success
313     assert_template "copyright"
314   end
315
316   # Test the welcome page
317   def test_welcome
318     get :welcome
319     assert_response :redirect
320     assert_redirected_to :controller => :user, :action => :login, :referer => "/welcome"
321
322     get :welcome, nil, :user => create(:user)
323     assert_response :success
324     assert_template "welcome"
325   end
326
327   # Test the fixthemap page
328   def test_fixthemap
329     get :fixthemap
330     assert_response :success
331     assert_template "fixthemap"
332   end
333
334   # Test the help page
335   def test_help
336     get :help
337     assert_response :success
338     assert_template "help"
339   end
340
341   # Test the about page
342   def test_about
343     get :about
344     assert_response :success
345     assert_template "about"
346   end
347
348   # Test the export page
349   def test_export
350     get :export
351     assert_response :success
352     assert_template "export"
353     assert_template :layout => "map"
354
355     xhr :get, :export
356     assert_response :success
357     assert_template "export"
358     assert_template :layout => "xhr"
359   end
360
361   # Test the offline page
362   def test_offline
363     get :offline
364     assert_response :success
365     assert_template "offline"
366   end
367
368   # Test the rich text preview
369   def test_preview
370     xhr :post, :preview, :format => "html"
371     assert_response :success
372
373     xhr :post, :preview, :format => "markdown"
374     assert_response :success
375
376     xhr :post, :preview, :format => "text"
377     assert_response :success
378   end
379
380   # Test the id frame
381   def test_id
382     get :id, nil, :user => create(:user)
383     assert_response :success
384     assert_template "id"
385     assert_template :layout => false
386   end
387 end