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