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