Add support for Facebook authentication
[rails.git] / test / integration / user_login_test.rb
1 require "test_helper"
2
3 class UserLoginTest < ActionDispatch::IntegrationTest
4   fixtures :users, :user_blocks
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.mock_auth[:google] = nil
13     OmniAuth.config.mock_auth[:facebook] = nil
14     OmniAuth.config.test_mode = false
15   end
16
17   def test_login_email_password_normal
18     user = users(:normal_user)
19
20     get "/login"
21     assert_response :redirect
22     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
23     follow_redirect!
24     assert_response :success
25
26     post "/login", :username => user.email, :password => "wrong", :referer => "/history"
27     assert_response :redirect
28     follow_redirect!
29     assert_response :success
30     assert_template "login"
31
32     post "/login", :username => user.email, :password => "test", :referer => "/history"
33     assert_response :redirect
34     follow_redirect!
35     assert_response :success
36     assert_template "changeset/history"
37     assert_select "span.username", "test"
38   end
39
40   def test_login_email_password_normal_upcase
41     user = users(:normal_user)
42
43     get "/login"
44     assert_response :redirect
45     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
46     follow_redirect!
47     assert_response :success
48
49     post "/login", :username => user.email.upcase, :password => "wrong", :referer => "/history"
50     assert_response :redirect
51     follow_redirect!
52     assert_response :success
53     assert_template "login"
54
55     post "/login", :username => user.email.upcase, :password => "test", :referer => "/history"
56     assert_response :redirect
57     follow_redirect!
58     assert_response :success
59     assert_template "changeset/history"
60     assert_select "span.username", "TEST"
61   end
62
63   def test_login_email_password_normal_titlecase
64     user = users(:normal_user)
65
66     get "/login"
67     assert_response :redirect
68     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
69     follow_redirect!
70     assert_response :success
71
72     post "/login", :username => user.email.titlecase, :password => "wrong", :referer => "/history"
73     assert_response :redirect
74     follow_redirect!
75     assert_response :success
76     assert_template "login"
77
78     post "/login", :username => user.email.titlecase, :password => "test", :referer => "/history"
79     assert_response :redirect
80     follow_redirect!
81     assert_response :success
82     assert_template "login"
83     assert_select "span.username", false
84   end
85
86   def test_login_email_password_public
87     user = users(:public_user)
88
89     get "/login"
90     assert_response :redirect
91     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
92     follow_redirect!
93     assert_response :success
94
95     post "/login", :username => user.email, :password => "wrong", :referer => "/history"
96     assert_response :redirect
97     follow_redirect!
98     assert_response :success
99     assert_template "login"
100
101     post "/login", :username => user.email, :password => "test", :referer => "/history"
102     assert_response :redirect
103     follow_redirect!
104     assert_response :success
105     assert_template "changeset/history"
106     assert_select "span.username", "test2"
107   end
108
109   def test_login_email_password_public_upcase
110     user = users(:public_user)
111
112     get "/login"
113     assert_response :redirect
114     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
115     follow_redirect!
116     assert_response :success
117
118     post "/login", :username => user.email.upcase, :password => "wrong", :referer => "/history"
119     assert_response :redirect
120     follow_redirect!
121     assert_response :success
122     assert_template "login"
123
124     post "/login", :username => user.email.upcase, :password => "test", :referer => "/history"
125     assert_response :redirect
126     follow_redirect!
127     assert_response :success
128     assert_template "changeset/history"
129     assert_select "span.username", "test2"
130   end
131
132   def test_login_email_password_public_titlecase
133     user = users(:public_user)
134
135     get "/login"
136     assert_response :redirect
137     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
138     follow_redirect!
139     assert_response :success
140
141     post "/login", :username => user.email.titlecase, :password => "wrong", :referer => "/history"
142     assert_response :redirect
143     follow_redirect!
144     assert_response :success
145     assert_template "login"
146
147     post "/login", :username => user.email.titlecase, :password => "test", :referer => "/history"
148     assert_response :redirect
149     follow_redirect!
150     assert_response :success
151     assert_template "changeset/history"
152     assert_select "span.username", "test2"
153   end
154
155   def test_login_email_password_inactive
156     user = users(:inactive_user)
157
158     get "/login"
159     assert_response :redirect
160     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
161     follow_redirect!
162     assert_response :success
163
164     post "/login", :username => user.email, :password => "wrong", :referer => "/history"
165     assert_response :redirect
166     follow_redirect!
167     assert_response :success
168     assert_template "login"
169
170     post "/login", :username => user.email, :password => "test2", :referer => "/history"
171     assert_response :redirect
172     follow_redirect!
173     assert_response :success
174     assert_template "confirm"
175   end
176
177   def test_login_email_password_inactive_upcase
178     user = users(:inactive_user)
179
180     get "/login"
181     assert_response :redirect
182     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
183     follow_redirect!
184     assert_response :success
185
186     post "/login", :username => user.email.upcase, :password => "wrong", :referer => "/history"
187     assert_response :redirect
188     follow_redirect!
189     assert_response :success
190     assert_template "login"
191
192     post "/login", :username => user.email.upcase, :password => "test2", :referer => "/history"
193     assert_response :redirect
194     follow_redirect!
195     assert_response :success
196     assert_template "confirm"
197   end
198
199   def test_login_email_password_inactive_titlecase
200     user = users(:inactive_user)
201
202     get "/login"
203     assert_response :redirect
204     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
205     follow_redirect!
206     assert_response :success
207
208     post "/login", :username => user.email.titlecase, :password => "wrong", :referer => "/history"
209     assert_response :redirect
210     follow_redirect!
211     assert_response :success
212     assert_template "login"
213
214     post "/login", :username => user.email.titlecase, :password => "test2", :referer => "/history"
215     assert_response :redirect
216     follow_redirect!
217     assert_response :success
218     assert_template "confirm"
219   end
220
221   def test_login_email_password_suspended
222     user = users(:suspended_user)
223
224     get "/login"
225     assert_response :redirect
226     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
227     follow_redirect!
228     assert_response :success
229
230     post "/login", :username => user.email, :password => "wrong", :referer => "/history"
231     assert_response :redirect
232     follow_redirect!
233     assert_response :success
234     assert_template "login"
235
236     post "/login", :username => user.email, :password => "test", :referer => "/history"
237     assert_response :redirect
238     follow_redirect!
239     assert_response :success
240     assert_template "login"
241     assert_select "div.flash.error", /your account has been suspended/
242   end
243
244   def test_login_email_password_suspended_upcase
245     user = users(:suspended_user)
246
247     get "/login"
248     assert_response :redirect
249     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
250     follow_redirect!
251     assert_response :success
252
253     post "/login", :username => user.email.upcase, :password => "wrong", :referer => "/history"
254     assert_response :redirect
255     follow_redirect!
256     assert_response :success
257     assert_template "login"
258
259     post "/login", :username => user.email.upcase, :password => "test", :referer => "/history"
260     assert_response :redirect
261     follow_redirect!
262     assert_response :success
263     assert_template "login"
264     assert_select "div.flash.error", /your account has been suspended/
265   end
266
267   def test_login_email_password_suspended_titlecase
268     user = users(:suspended_user)
269
270     get "/login"
271     assert_response :redirect
272     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
273     follow_redirect!
274     assert_response :success
275
276     post "/login", :username => user.email.titlecase, :password => "wrong", :referer => "/history"
277     assert_response :redirect
278     follow_redirect!
279     assert_response :success
280     assert_template "login"
281
282     post "/login", :username => user.email.titlecase, :password => "test", :referer => "/history"
283     assert_response :redirect
284     follow_redirect!
285     assert_response :success
286     assert_template "login"
287     assert_select "div.flash.error", /your account has been suspended/
288   end
289
290   def test_login_email_password_blocked
291     user = users(:blocked_user)
292
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
299     post "/login", :username => user.email, :password => "wrong", :referer => "/history"
300     assert_response :redirect
301     follow_redirect!
302     assert_response :success
303     assert_template "login"
304
305     post "/login", :username => user.email, :password => "test", :referer => "/history"
306     assert_response :redirect
307     follow_redirect!
308     assert_response :success
309     assert_template "user_blocks/show"
310   end
311
312   def test_login_email_password_blocked_upcase
313     user = users(:blocked_user)
314
315     get "/login"
316     assert_response :redirect
317     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
318     follow_redirect!
319     assert_response :success
320
321     post "/login", :username => user.email.upcase, :password => "wrong", :referer => "/history"
322     assert_response :redirect
323     follow_redirect!
324     assert_response :success
325     assert_template "login"
326
327     post "/login", :username => user.email.upcase, :password => "test", :referer => "/history"
328     assert_response :redirect
329     follow_redirect!
330     assert_response :success
331     assert_template "user_blocks/show"
332   end
333
334   def test_login_email_password_blocked_titlecase
335     user = users(:blocked_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.email.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.email.titlecase, :password => "test", :referer => "/history"
350     assert_response :redirect
351     follow_redirect!
352     assert_response :success
353     assert_template "user_blocks/show"
354   end
355
356   def test_login_username_password_normal
357     user = users(:normal_user)
358
359     get "/login"
360     assert_response :redirect
361     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
362     follow_redirect!
363     assert_response :success
364
365     post "/login", :username => user.display_name, :password => "wrong", :referer => "/history"
366     assert_response :redirect
367     follow_redirect!
368     assert_response :success
369     assert_template "login"
370
371     post "/login", :username => user.display_name, :password => "test", :referer => "/history"
372     assert_response :redirect
373     follow_redirect!
374     assert_response :success
375     assert_template "changeset/history"
376     assert_select "span.username", "test"
377   end
378
379   def test_login_username_password_normal_upcase
380     user = users(:normal_user)
381
382     get "/login"
383     assert_response :redirect
384     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
385     follow_redirect!
386     assert_response :success
387
388     post "/login", :username => user.display_name.upcase, :password => "wrong", :referer => "/history"
389     assert_response :redirect
390     follow_redirect!
391     assert_response :success
392     assert_template "login"
393
394     post "/login", :username => user.display_name.upcase, :password => "test", :referer => "/history"
395     assert_response :redirect
396     follow_redirect!
397     assert_response :success
398     assert_template "changeset/history"
399     assert_select "span.username", "TEST"
400   end
401
402   def test_login_username_password_normal_titlecase
403     user = users(:normal_user)
404
405     get "/login"
406     assert_response :redirect
407     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
408     follow_redirect!
409     assert_response :success
410
411     post "/login", :username => user.display_name.titlecase, :password => "wrong", :referer => "/history"
412     assert_response :redirect
413     follow_redirect!
414     assert_response :success
415     assert_template "login"
416
417     post "/login", :username => user.display_name.titlecase, :password => "test", :referer => "/history"
418     assert_response :redirect
419     follow_redirect!
420     assert_response :success
421     assert_template "login"
422     assert_select "span.username", false
423   end
424
425   def test_login_username_password_public
426     user = users(:public_user)
427
428     get "/login"
429     assert_response :redirect
430     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
431     follow_redirect!
432     assert_response :success
433
434     post "/login", :username => user.display_name, :password => "wrong", :referer => "/history"
435     assert_response :redirect
436     follow_redirect!
437     assert_response :success
438     assert_template "login"
439
440     post "/login", :username => user.display_name, :password => "test", :referer => "/history"
441     assert_response :redirect
442     follow_redirect!
443     assert_response :success
444     assert_template "changeset/history"
445     assert_select "span.username", "test2"
446   end
447
448   def test_login_username_password_public_upcase
449     user = users(:public_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 => "test", :referer => "/history"
464     assert_response :redirect
465     follow_redirect!
466     assert_response :success
467     assert_template "changeset/history"
468     assert_select "span.username", "test2"
469   end
470
471   def test_login_username_password_public_titlecase
472     user = users(:public_user)
473
474     get "/login"
475     assert_response :redirect
476     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
477     follow_redirect!
478     assert_response :success
479
480     post "/login", :username => user.display_name.titlecase, :password => "wrong", :referer => "/history"
481     assert_response :redirect
482     follow_redirect!
483     assert_response :success
484     assert_template "login"
485
486     post "/login", :username => user.display_name.titlecase, :password => "test", :referer => "/history"
487     assert_response :redirect
488     follow_redirect!
489     assert_response :success
490     assert_template "changeset/history"
491     assert_select "span.username", "test2"
492   end
493
494   def test_login_username_password_inactive
495     user = users(:inactive_user)
496
497     get "/login"
498     assert_response :redirect
499     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
500     follow_redirect!
501     assert_response :success
502
503     post "/login", :username => user.display_name, :password => "wrong", :referer => "/history"
504     assert_response :redirect
505     follow_redirect!
506     assert_response :success
507     assert_template "login"
508
509     post "/login", :username => user.display_name, :password => "test2", :referer => "/history"
510     assert_response :redirect
511     follow_redirect!
512     assert_response :success
513     assert_template "confirm"
514   end
515
516   def test_login_username_password_inactive_upcase
517     user = users(:inactive_user)
518
519     get "/login"
520     assert_response :redirect
521     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
522     follow_redirect!
523     assert_response :success
524
525     post "/login", :username => user.display_name.upcase, :password => "wrong", :referer => "/history"
526     assert_response :redirect
527     follow_redirect!
528     assert_response :success
529     assert_template "login"
530
531     post "/login", :username => user.display_name.upcase, :password => "test2", :referer => "/history"
532     assert_response :redirect
533     follow_redirect!
534     assert_response :success
535     assert_template "confirm"
536   end
537
538   def test_login_username_password_inactive_titlecase
539     user = users(:inactive_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 => "test2", :referer => "/history"
554     assert_response :redirect
555     follow_redirect!
556     assert_response :success
557     assert_template "confirm"
558   end
559
560   def test_login_username_password_suspended
561     user = users(:suspended_user)
562
563     get "/login"
564     assert_response :redirect
565     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
566     follow_redirect!
567     assert_response :success
568
569     post "/login", :username => user.display_name, :password => "wrong", :referer => "/history"
570     assert_response :redirect
571     follow_redirect!
572     assert_response :success
573     assert_template "login"
574
575     post "/login", :username => user.display_name, :password => "test", :referer => "/history"
576     assert_response :redirect
577     follow_redirect!
578     assert_response :success
579     assert_template "login"
580     assert_select "div.flash.error", /your account has been suspended/
581   end
582
583   def test_login_username_password_suspended_upcase
584     user = users(:suspended_user)
585
586     get "/login"
587     assert_response :redirect
588     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
589     follow_redirect!
590     assert_response :success
591
592     post "/login", :username => user.display_name.upcase, :password => "wrong", :referer => "/history"
593     assert_response :redirect
594     follow_redirect!
595     assert_response :success
596     assert_template "login"
597
598     post "/login", :username => user.display_name.upcase, :password => "test", :referer => "/history"
599     assert_response :redirect
600     follow_redirect!
601     assert_response :success
602     assert_template "login"
603     assert_select "div.flash.error", /your account has been suspended/
604   end
605
606   def test_login_username_password_suspended_titlecase
607     user = users(:suspended_user)
608
609     get "/login"
610     assert_response :redirect
611     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
612     follow_redirect!
613     assert_response :success
614
615     post "/login", :username => user.display_name.titlecase, :password => "wrong", :referer => "/history"
616     assert_response :redirect
617     follow_redirect!
618     assert_response :success
619     assert_template "login"
620
621     post "/login", :username => user.display_name.titlecase, :password => "test", :referer => "/history"
622     assert_response :redirect
623     follow_redirect!
624     assert_response :success
625     assert_template "login"
626     assert_select "div.flash.error", /your account has been suspended/
627   end
628
629   def test_login_username_password_blocked
630     user = users(:blocked_user)
631
632     get "/login"
633     assert_response :redirect
634     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
635     follow_redirect!
636     assert_response :success
637
638     post "/login", :username => user.display_name, :password => "wrong", :referer => "/history"
639     assert_response :redirect
640     follow_redirect!
641     assert_response :success
642     assert_template "login"
643
644     post "/login", :username => user.display_name, :password => "test", :referer => "/history"
645     assert_response :redirect
646     follow_redirect!
647     assert_response :success
648     assert_template "user_blocks/show"
649   end
650
651   def test_login_username_password_blocked_upcase
652     user = users(:blocked_user)
653
654     get "/login"
655     assert_response :redirect
656     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
657     follow_redirect!
658     assert_response :success
659
660     post "/login", :username => user.display_name.upcase, :password => "wrong", :referer => "/history"
661     assert_response :redirect
662     follow_redirect!
663     assert_response :success
664     assert_template "login"
665
666     post "/login", :username => user.display_name.upcase, :password => "test", :referer => "/history"
667     assert_response :redirect
668     follow_redirect!
669     assert_response :success
670     assert_template "user_blocks/show"
671   end
672
673   def test_login_username_password_blocked_titlecase
674     user = users(:blocked_user)
675
676     get "/login"
677     assert_response :redirect
678     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
679     follow_redirect!
680     assert_response :success
681
682     post "/login", :username => user.display_name.titlecase, :password => "wrong", :referer => "/history"
683     assert_response :redirect
684     follow_redirect!
685     assert_response :success
686     assert_template "login"
687
688     post "/login", :username => user.display_name.titlecase, :password => "test", :referer => "/history"
689     assert_response :redirect
690     follow_redirect!
691     assert_response :success
692     assert_template "user_blocks/show"
693   end
694
695   def test_login_email_password_remember_me
696     user = users(:normal_user)
697
698     get "/login"
699     assert_response :redirect
700     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
701     follow_redirect!
702     assert_response :success
703
704     post "/login", :username => user.email, :password => "test", :remember_me => true, :referer => "/history"
705     assert_response :redirect
706     follow_redirect!
707     assert_response :success
708     assert_template "changeset/history"
709     assert_select "span.username", "test"
710     assert session.key?(:_remember_for)
711   end
712
713   def test_login_username_password_remember_me
714     user = users(:normal_user)
715
716     get "/login"
717     assert_response :redirect
718     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true
719     follow_redirect!
720     assert_response :success
721
722     post "/login", :username => user.display_name, :password => "test", :remember_me => true, :referer => "/history"
723     assert_response :redirect
724     follow_redirect!
725     assert_response :success
726     assert_template "changeset/history"
727     assert_select "span.username", "test"
728     assert session.key?(:_remember_for)
729   end
730
731   def test_login_openid_success
732     OmniAuth.config.add_mock(:openid, :uid => "http://localhost:1123/john.doe")
733
734     get "/login", :referer => "/history"
735     assert_response :redirect
736     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true, :referer => "/history"
737     follow_redirect!
738     assert_response :success
739     assert_template "user/login"
740     post "/login", :openid_url => "http://localhost:1123/john.doe", :referer => "/history"
741     assert_response :redirect
742     assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login")
743     follow_redirect!
744     assert_response :redirect
745     assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login")
746     follow_redirect!
747     assert_response :redirect
748     follow_redirect!
749     assert_response :success
750     assert_template "changeset/history"
751     assert_select "span.username", "openIDuser"
752   end
753
754   def test_login_openid_remember_me
755     OmniAuth.config.add_mock(:openid, :uid => "http://localhost:1123/john.doe")
756
757     get "/login", :referer => "/history"
758     assert_response :redirect
759     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true, :referer => "/history"
760     follow_redirect!
761     assert_response :success
762     assert_template "user/login"
763     post "/login", :openid_url => "http://localhost:1123/john.doe", :remember_me_openid => true, :referer => "/history"
764     assert_response :redirect
765     assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login")
766     follow_redirect!
767     assert_response :redirect
768     assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login")
769     follow_redirect!
770     assert_response :redirect
771     follow_redirect!
772     assert_response :success
773     assert_template "changeset/history"
774     assert_select "span.username", "openIDuser"
775     assert session.key?(:_remember_for)
776   end
777
778   def test_login_openid_connection_failed
779     OmniAuth.config.mock_auth[:openid] = :connection_failed
780
781     get "/login", :referer => "/history"
782     assert_response :redirect
783     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true, :referer => "/history"
784     follow_redirect!
785     assert_response :success
786     assert_template "user/login"
787     post "/login", :openid_url => "http://localhost:1123/john.doe", :referer => "/history"
788     assert_response :redirect
789     assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login")
790     follow_redirect!
791     assert_response :redirect
792     assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login")
793     follow_redirect!
794     assert_response :redirect
795     assert_redirected_to auth_failure_path(:strategy => "openid", :message => "connection_failed", :origin => "/login")
796     follow_redirect!
797     assert_response :redirect
798     follow_redirect!
799     assert_response :success
800     assert_template "login"
801     assert_select "div.flash.error", "Connection to authentication provider failed"
802     assert_select "span.username", false
803   end
804
805   def test_login_openid_invalid_credentials
806     OmniAuth.config.mock_auth[:openid] = :invalid_credentials
807
808     get "/login", :referer => "/history"
809     assert_response :redirect
810     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true, :referer => "/history"
811     follow_redirect!
812     assert_response :success
813     assert_template "user/login"
814     post "/login", :openid_url => "http://localhost:1123/john.doe", :referer => "/history"
815     assert_response :redirect
816     assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login")
817     follow_redirect!
818     assert_response :redirect
819     assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/john.doe", :origin => "/login")
820     follow_redirect!
821     assert_response :redirect
822     assert_redirected_to auth_failure_path(:strategy => "openid", :message => "invalid_credentials", :origin => "/login")
823     follow_redirect!
824     assert_response :redirect
825     follow_redirect!
826     assert_response :success
827     assert_template "login"
828     assert_select "div.flash.error", "Invalid authentication credentials"
829     assert_select "span.username", false
830   end
831
832   def test_login_openid_unknown
833     OmniAuth.config.add_mock(:openid, :uid => "http://localhost:1123/fred.bloggs")
834
835     get "/login", :referer => "/history"
836     assert_response :redirect
837     assert_redirected_to :controller => :user, :action => :login, :cookie_test => true, :referer => "/history"
838     follow_redirect!
839     assert_response :success
840     assert_template "user/login"
841     post "/login", :openid_url => "http://localhost:1123/fred.bloggs", :referer => "/history"
842     assert_response :redirect
843     assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/fred.bloggs", :origin => "/login")
844     follow_redirect!
845     assert_response :redirect
846     assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/fred.bloggs", :origin => "/login")
847     follow_redirect!
848     assert_response :redirect
849     follow_redirect!
850     assert_response :success
851     assert_template "user/new"
852     assert_select "span.username", false
853   end
854
855   def test_login_google_success
856     OmniAuth.config.add_mock(:google, :uid => "123456789", :extra => {
857                                :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
858                              })
859
860     get "/login", :referer => "/history"
861     assert_response :redirect
862     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
863     follow_redirect!
864     assert_response :success
865     assert_template "user/login"
866     get auth_path(:provider => "google", :origin => "/login")
867     assert_response :redirect
868     assert_redirected_to auth_success_path(:provider => "google")
869     follow_redirect!
870     assert_response :redirect
871     follow_redirect!
872     assert_response :success
873     assert_template "changeset/history"
874     assert_select "span.username", "googleuser"
875   end
876
877   def test_login_google_connection_failed
878     OmniAuth.config.mock_auth[:google] = :connection_failed
879
880     get "/login", :referer => "/history"
881     assert_response :redirect
882     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
883     follow_redirect!
884     assert_response :success
885     assert_template "user/login"
886     get auth_path(:provider => "google", :origin => "/login")
887     assert_response :redirect
888     assert_redirected_to auth_success_path(:provider => "google")
889     follow_redirect!
890     assert_response :redirect
891     assert_redirected_to auth_failure_path(:strategy => "google", :message => "connection_failed", :origin => "/login")
892     follow_redirect!
893     assert_response :redirect
894     follow_redirect!
895     assert_response :success
896     assert_template "login"
897     assert_select "div.flash.error", "Connection to authentication provider failed"
898     assert_select "span.username", false
899   end
900
901   def test_login_google_invalid_credentials
902     OmniAuth.config.mock_auth[:google] = :invalid_credentials
903
904     get "/login", :referer => "/history"
905     assert_response :redirect
906     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
907     follow_redirect!
908     assert_response :success
909     assert_template "user/login"
910     get auth_path(:provider => "google", :origin => "/login")
911     assert_response :redirect
912     assert_redirected_to auth_success_path(:provider => "google")
913     follow_redirect!
914     assert_response :redirect
915     assert_redirected_to auth_failure_path(:strategy => "google", :message => "invalid_credentials", :origin => "/login")
916     follow_redirect!
917     assert_response :redirect
918     follow_redirect!
919     assert_response :success
920     assert_template "login"
921     assert_select "div.flash.error", "Invalid authentication credentials"
922     assert_select "span.username", false
923   end
924
925   def test_login_google_unknown
926     OmniAuth.config.add_mock(:google, :uid => "987654321", :extra => {
927                                :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
928                              })
929
930     get "/login", :referer => "/history"
931     assert_response :redirect
932     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
933     follow_redirect!
934     assert_response :success
935     assert_template "user/login"
936     get auth_path(:provider => "google", :origin => "/login")
937     assert_response :redirect
938     assert_redirected_to auth_success_path(:provider => "google")
939     follow_redirect!
940     assert_response :redirect
941     follow_redirect!
942     assert_response :success
943     assert_template "user/new"
944     assert_select "span.username", false
945   end
946
947   def test_login_google_upgrade
948     OmniAuth.config.add_mock(:google, :uid => "987654321", :extra => {
949                                :id_info => { "openid_id" => "http://localhost:1123/john.doe" }
950                              })
951
952     get "/login", :referer => "/history"
953     assert_response :redirect
954     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
955     follow_redirect!
956     assert_response :success
957     assert_template "user/login"
958     get auth_path(:provider => "google", :origin => "/login")
959     assert_response :redirect
960     assert_redirected_to auth_success_path(:provider => "google")
961     follow_redirect!
962     assert_response :redirect
963     follow_redirect!
964     assert_response :success
965     assert_template "changeset/history"
966     assert_select "span.username", "openIDuser"
967
968     user = User.find_by_display_name("openIDuser")
969     assert_equal "google", user.auth_provider
970     assert_equal "987654321", user.auth_uid
971   end
972
973   def test_login_facebook_success
974     OmniAuth.config.add_mock(:facebook, :uid => "123456789", :extra => {
975                                :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
976                              })
977
978     get "/login", :referer => "/history"
979     assert_response :redirect
980     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
981     follow_redirect!
982     assert_response :success
983     assert_template "user/login"
984     get auth_path(:provider => "facebook", :origin => "/login")
985     assert_response :redirect
986     assert_redirected_to auth_success_path(:provider => "facebook")
987     follow_redirect!
988     assert_response :redirect
989     follow_redirect!
990     assert_response :success
991     assert_template "changeset/history"
992     assert_select "span.username", "facebookuser"
993   end
994
995   def test_login_facebook_connection_failed
996     OmniAuth.config.mock_auth[:facebook] = :connection_failed
997
998     get "/login", :referer => "/history"
999     assert_response :redirect
1000     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
1001     follow_redirect!
1002     assert_response :success
1003     assert_template "user/login"
1004     get auth_path(:provider => "facebook", :origin => "/login")
1005     assert_response :redirect
1006     assert_redirected_to auth_success_path(:provider => "facebook")
1007     follow_redirect!
1008     assert_response :redirect
1009     assert_redirected_to auth_failure_path(:strategy => "facebook", :message => "connection_failed", :origin => "/login")
1010     follow_redirect!
1011     assert_response :redirect
1012     follow_redirect!
1013     assert_response :success
1014     assert_template "login"
1015     assert_select "div.flash.error", "Connection to authentication provider failed"
1016     assert_select "span.username", false
1017   end
1018
1019   def test_login_facebook_invalid_credentials
1020     OmniAuth.config.mock_auth[:facebook] = :invalid_credentials
1021
1022     get "/login", :referer => "/history"
1023     assert_response :redirect
1024     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
1025     follow_redirect!
1026     assert_response :success
1027     assert_template "user/login"
1028     get auth_path(:provider => "facebook", :origin => "/login")
1029     assert_response :redirect
1030     assert_redirected_to auth_success_path(:provider => "facebook")
1031     follow_redirect!
1032     assert_response :redirect
1033     assert_redirected_to auth_failure_path(:strategy => "facebook", :message => "invalid_credentials", :origin => "/login")
1034     follow_redirect!
1035     assert_response :redirect
1036     follow_redirect!
1037     assert_response :success
1038     assert_template "login"
1039     assert_select "div.flash.error", "Invalid authentication credentials"
1040     assert_select "span.username", false
1041   end
1042
1043   def test_login_facebook_unknown
1044     OmniAuth.config.add_mock(:facebook, :uid => "987654321", :extra => {
1045                                :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
1046                              })
1047
1048     get "/login", :referer => "/history"
1049     assert_response :redirect
1050     assert_redirected_to "controller" => "user", "action" => "login", "cookie_test" => "true", "referer" => "/history"
1051     follow_redirect!
1052     assert_response :success
1053     assert_template "user/login"
1054     get auth_path(:provider => "facebook", :origin => "/login")
1055     assert_response :redirect
1056     assert_redirected_to auth_success_path(:provider => "facebook")
1057     follow_redirect!
1058     assert_response :redirect
1059     follow_redirect!
1060     assert_response :success
1061     assert_template "user/new"
1062     assert_select "span.username", false
1063   end
1064 end