131742a275022ae959b5f092a64b56ee5a3bea44
[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     OmniAuth.config.test_mode = true
8   end
9
10   def teardown
11     OmniAuth.config.mock_auth[:openid] = nil
12     OmniAuth.config.test_mode = false
13   end
14
15   def test_login_email_password_normal
16     user = users(:normal_user)
17
18     get "/login"
19     assert_response :redirect
20     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
21     follow_redirect!
22     assert_response :success
23
24     post "/login", :username => user.email, :password => "wrong", :referer => "/history"
25     assert_response :redirect
26     follow_redirect!
27     assert_response :success
28     assert_template "login"
29
30     post "/login", :username => user.email, :password => "test", :referer => "/history"
31     assert_response :redirect
32     follow_redirect!
33     assert_response :success
34     assert_template "changeset/history"
35     assert_select "span.username", "test"
36   end
37
38   def test_login_email_password_normal_upcase
39     user = users(:normal_user)
40
41     get "/login"
42     assert_response :redirect
43     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
44     follow_redirect!
45     assert_response :success
46
47     post "/login", :username => user.email.upcase, :password => "wrong", :referer => "/history"
48     assert_response :redirect
49     follow_redirect!
50     assert_response :success
51     assert_template "login"
52
53     post "/login", :username => user.email.upcase, :password => "test", :referer => "/history"
54     assert_response :redirect
55     follow_redirect!
56     assert_response :success
57     assert_template "changeset/history"
58     assert_select "span.username", "TEST"
59   end
60
61   def test_login_email_password_normal_titlecase
62     user = users(:normal_user)
63
64     get "/login"
65     assert_response :redirect
66     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
67     follow_redirect!
68     assert_response :success
69
70     post "/login", :username => user.email.titlecase, :password => "wrong", :referer => "/history"
71     assert_response :redirect
72     follow_redirect!
73     assert_response :success
74     assert_template "login"
75
76     post "/login", :username => user.email.titlecase, :password => "test", :referer => "/history"
77     assert_response :redirect
78     follow_redirect!
79     assert_response :success
80     assert_template "login"
81     assert_select "span.username", false
82   end
83
84   def test_login_email_password_public
85     user = users(:public_user)
86
87     get "/login"
88     assert_response :redirect
89     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
90     follow_redirect!
91     assert_response :success
92
93     post "/login", :username => user.email, :password => "wrong", :referer => "/history"
94     assert_response :redirect
95     follow_redirect!
96     assert_response :success
97     assert_template "login"
98
99     post "/login", :username => user.email, :password => "test", :referer => "/history"
100     assert_response :redirect
101     follow_redirect!
102     assert_response :success
103     assert_template "changeset/history"
104     assert_select "span.username", "test2"
105   end
106
107   def test_login_email_password_public_upcase
108     user = users(:public_user)
109
110     get "/login"
111     assert_response :redirect
112     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
113     follow_redirect!
114     assert_response :success
115
116     post "/login", :username => user.email.upcase, :password => "wrong", :referer => "/history"
117     assert_response :redirect
118     follow_redirect!
119     assert_response :success
120     assert_template "login"
121
122     post "/login", :username => user.email.upcase, :password => "test", :referer => "/history"
123     assert_response :redirect
124     follow_redirect!
125     assert_response :success
126     assert_template "changeset/history"
127     assert_select "span.username", "test2"
128   end
129
130   def test_login_email_password_public_titlecase
131     user = users(:public_user)
132
133     get "/login"
134     assert_response :redirect
135     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
136     follow_redirect!
137     assert_response :success
138
139     post "/login", :username => user.email.titlecase, :password => "wrong", :referer => "/history"
140     assert_response :redirect
141     follow_redirect!
142     assert_response :success
143     assert_template "login"
144
145     post "/login", :username => user.email.titlecase, :password => "test", :referer => "/history"
146     assert_response :redirect
147     follow_redirect!
148     assert_response :success
149     assert_template "changeset/history"
150     assert_select "span.username", "test2"
151   end
152
153   def test_login_email_password_inactive
154     user = users(:inactive_user)
155
156     get "/login"
157     assert_response :redirect
158     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
159     follow_redirect!
160     assert_response :success
161
162     post "/login", :username => user.email, :password => "wrong", :referer => "/history"
163     assert_response :redirect
164     follow_redirect!
165     assert_response :success
166     assert_template "login"
167
168     post "/login", :username => user.email, :password => "test2", :referer => "/history"
169     assert_response :redirect
170     follow_redirect!
171     assert_response :success
172     assert_template "confirm"
173   end
174
175   def test_login_email_password_inactive_upcase
176     user = users(:inactive_user)
177
178     get "/login"
179     assert_response :redirect
180     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
181     follow_redirect!
182     assert_response :success
183
184     post "/login", :username => user.email.upcase, :password => "wrong", :referer => "/history"
185     assert_response :redirect
186     follow_redirect!
187     assert_response :success
188     assert_template "login"
189
190     post "/login", :username => user.email.upcase, :password => "test2", :referer => "/history"
191     assert_response :redirect
192     follow_redirect!
193     assert_response :success
194     assert_template "confirm"
195   end
196
197   def test_login_email_password_inactive_titlecase
198     user = users(:inactive_user)
199
200     get "/login"
201     assert_response :redirect
202     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
203     follow_redirect!
204     assert_response :success
205
206     post "/login", :username => user.email.titlecase, :password => "wrong", :referer => "/history"
207     assert_response :redirect
208     follow_redirect!
209     assert_response :success
210     assert_template "login"
211
212     post "/login", :username => user.email.titlecase, :password => "test2", :referer => "/history"
213     assert_response :redirect
214     follow_redirect!
215     assert_response :success
216     assert_template "confirm"
217   end
218
219   def test_login_email_password_suspended
220     user = users(:suspended_user)
221
222     get "/login"
223     assert_response :redirect
224     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
225     follow_redirect!
226     assert_response :success
227
228     post "/login", :username => user.email, :password => "wrong", :referer => "/history"
229     assert_response :redirect
230     follow_redirect!
231     assert_response :success
232     assert_template "login"
233
234     post "/login", :username => user.email, :password => "test", :referer => "/history"
235     assert_response :redirect
236     follow_redirect!
237     assert_response :success
238     assert_template "login"
239     assert_select "div.flash.error", /your account has been suspended/
240   end
241
242   def test_login_email_password_suspended_upcase
243     user = users(:suspended_user)
244
245     get "/login"
246     assert_response :redirect
247     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
248     follow_redirect!
249     assert_response :success
250
251     post "/login", :username => user.email.upcase, :password => "wrong", :referer => "/history"
252     assert_response :redirect
253     follow_redirect!
254     assert_response :success
255     assert_template "login"
256
257     post "/login", :username => user.email.upcase, :password => "test", :referer => "/history"
258     assert_response :redirect
259     follow_redirect!
260     assert_response :success
261     assert_template "login"
262     assert_select "div.flash.error", /your account has been suspended/
263   end
264
265   def test_login_email_password_suspended_titlecase
266     user = users(:suspended_user)
267
268     get "/login"
269     assert_response :redirect
270     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
271     follow_redirect!
272     assert_response :success
273
274     post "/login", :username => user.email.titlecase, :password => "wrong", :referer => "/history"
275     assert_response :redirect
276     follow_redirect!
277     assert_response :success
278     assert_template "login"
279
280     post "/login", :username => user.email.titlecase, :password => "test", :referer => "/history"
281     assert_response :redirect
282     follow_redirect!
283     assert_response :success
284     assert_template "login"
285     assert_select "div.flash.error", /your account has been suspended/
286   end
287
288   def test_login_username_password_normal
289     user = users(:normal_user)
290
291     get "/login"
292     assert_response :redirect
293     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
294     follow_redirect!
295     assert_response :success
296
297     post "/login", :username => user.display_name, :password => "wrong", :referer => "/history"
298     assert_response :redirect
299     follow_redirect!
300     assert_response :success
301     assert_template "login"
302
303     post "/login", :username => user.display_name, :password => "test", :referer => "/history"
304     assert_response :redirect
305     follow_redirect!
306     assert_response :success
307     assert_template "changeset/history"
308     assert_select "span.username", "test"
309   end
310
311   def test_login_username_password_normal_upcase
312     user = users(:normal_user)
313
314     get "/login"
315     assert_response :redirect
316     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
317     follow_redirect!
318     assert_response :success
319
320     post "/login", :username => user.display_name.upcase, :password => "wrong", :referer => "/history"
321     assert_response :redirect
322     follow_redirect!
323     assert_response :success
324     assert_template "login"
325
326     post "/login", :username => user.display_name.upcase, :password => "test", :referer => "/history"
327     assert_response :redirect
328     follow_redirect!
329     assert_response :success
330     assert_template "changeset/history"
331     assert_select "span.username", "TEST"
332   end
333
334   def test_login_username_password_normal_titlecase
335     user = users(:normal_user)
336
337     get "/login"
338     assert_response :redirect
339     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
340     follow_redirect!
341     assert_response :success
342
343     post "/login", :username => user.display_name.titlecase, :password => "wrong", :referer => "/history"
344     assert_response :redirect
345     follow_redirect!
346     assert_response :success
347     assert_template "login"
348
349     post "/login", :username => user.display_name.titlecase, :password => "test", :referer => "/history"
350     assert_response :redirect
351     follow_redirect!
352     assert_response :success
353     assert_template "login"
354     assert_select "span.username", false
355   end
356
357   def test_login_username_password_public
358     user = users(:public_user)
359
360     get "/login"
361     assert_response :redirect
362     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
363     follow_redirect!
364     assert_response :success
365
366     post "/login", :username => user.display_name, :password => "wrong", :referer => "/history"
367     assert_response :redirect
368     follow_redirect!
369     assert_response :success
370     assert_template "login"
371
372     post "/login", :username => user.display_name, :password => "test", :referer => "/history"
373     assert_response :redirect
374     follow_redirect!
375     assert_response :success
376     assert_template "changeset/history"
377     assert_select "span.username", "test2"
378   end
379
380   def test_login_username_password_public_upcase
381     user = users(:public_user)
382
383     get "/login"
384     assert_response :redirect
385     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
386     follow_redirect!
387     assert_response :success
388
389     post "/login", :username => user.display_name.upcase, :password => "wrong", :referer => "/history"
390     assert_response :redirect
391     follow_redirect!
392     assert_response :success
393     assert_template "login"
394
395     post "/login", :username => user.display_name.upcase, :password => "test", :referer => "/history"
396     assert_response :redirect
397     follow_redirect!
398     assert_response :success
399     assert_template "changeset/history"
400     assert_select "span.username", "test2"
401   end
402
403   def test_login_username_password_public_titlecase
404     user = users(:public_user)
405
406     get "/login"
407     assert_response :redirect
408     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
409     follow_redirect!
410     assert_response :success
411
412     post "/login", :username => user.display_name.titlecase, :password => "wrong", :referer => "/history"
413     assert_response :redirect
414     follow_redirect!
415     assert_response :success
416     assert_template "login"
417
418     post "/login", :username => user.display_name.titlecase, :password => "test", :referer => "/history"
419     assert_response :redirect
420     follow_redirect!
421     assert_response :success
422     assert_template "changeset/history"
423     assert_select "span.username", "test2"
424   end
425
426   def test_login_username_password_inactive
427     user = users(:inactive_user)
428
429     get "/login"
430     assert_response :redirect
431     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
432     follow_redirect!
433     assert_response :success
434
435     post "/login", :username => user.display_name, :password => "wrong", :referer => "/history"
436     assert_response :redirect
437     follow_redirect!
438     assert_response :success
439     assert_template "login"
440
441     post "/login", :username => user.display_name, :password => "test2", :referer => "/history"
442     assert_response :redirect
443     follow_redirect!
444     assert_response :success
445     assert_template "confirm"
446   end
447
448   def test_login_username_password_inactive_upcase
449     user = users(:inactive_user)
450
451     get "/login"
452     assert_response :redirect
453     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
454     follow_redirect!
455     assert_response :success
456
457     post "/login", :username => user.display_name.upcase, :password => "wrong", :referer => "/history"
458     assert_response :redirect
459     follow_redirect!
460     assert_response :success
461     assert_template "login"
462
463     post "/login", :username => user.display_name.upcase, :password => "test2", :referer => "/history"
464     assert_response :redirect
465     follow_redirect!
466     assert_response :success
467     assert_template "confirm"
468   end
469
470   def test_login_username_password_inactive_titlecase
471     user = users(:inactive_user)
472
473     get "/login"
474     assert_response :redirect
475     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
476     follow_redirect!
477     assert_response :success
478
479     post "/login", :username => user.display_name.titlecase, :password => "wrong", :referer => "/history"
480     assert_response :redirect
481     follow_redirect!
482     assert_response :success
483     assert_template "login"
484
485     post "/login", :username => user.display_name.titlecase, :password => "test2", :referer => "/history"
486     assert_response :redirect
487     follow_redirect!
488     assert_response :success
489     assert_template "confirm"
490   end
491
492   def test_login_username_password_suspended
493     user = users(:suspended_user)
494
495     get "/login"
496     assert_response :redirect
497     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
498     follow_redirect!
499     assert_response :success
500
501     post "/login", :username => user.display_name, :password => "wrong", :referer => "/history"
502     assert_response :redirect
503     follow_redirect!
504     assert_response :success
505     assert_template "login"
506
507     post "/login", :username => user.display_name, :password => "test", :referer => "/history"
508     assert_response :redirect
509     follow_redirect!
510     assert_response :success
511     assert_template "login"
512     assert_select "div.flash.error", /your account has been suspended/
513   end
514
515   def test_login_username_password_suspended_upcase
516     user = users(:suspended_user)
517
518     get "/login"
519     assert_response :redirect
520     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
521     follow_redirect!
522     assert_response :success
523
524     post "/login", :username => user.display_name.upcase, :password => "wrong", :referer => "/history"
525     assert_response :redirect
526     follow_redirect!
527     assert_response :success
528     assert_template "login"
529
530     post "/login", :username => user.display_name.upcase, :password => "test", :referer => "/history"
531     assert_response :redirect
532     follow_redirect!
533     assert_response :success
534     assert_template "login"
535     assert_select "div.flash.error", /your account has been suspended/
536   end
537
538   def test_login_username_password_suspended_titlecase
539     user = users(:suspended_user)
540
541     get "/login"
542     assert_response :redirect
543     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
544     follow_redirect!
545     assert_response :success
546
547     post "/login", :username => user.display_name.titlecase, :password => "wrong", :referer => "/history"
548     assert_response :redirect
549     follow_redirect!
550     assert_response :success
551     assert_template "login"
552
553     post "/login", :username => user.display_name.titlecase, :password => "test", :referer => "/history"
554     assert_response :redirect
555     follow_redirect!
556     assert_response :success
557     assert_template "login"
558     assert_select "div.flash.error", /your account has been suspended/
559   end
560
561   def test_login_email_password_remember_me
562     user = users(:normal_user)
563
564     get "/login"
565     assert_response :redirect
566     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
567     follow_redirect!
568     assert_response :success
569
570     post "/login", :username => user.email, :password => "test", :remember_me => true, :referer => "/history"
571     assert_response :redirect
572     follow_redirect!
573     assert_response :success
574     assert_template "changeset/history"
575     assert_select "span.username", "test"
576     assert session.key?(:_remember_for)
577   end
578
579   def test_login_username_password_remember_me
580     user = users(:normal_user)
581
582     get "/login"
583     assert_response :redirect
584     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
585     follow_redirect!
586     assert_response :success
587
588     post "/login", :username => user.display_name, :password => "test", :remember_me => true, :referer => "/history"
589     assert_response :redirect
590     follow_redirect!
591     assert_response :success
592     assert_template "changeset/history"
593     assert_select "span.username", "test"
594     assert session.key?(:_remember_for)
595   end
596
597   def test_login_openid_success
598     OmniAuth.config.add_mock(:openid, :uid => "http://localhost:1123/john.doe")
599
600     get "/login"
601     assert_response :redirect
602     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
603     follow_redirect!
604     assert_response :success
605     post "/login", :openid_url => "http://localhost:1123/john.doe", :referer => "/history"
606     assert_response :redirect
607     assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login")
608     follow_redirect!
609     assert_response :redirect
610     assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login")
611     follow_redirect!
612     assert_response :redirect
613     follow_redirect!
614     assert_response :success
615     assert_template "changeset/history"
616     assert_select "span.username", "openIDuser"
617   end
618
619   def test_login_openid_remember_me
620     OmniAuth.config.add_mock(:openid, :uid => "http://localhost:1123/john.doe")
621
622     get "/login"
623     assert_response :redirect
624     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
625     follow_redirect!
626     assert_response :success
627     post "/login", :openid_url => "http://localhost:1123/john.doe", :remember_me_openid => true, :referer => "/history"
628     assert_response :redirect
629     assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login")
630     follow_redirect!
631     assert_response :redirect
632     assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login")
633     follow_redirect!
634     assert_response :redirect
635     follow_redirect!
636     assert_response :success
637     assert_template "changeset/history"
638     assert_select "span.username", "openIDuser"
639     assert session.key?(:_remember_for)
640   end
641
642   def test_login_openid_connection_failed
643     OmniAuth.config.mock_auth[:openid] = :connection_failed
644
645     get "/login"
646     assert_response :redirect
647     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
648     follow_redirect!
649     assert_response :success
650     post "/login", :openid_url => "http://localhost:1123/john.doe", :referer => "/history"
651     assert_response :redirect
652     assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login")
653     follow_redirect!
654     assert_response :redirect
655     assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login")
656     follow_redirect!
657     assert_response :redirect
658     assert_redirected_to auth_failure_path(:strategy => "openid", :message => "connection_failed", :origin => "/login")
659     follow_redirect!
660     assert_response :redirect
661     follow_redirect!
662     assert_response :success
663     assert_template "login"
664     assert_select "div.flash.error", "Connection to authentication provider failed"
665     assert_select "span.username", false
666   end
667
668   def test_login_openid_invalid_credentials
669     OmniAuth.config.mock_auth[:openid] = :invalid_credentials
670
671     get "/login"
672     assert_response :redirect
673     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
674     follow_redirect!
675     assert_response :success
676     post "/login", :openid_url => "http://localhost:1123/john.doe", :referer => "/history"
677     assert_response :redirect
678     assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login")
679     follow_redirect!
680     assert_response :redirect
681     assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login")
682     follow_redirect!
683     assert_response :redirect
684     assert_redirected_to auth_failure_path(:strategy => "openid", :message => "invalid_credentials", :origin => "/login")
685     follow_redirect!
686     assert_response :redirect
687     follow_redirect!
688     assert_response :success
689     assert_template "login"
690     assert_select "div.flash.error", "Invalid authentication credentials"
691     assert_select "span.username", false
692   end
693
694   def test_login_openid_unknown
695     OmniAuth.config.add_mock(:openid, :uid => "http://localhost:1123/fred.bloggs")
696
697     get "/login"
698     assert_response :redirect
699     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
700     follow_redirect!
701     assert_response :success
702     post "/login", :openid_url => "http://localhost:1123/fred.bloggs", :referer => "/diary"
703     assert_response :redirect
704     assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/fred.bloggs", :origin => "/login")
705     follow_redirect!
706     assert_response :redirect
707     assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/fred.bloggs", :origin => "/login")
708     follow_redirect!
709     assert_response :redirect
710     follow_redirect!
711     assert_response :success
712     assert_template "user/new"
713     assert_select "span.username", false
714   end
715 end