Merge remote-tracking branch 'upstream/master' into vagrant
[rails.git] / test / integration / user_login_test.rb
1 require 'test_helper'
2
3 class UserLoginTest < ActionDispatch::IntegrationTest
4   fixtures :users
5
6   def setup
7     openid_setup
8   end
9
10   def test_login_email_password_normal
11     user = users(:normal_user)
12
13     get '/login'
14     assert_response :redirect
15     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
16     follow_redirect!
17     assert_response :success
18
19     post '/login', {'username' => user.email, 'password' => "wrong", :referer => "/history"}
20     assert_response :redirect
21     follow_redirect!
22     assert_response :success
23     assert_template 'login'
24
25     post '/login', {'username' => user.email, 'password' => "test", :referer => "/history"}
26     assert_response :redirect
27     follow_redirect!
28     assert_response :success
29     assert_template 'changeset/history'
30   end
31
32   def test_login_email_password_normal_upcase
33     user = users(:normal_user)
34
35     get '/login'
36     assert_response :redirect
37     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
38     follow_redirect!
39     assert_response :success
40
41     post '/login', {'username' => user.email.upcase, 'password' => "wrong", :referer => "/history"}
42     assert_response :redirect
43     follow_redirect!
44     assert_response :success
45     assert_template 'login'
46
47     post '/login', {'username' => user.email.upcase, 'password' => "test", :referer => "/history"}
48     assert_response :redirect
49     follow_redirect!
50     assert_response :success
51     assert_template 'login'
52   end
53
54   def test_login_email_password_normal_titlecase
55     user = users(:normal_user)
56
57     get '/login'
58     assert_response :redirect
59     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
60     follow_redirect!
61     assert_response :success
62
63     post '/login', {'username' => user.email.titlecase, 'password' => "wrong", :referer => "/history"}
64     assert_response :redirect
65     follow_redirect!
66     assert_response :success
67     assert_template 'login'
68
69     post '/login', {'username' => user.email.titlecase, 'password' => "test", :referer => "/history"}
70     assert_response :redirect
71     follow_redirect!
72     assert_response :success
73     assert_template 'login'
74   end
75
76   def test_login_email_password_public
77     user = users(:public_user)
78
79     get '/login'
80     assert_response :redirect
81     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
82     follow_redirect!
83     assert_response :success
84
85     post '/login', {'username' => user.email, 'password' => "wrong", :referer => "/history"}
86     assert_response :redirect
87     follow_redirect!
88     assert_response :success
89     assert_template 'login'
90
91     post '/login', {'username' => user.email, 'password' => "test", :referer => "/history"}
92     assert_response :redirect
93     follow_redirect!
94     assert_response :success
95     assert_template 'changeset/history'
96   end
97
98   def test_login_email_password_public_upcase
99     user = users(:public_user)
100
101     get '/login'
102     assert_response :redirect
103     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
104     follow_redirect!
105     assert_response :success
106
107     post '/login', {'username' => user.email.upcase, 'password' => "wrong", :referer => "/history"}
108     assert_response :redirect
109     follow_redirect!
110     assert_response :success
111     assert_template 'login'
112
113     post '/login', {'username' => user.email.upcase, 'password' => "test", :referer => "/history"}
114     assert_response :redirect
115     follow_redirect!
116     assert_response :success
117     assert_template 'changeset/history'
118   end
119
120   def test_login_email_password_public_titlecase
121     user = users(:public_user)
122
123     get '/login'
124     assert_response :redirect
125     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
126     follow_redirect!
127     assert_response :success
128
129     post '/login', {'username' => user.email.titlecase, 'password' => "wrong", :referer => "/history"}
130     assert_response :redirect
131     follow_redirect!
132     assert_response :success
133     assert_template 'login'
134
135     post '/login', {'username' => user.email.titlecase, 'password' => "test", :referer => "/history"}
136     assert_response :redirect
137     follow_redirect!
138     assert_response :success
139     assert_template 'changeset/history'
140   end
141
142   def test_login_username_password_normal
143     user = users(:normal_user)
144
145     get '/login'
146     assert_response :redirect
147     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
148     follow_redirect!
149     assert_response :success
150
151     post '/login', {'username' => user.display_name, 'password' => "wrong", :referer => "/history"}
152     assert_response :redirect
153     follow_redirect!
154     assert_response :success
155     assert_template 'login'
156
157     post '/login', {'username' => user.display_name, 'password' => "test", :referer => "/history"}
158     assert_response :redirect
159     follow_redirect!
160     assert_response :success
161     assert_template 'changeset/history'
162   end
163
164   def test_login_username_password_normal_upcase
165     user = users(:normal_user)
166
167     get '/login'
168     assert_response :redirect
169     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
170     follow_redirect!
171     assert_response :success
172
173     post '/login', {'username' => user.display_name.upcase, 'password' => "wrong", :referer => "/history"}
174     assert_response :redirect
175     follow_redirect!
176     assert_response :success
177     assert_template 'login'
178
179     post '/login', {'username' => user.display_name.upcase, 'password' => "test", :referer => "/history"}
180     assert_response :redirect
181     follow_redirect!
182     assert_response :success
183     assert_template 'login'
184   end
185
186   def test_login_username_password_normal_titlecase
187     user = users(:normal_user)
188
189     get '/login'
190     assert_response :redirect
191     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
192     follow_redirect!
193     assert_response :success
194
195     post '/login', {'username' => user.display_name.titlecase, 'password' => "wrong", :referer => "/history"}
196     assert_response :redirect
197     follow_redirect!
198     assert_response :success
199     assert_template 'login'
200
201     post '/login', {'username' => user.display_name.titlecase, 'password' => "test", :referer => "/history"}
202     assert_response :redirect
203     follow_redirect!
204     assert_response :success
205     assert_template 'login'
206   end
207
208   def test_login_username_password_public
209     user = users(:public_user)
210
211     get '/login'
212     assert_response :redirect
213     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
214     follow_redirect!
215     assert_response :success
216
217     post '/login', {'username' => user.display_name, 'password' => "wrong", :referer => "/history"}
218     assert_response :redirect
219     follow_redirect!
220     assert_response :success
221     assert_template 'login'
222
223     post '/login', {'username' => user.display_name, 'password' => "test", :referer => "/history"}
224     assert_response :redirect
225     follow_redirect!
226     assert_response :success
227     assert_template 'changeset/history'
228   end
229
230   def test_login_username_password_public_upcase
231     user = users(:public_user)
232
233     get '/login'
234     assert_response :redirect
235     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
236     follow_redirect!
237     assert_response :success
238
239     post '/login', {'username' => user.display_name.upcase, 'password' => "wrong", :referer => "/history"}
240     assert_response :redirect
241     follow_redirect!
242     assert_response :success
243     assert_template 'login'
244
245     post '/login', {'username' => user.display_name.upcase, 'password' => "test", :referer => "/history"}
246     assert_response :redirect
247     follow_redirect!
248     assert_response :success
249     assert_template 'changeset/history'
250   end
251
252   def test_login_username_password_public_titlecase
253     user = users(:public_user)
254
255     get '/login'
256     assert_response :redirect
257     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
258     follow_redirect!
259     assert_response :success
260
261     post '/login', {'username' => user.display_name.titlecase, 'password' => "wrong", :referer => "/history"}
262     assert_response :redirect
263     follow_redirect!
264     assert_response :success
265     assert_template 'login'
266
267     post '/login', {'username' => user.display_name.titlecase, 'password' => "test", :referer => "/history"}
268     assert_response :redirect
269     follow_redirect!
270     assert_response :success
271     assert_template 'changeset/history'
272   end
273
274   def test_login_openid_success
275     get '/login'
276     assert_response :redirect
277     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
278     follow_redirect!
279     assert_response :success
280     post '/login', {'openid_url' => "http://localhost:1123/john.doe?openid.success=true", :referer => "/history"}
281     assert_response :redirect
282
283     res = openid_request(@response.redirect_url)
284     res2 = post '/login', res
285
286     assert_response :redirect
287     follow_redirect!
288     assert_response :success
289     assert_template 'changeset/history'
290   end
291
292   def test_login_openid_cancel
293     get '/login'
294     assert_response :redirect
295     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
296     follow_redirect!
297     assert_response :success
298     post '/login', {'openid_url' => "http://localhost:1123/john.doe", :referer => "/diary"}
299     assert_response :redirect
300
301     res = openid_request(@response.redirect_url)
302     post '/login', res
303
304     assert_response :redirect
305     follow_redirect!
306     assert_response :success
307     assert_template 'login'
308   end
309
310   def test_login_openid_invalid_provider
311     get '/login'
312     assert_response :redirect
313     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
314     follow_redirect!
315     assert_response :success
316     #Use a different port that doesn't have the OpenID provider running on to test an invalid openID
317     post '/login', {'openid_url' => "http://localhost:1124/john.doe", :referer => "/diary"}
318     assert_response :redirect
319     follow_redirect!
320     assert_response :success
321     assert_template 'login'
322   end
323
324   def test_login_openid_invalid_url
325     get '/login'
326     assert_response :redirect
327     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
328     follow_redirect!
329     assert_response :success
330     #Use a url with an invalid protocol to make sure it handles that correctly too
331     post '/login', {'openid_url' => "htt://localhost:1123/john.doe", :referer => "/diary"}
332     assert_response :redirect
333     follow_redirect!
334     assert_response :success
335     assert_template 'login'
336   end
337
338   def test_login_openid_unknown
339     get '/login'
340     assert_response :redirect
341     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true"
342     follow_redirect!
343     assert_response :success
344     post '/login', {'openid_url' => "http://localhost:1123/john.doe?openid.success=true_somethingelse", :referer => "/diary"}
345     assert_response :redirect
346
347     res = openid_request(@response.redirect_url)
348     res2 = post '/login', res
349
350     assert_response :redirect
351     follow_redirect!
352     assert_response :success
353     assert_template 'user/new'
354   end
355 end