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