3 class LoginTest < ActionDispatch::IntegrationTest
5 OmniAuth.config.test_mode = true
9 OmniAuth.config.mock_auth[:google] = nil
10 OmniAuth.config.mock_auth[:facebook] = nil
11 OmniAuth.config.mock_auth[:microsoft] = nil
12 OmniAuth.config.mock_auth[:github] = nil
13 OmniAuth.config.mock_auth[:wikipedia] = nil
14 OmniAuth.config.test_mode = false
17 # It's possible to have multiple accounts in the database with only differences
18 # in email case, for hysterical raisins. We need to bypass the validation checks to
19 # create users like this nowadays.
20 def test_login_email_password_duplicate
21 # Attempt to log in as one user, it should work
23 _uppercase_user = build(:user, :email => user.email.upcase).tap { |u| u.save(:validate => false) }
25 try_password_login user.email, "test"
27 assert_template "changesets/history"
28 assert_select "span.username", user.display_name
31 def test_login_email_password_duplicate_upcase
32 # Attempt to log in as the uppercase_user, it should also work
34 uppercase_user = build(:user, :email => user.email.upcase).tap { |u| u.save(:validate => false) }
36 try_password_login uppercase_user.email, "test"
38 assert_template "changesets/history"
39 assert_select "span.username", uppercase_user.display_name
42 def test_login_email_password_duplicate_titlecase
43 # When there's no exact match for case, and two possible users, it should fail
45 _uppercase_user = build(:user, :email => user.email.upcase).tap { |u| u.save(:validate => false) }
47 try_password_login user.email.titlecase, "test"
49 assert_template "sessions/new"
50 assert_select "span.username", false
53 # When there are no duplicate emails, any variation of cases should work
54 def test_login_email_password
57 try_password_login user.email, "test"
59 assert_template "changesets/history"
60 assert_select "span.username", user.display_name
63 def test_login_email_password_upcase
66 try_password_login user.email.upcase, "test"
68 assert_template "changesets/history"
69 assert_select "span.username", user.display_name
72 def test_login_email_password_titlecase
75 try_password_login user.email.titlecase, "test"
77 assert_template "changesets/history"
78 assert_select "span.username", user.display_name
81 def test_login_email_password_pending
82 user = create(:user, :pending)
84 try_password_login user.email, "test"
86 assert_template "confirm"
87 assert_select "span.username", false
90 def test_login_email_password_pending_upcase
91 user = create(:user, :pending)
93 try_password_login user.email.upcase, "test"
95 assert_template "confirm"
96 assert_select "span.username", false
99 def test_login_email_password_pending_titlecase
100 user = create(:user, :pending)
102 try_password_login user.email.titlecase, "test"
104 assert_template "confirm"
105 assert_select "span.username", false
108 def test_login_email_password_suspended
109 user = create(:user, :suspended)
111 try_password_login user.email, "test"
113 assert_template "sessions/new"
114 assert_select "span.username", false
115 assert_select "div.alert.alert-danger", /your account has been suspended/ do
116 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
120 def test_login_email_password_suspended_upcase
121 user = create(:user, :suspended)
123 try_password_login user.email.upcase, "test"
125 assert_template "sessions/new"
126 assert_select "span.username", false
127 assert_select "div.alert.alert-danger", /your account has been suspended/ do
128 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
132 def test_login_email_password_suspended_titlecase
133 user = create(:user, :suspended)
135 try_password_login user.email.titlecase, "test"
137 assert_template "sessions/new"
138 assert_select "span.username", false
139 assert_select "div.alert.alert-danger", /your account has been suspended/ do
140 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
144 def test_login_email_password_blocked
146 create(:user_block, :needs_view, :user => user)
148 try_password_login user.email, "test"
150 assert_template "user_blocks/show"
151 assert_select "span.username", user.display_name
154 def test_login_email_password_blocked_upcase
156 create(:user_block, :needs_view, :user => user)
158 try_password_login user.email.upcase, "test"
160 assert_template "user_blocks/show"
161 assert_select "span.username", user.display_name
164 def test_login_email_password_blocked_titlecase
166 create(:user_block, :needs_view, :user => user)
168 try_password_login user.email.titlecase, "test"
170 assert_template "user_blocks/show"
171 assert_select "span.username", user.display_name
174 # As above, it's possible to have multiple accounts in the database with only
175 # differences in display_name case, for hysterical raisins. We need to bypass
176 # the validation checks to create users like this nowadays.
177 def test_login_username_password_duplicate
178 # Attempt to log in as one user, it should work
180 _uppercase_user = build(:user, :display_name => user.display_name.upcase).tap { |u| u.save(:validate => false) }
182 try_password_login user.display_name, "test"
184 assert_template "changesets/history"
185 assert_select "span.username", user.display_name
188 def test_login_username_password_duplicate_upcase
189 # Attempt to log in as the uppercase_user, it should also work
191 uppercase_user = build(:user, :display_name => user.display_name.upcase).tap { |u| u.save(:validate => false) }
193 try_password_login uppercase_user.display_name, "test"
195 assert_template "changesets/history"
196 assert_select "span.username", uppercase_user.display_name
199 def test_login_username_password_duplicate_downcase
200 # When there's no exact match for case, and two possible users, it should fail
202 _uppercase_user = build(:user, :display_name => user.display_name.upcase).tap { |u| u.save(:validate => false) }
204 try_password_login user.display_name.downcase, "test"
206 assert_template "sessions/new"
207 assert_select "span.username", false
210 # When there are no duplicate emails, any variation of cases should work
211 def test_login_username_password
214 try_password_login user.display_name, "test"
216 assert_template "changesets/history"
217 assert_select "span.username", user.display_name
220 def test_login_username_password_upcase
223 try_password_login user.display_name.upcase, "test"
225 assert_template "changesets/history"
226 assert_select "span.username", user.display_name
229 def test_login_username_password_downcase
232 try_password_login user.display_name.downcase, "test"
234 assert_template "changesets/history"
235 assert_select "span.username", user.display_name
238 def test_login_username_password_pending
239 user = create(:user, :pending)
241 try_password_login user.display_name, "test"
243 assert_template "confirm"
244 assert_select "span.username", false
247 def test_login_username_password_pending_upcase
248 user = create(:user, :pending)
250 try_password_login user.display_name.upcase, "test"
252 assert_template "confirm"
253 assert_select "span.username", false
256 def test_login_username_password_pending_downcase
257 user = create(:user, :pending)
259 try_password_login user.display_name.downcase, "test"
261 assert_template "confirm"
262 assert_select "span.username", false
265 def test_login_username_password_suspended
266 user = create(:user, :suspended)
268 try_password_login user.display_name, "test"
270 assert_template "sessions/new"
271 assert_select "span.username", false
272 assert_select "div.alert.alert-danger", /your account has been suspended/ do
273 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
277 def test_login_username_password_suspended_upcase
278 user = create(:user, :suspended)
280 try_password_login user.display_name.upcase, "test"
282 assert_template "sessions/new"
283 assert_select "span.username", false
284 assert_select "div.alert.alert-danger", /your account has been suspended/ do
285 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
289 def test_login_username_password_suspended_downcase
290 user = create(:user, :suspended)
292 try_password_login user.display_name.downcase, "test"
294 assert_template "sessions/new"
295 assert_select "span.username", false
296 assert_select "div.alert.alert-danger", /your account has been suspended/ do
297 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
301 def test_login_username_password_blocked
303 create(:user_block, :needs_view, :user => user)
305 try_password_login user.display_name.upcase, "test"
307 assert_template "user_blocks/show"
308 assert_select "span.username", user.display_name
311 def test_login_username_password_blocked_upcase
313 create(:user_block, :needs_view, :user => user)
315 try_password_login user.display_name, "test"
317 assert_template "user_blocks/show"
318 assert_select "span.username", user.display_name
321 def test_login_username_password_blocked_downcase
323 create(:user_block, :needs_view, :user => user)
325 try_password_login user.display_name.downcase, "test"
327 assert_template "user_blocks/show"
328 assert_select "span.username", user.display_name
331 def test_login_email_password_remember_me
334 try_password_login user.email, "test", "yes"
336 assert_template "changesets/history"
337 assert_select "span.username", user.display_name
338 assert session.key?(:_remember_for)
341 def test_login_username_password_remember_me
344 try_password_login user.display_name, "test", "yes"
346 assert_template "changesets/history"
347 assert_select "span.username", user.display_name
348 assert session.key?(:_remember_for)
351 def test_login_google_success
352 user = create(:user, :auth_provider => "google", :auth_uid => "1234567890")
353 OmniAuth.config.add_mock(:google, :uid => user.auth_uid, :extra => {
354 :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
357 get "/login", :params => { :referer => "/history" }
358 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
360 assert_response :success
361 assert_template "sessions/new"
362 post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
363 assert_redirected_to auth_success_path(:provider => "google")
365 assert_response :redirect
367 assert_response :success
368 assert_template "changesets/history"
369 assert_select "span.username", user.display_name
372 def test_login_google_pending
373 user = create(:user, :pending, :auth_provider => "google", :auth_uid => "1234567890")
374 OmniAuth.config.add_mock(:google, :uid => user.auth_uid, :extra => {
375 :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
378 get "/login", :params => { :referer => "/history" }
379 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
381 assert_response :success
382 assert_template "sessions/new"
383 post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
384 assert_redirected_to auth_success_path(:provider => "google")
386 assert_response :redirect
388 assert_response :success
389 assert_template "confirm"
392 def test_login_google_suspended
393 user = create(:user, :suspended, :auth_provider => "google", :auth_uid => "1234567890")
394 OmniAuth.config.add_mock(:google, :uid => user.auth_uid, :extra => {
395 :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
398 get "/login", :params => { :referer => "/history" }
399 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
401 assert_response :success
402 assert_template "sessions/new"
403 post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
404 assert_redirected_to auth_success_path(:provider => "google")
406 assert_response :redirect
408 assert_response :success
409 assert_template "sessions/new"
410 assert_select "span.username", false
411 assert_select "div.alert.alert-danger", /your account has been suspended/ do
412 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
416 def test_login_google_blocked
417 user = create(:user, :auth_provider => "google", :auth_uid => "1234567890")
418 create(:user_block, :needs_view, :user => user)
419 OmniAuth.config.add_mock(:google, :uid => user.auth_uid, :extra => {
420 :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
423 get "/login", :params => { :referer => "/history" }
424 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
426 assert_response :success
427 assert_template "sessions/new"
428 post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
429 assert_redirected_to auth_success_path(:provider => "google")
431 assert_response :redirect
433 assert_response :success
434 assert_template "user_blocks/show"
435 assert_select "span.username", user.display_name
438 def test_login_google_connection_failed
439 OmniAuth.config.mock_auth[:google] = :connection_failed
441 get "/login", :params => { :referer => "/history" }
442 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
444 assert_response :success
445 assert_template "sessions/new"
446 post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
447 assert_redirected_to auth_success_path(:provider => "google")
449 assert_redirected_to auth_failure_path(:strategy => "google", :message => "connection_failed", :origin => "/login?referer=%2Fhistory")
451 assert_response :redirect
453 assert_response :success
454 assert_template "sessions/new"
455 assert_select "div.alert.alert-danger", "Connection to authentication provider failed"
456 assert_select "span.username", false
459 def test_login_google_invalid_credentials
460 OmniAuth.config.mock_auth[:google] = :invalid_credentials
462 get "/login", :params => { :referer => "/history" }
463 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
465 assert_response :success
466 assert_template "sessions/new"
467 post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
468 assert_redirected_to auth_success_path(:provider => "google")
470 assert_redirected_to auth_failure_path(:strategy => "google", :message => "invalid_credentials", :origin => "/login?referer=%2Fhistory")
472 assert_response :redirect
474 assert_response :success
475 assert_template "sessions/new"
476 assert_select "div.alert.alert-danger", "Invalid authentication credentials"
477 assert_select "span.username", false
480 def test_login_google_unknown
481 OmniAuth.config.add_mock(:google, :uid => "987654321", :extra => {
482 :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
485 get "/login", :params => { :referer => "/history" }
486 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
488 assert_response :success
489 assert_template "sessions/new"
490 post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
491 assert_redirected_to auth_success_path(:provider => "google")
493 assert_response :redirect
495 assert_response :success
496 assert_template "users/new"
497 assert_select "span.username", false
500 def test_login_google_upgrade
501 user = create(:user, :auth_provider => "openid", :auth_uid => "http://example.com/john.doe")
502 OmniAuth.config.add_mock(:google, :uid => "987654321", :extra => {
503 :id_info => { "openid_id" => user.auth_uid }
506 get "/login", :params => { :referer => "/history" }
507 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
509 assert_response :success
510 assert_template "sessions/new"
511 post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
512 assert_redirected_to auth_success_path(:provider => "google")
514 assert_response :redirect
516 assert_response :success
517 assert_template "changesets/history"
518 assert_select "span.username", user.display_name
520 u = User.find_by(:display_name => user.display_name)
521 assert_equal "google", u.auth_provider
522 assert_equal "987654321", u.auth_uid
525 def test_login_facebook_success
526 user = create(:user, :auth_provider => "facebook", :auth_uid => "1234567890")
527 OmniAuth.config.add_mock(:facebook, :uid => user.auth_uid)
529 get "/login", :params => { :referer => "/history" }
530 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
532 assert_response :success
533 assert_template "sessions/new"
534 post auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history")
535 assert_redirected_to auth_success_path(:provider => "facebook")
537 assert_response :redirect
539 assert_response :success
540 assert_template "changesets/history"
541 assert_select "span.username", user.display_name
544 def test_login_facebook_pending
545 user = create(:user, :pending, :auth_provider => "facebook", :auth_uid => "1234567890")
546 OmniAuth.config.add_mock(:facebook, :uid => user.auth_uid)
548 get "/login", :params => { :referer => "/history" }
549 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
551 assert_response :success
552 assert_template "sessions/new"
553 post auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history")
554 assert_redirected_to auth_success_path(:provider => "facebook")
556 assert_response :redirect
558 assert_response :success
559 assert_template "confirm"
562 def test_login_facebook_suspended
563 user = create(:user, :suspended, :auth_provider => "facebook", :auth_uid => "1234567890")
564 OmniAuth.config.add_mock(:facebook, :uid => user.auth_uid)
566 get "/login", :params => { :referer => "/history" }
567 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
569 assert_response :success
570 assert_template "sessions/new"
571 post auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history")
572 assert_redirected_to auth_success_path(:provider => "facebook")
574 assert_response :redirect
576 assert_response :success
577 assert_template "sessions/new"
578 assert_select "span.username", false
579 assert_select "div.alert.alert-danger", /your account has been suspended/ do
580 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
584 def test_login_facebook_blocked
585 user = create(:user, :auth_provider => "facebook", :auth_uid => "1234567890")
586 create(:user_block, :needs_view, :user => user)
587 OmniAuth.config.add_mock(:facebook, :uid => user.auth_uid)
589 get "/login", :params => { :referer => "/history" }
590 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
592 assert_response :success
593 assert_template "sessions/new"
594 post auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history")
595 assert_redirected_to auth_success_path(:provider => "facebook")
597 assert_response :redirect
599 assert_response :success
600 assert_template "user_blocks/show"
601 assert_select "span.username", user.display_name
604 def test_login_facebook_connection_failed
605 OmniAuth.config.mock_auth[:facebook] = :connection_failed
607 get "/login", :params => { :referer => "/history" }
608 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
610 assert_response :success
611 assert_template "sessions/new"
612 post auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history")
613 assert_redirected_to auth_success_path(:provider => "facebook")
615 assert_redirected_to auth_failure_path(:strategy => "facebook", :message => "connection_failed", :origin => "/login?referer=%2Fhistory")
617 assert_response :redirect
619 assert_response :success
620 assert_template "sessions/new"
621 assert_select "div.alert.alert-danger", "Connection to authentication provider failed"
622 assert_select "span.username", false
625 def test_login_facebook_invalid_credentials
626 OmniAuth.config.mock_auth[:facebook] = :invalid_credentials
628 get "/login", :params => { :referer => "/history" }
629 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
631 assert_response :success
632 assert_template "sessions/new"
633 post auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history")
634 assert_redirected_to auth_success_path(:provider => "facebook")
636 assert_redirected_to auth_failure_path(:strategy => "facebook", :message => "invalid_credentials", :origin => "/login?referer=%2Fhistory")
638 assert_response :redirect
640 assert_response :success
641 assert_template "sessions/new"
642 assert_select "div.alert.alert-danger", "Invalid authentication credentials"
643 assert_select "span.username", false
646 def test_login_facebook_unknown
647 OmniAuth.config.add_mock(:facebook, :uid => "987654321")
649 get "/login", :params => { :referer => "/history" }
650 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
652 assert_response :success
653 assert_template "sessions/new"
654 post auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history")
655 assert_redirected_to auth_success_path(:provider => "facebook")
657 assert_response :redirect
659 assert_response :success
660 assert_template "users/new"
661 assert_select "span.username", false
664 def test_login_microsoft_success
665 user = create(:user, :auth_provider => "microsoft", :auth_uid => "1234567890")
666 OmniAuth.config.add_mock(:microsoft, :uid => user.auth_uid)
668 get "/login", :params => { :referer => "/history" }
669 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
671 assert_response :success
672 assert_template "sessions/new"
673 post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history")
674 assert_redirected_to auth_success_path(:provider => "microsoft")
676 assert_response :redirect
678 assert_response :success
679 assert_template "changesets/history"
680 assert_select "span.username", user.display_name
683 def test_login_microsoft_pending
684 user = create(:user, :pending, :auth_provider => "microsoft", :auth_uid => "1234567890")
685 OmniAuth.config.add_mock(:microsoft, :uid => user.auth_uid)
687 get "/login", :params => { :referer => "/history" }
688 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
690 assert_response :success
691 assert_template "sessions/new"
692 post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history")
693 assert_redirected_to auth_success_path(:provider => "microsoft")
695 assert_response :redirect
697 assert_response :success
698 assert_template "confirm"
701 def test_login_microsoft_suspended
702 user = create(:user, :suspended, :auth_provider => "microsoft", :auth_uid => "1234567890")
703 OmniAuth.config.add_mock(:microsoft, :uid => user.auth_uid)
705 get "/login", :params => { :referer => "/history" }
706 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
708 assert_response :success
709 assert_template "sessions/new"
710 post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history")
711 assert_redirected_to auth_success_path(:provider => "microsoft")
713 assert_response :redirect
715 assert_response :success
716 assert_template "sessions/new"
717 assert_select "span.username", false
718 assert_select "div.alert.alert-danger", /your account has been suspended/ do
719 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
723 def test_login_microsoft_blocked
724 user = create(:user, :auth_provider => "microsoft", :auth_uid => "1234567890")
725 create(:user_block, :needs_view, :user => user)
726 OmniAuth.config.add_mock(:microsoft, :uid => user.auth_uid)
728 get "/login", :params => { :referer => "/history" }
729 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
731 assert_response :success
732 assert_template "sessions/new"
733 post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history")
734 assert_redirected_to auth_success_path(:provider => "microsoft")
736 assert_response :redirect
738 assert_response :success
739 assert_template "user_blocks/show"
740 assert_select "span.username", user.display_name
743 def test_login_microsoft_connection_failed
744 OmniAuth.config.mock_auth[:microsoft] = :connection_failed
746 get "/login", :params => { :referer => "/history" }
747 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
749 assert_response :success
750 assert_template "sessions/new"
751 post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history")
752 assert_redirected_to auth_success_path(:provider => "microsoft")
754 assert_redirected_to auth_failure_path(:strategy => "microsoft", :message => "connection_failed", :origin => "/login?referer=%2Fhistory")
756 assert_response :redirect
758 assert_response :success
759 assert_template "sessions/new"
760 assert_select "div.alert.alert-danger", "Connection to authentication provider failed"
761 assert_select "span.username", false
764 def test_login_microsoft_invalid_credentials
765 OmniAuth.config.mock_auth[:microsoft] = :invalid_credentials
767 get "/login", :params => { :referer => "/history" }
768 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
770 assert_response :success
771 assert_template "sessions/new"
772 post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history")
773 assert_redirected_to auth_success_path(:provider => "microsoft")
775 assert_redirected_to auth_failure_path(:strategy => "microsoft", :message => "invalid_credentials", :origin => "/login?referer=%2Fhistory")
777 assert_response :redirect
779 assert_response :success
780 assert_template "sessions/new"
781 assert_select "div.alert.alert-danger", "Invalid authentication credentials"
782 assert_select "span.username", false
785 def test_login_microsoft_unknown
786 OmniAuth.config.add_mock(:microsoft, :uid => "987654321")
788 get "/login", :params => { :referer => "/history" }
789 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
791 assert_response :success
792 assert_template "sessions/new"
793 post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history")
794 assert_redirected_to auth_success_path(:provider => "microsoft")
796 assert_response :redirect
798 assert_response :success
799 assert_template "users/new"
800 assert_select "span.username", false
803 def test_login_github_success
804 user = create(:user, :auth_provider => "github", :auth_uid => "1234567890")
805 OmniAuth.config.add_mock(:github, :uid => user.auth_uid)
807 get "/login", :params => { :referer => "/history" }
808 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
810 assert_response :success
811 assert_template "sessions/new"
812 post auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history")
813 assert_redirected_to auth_success_path(:provider => "github")
815 assert_response :redirect
817 assert_response :success
818 assert_template "changesets/history"
819 assert_select "span.username", user.display_name
822 def test_login_github_pending
823 user = create(:user, :pending, :auth_provider => "github", :auth_uid => "1234567890")
824 OmniAuth.config.add_mock(:github, :uid => user.auth_uid)
826 get "/login", :params => { :referer => "/history" }
827 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
829 assert_response :success
830 assert_template "sessions/new"
831 post auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history")
832 assert_redirected_to auth_success_path(:provider => "github")
834 assert_response :redirect
836 assert_response :success
837 assert_template "confirm"
840 def test_login_github_suspended
841 user = create(:user, :suspended, :auth_provider => "github", :auth_uid => "1234567890")
842 OmniAuth.config.add_mock(:github, :uid => user.auth_uid)
844 get "/login", :params => { :referer => "/history" }
845 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
847 assert_response :success
848 assert_template "sessions/new"
849 post auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history")
850 assert_redirected_to auth_success_path(:provider => "github")
852 assert_response :redirect
854 assert_response :success
855 assert_template "sessions/new"
856 assert_select "span.username", false
857 assert_select "div.alert.alert-danger", /your account has been suspended/ do
858 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
862 def test_login_github_blocked
863 user = create(:user, :auth_provider => "github", :auth_uid => "1234567890")
864 create(:user_block, :needs_view, :user => user)
865 OmniAuth.config.add_mock(:github, :uid => user.auth_uid)
867 get "/login", :params => { :referer => "/history" }
868 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
870 assert_response :success
871 assert_template "sessions/new"
872 post auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history")
873 assert_redirected_to auth_success_path(:provider => "github")
875 assert_response :redirect
877 assert_response :success
878 assert_template "user_blocks/show"
879 assert_select "span.username", user.display_name
882 def test_login_github_connection_failed
883 OmniAuth.config.mock_auth[:github] = :connection_failed
885 get "/login", :params => { :referer => "/history" }
886 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
888 assert_response :success
889 assert_template "sessions/new"
890 post auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history")
891 assert_redirected_to auth_success_path(:provider => "github")
893 assert_redirected_to auth_failure_path(:strategy => "github", :message => "connection_failed", :origin => "/login?referer=%2Fhistory")
895 assert_response :redirect
897 assert_response :success
898 assert_template "sessions/new"
899 assert_select "div.alert.alert-danger", "Connection to authentication provider failed"
900 assert_select "span.username", false
903 def test_login_github_invalid_credentials
904 OmniAuth.config.mock_auth[:github] = :invalid_credentials
906 get "/login", :params => { :referer => "/history" }
907 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
909 assert_response :success
910 assert_template "sessions/new"
911 post auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history")
912 assert_redirected_to auth_success_path(:provider => "github")
914 assert_redirected_to auth_failure_path(:strategy => "github", :message => "invalid_credentials", :origin => "/login?referer=%2Fhistory")
916 assert_response :redirect
918 assert_response :success
919 assert_template "sessions/new"
920 assert_select "div.alert.alert-danger", "Invalid authentication credentials"
921 assert_select "span.username", false
924 def test_login_github_unknown
925 OmniAuth.config.add_mock(:github, :uid => "987654321")
927 get "/login", :params => { :referer => "/history" }
928 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
930 assert_response :success
931 assert_template "sessions/new"
932 post auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history")
933 assert_redirected_to auth_success_path(:provider => "github")
935 assert_response :redirect
937 assert_response :success
938 assert_template "users/new"
939 assert_select "span.username", false
942 def test_login_wikipedia_success
943 user = create(:user, :auth_provider => "wikipedia", :auth_uid => "1234567890")
944 OmniAuth.config.add_mock(:wikipedia, :uid => user.auth_uid)
946 get "/login", :params => { :referer => "/history" }
947 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
949 assert_response :success
950 assert_template "sessions/new"
951 post auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
952 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
954 assert_response :redirect
956 assert_response :success
957 assert_template "changesets/history"
958 assert_select "span.username", user.display_name
961 def test_login_wikipedia_pending
962 user = create(:user, :pending, :auth_provider => "wikipedia", :auth_uid => "1234567890")
963 OmniAuth.config.add_mock(:wikipedia, :uid => user.auth_uid)
965 get "/login", :params => { :referer => "/history" }
966 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
968 assert_response :success
969 assert_template "sessions/new"
970 post auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
971 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
973 assert_response :redirect
975 assert_response :success
976 assert_template "confirm"
979 def test_login_wikipedia_suspended
980 user = create(:user, :suspended, :auth_provider => "wikipedia", :auth_uid => "1234567890")
981 OmniAuth.config.add_mock(:wikipedia, :uid => user.auth_uid)
983 get "/login", :params => { :referer => "/history" }
984 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
986 assert_response :success
987 assert_template "sessions/new"
988 post auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
989 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
991 assert_response :redirect
993 assert_response :success
994 assert_template "sessions/new"
995 assert_select "span.username", false
996 assert_select "div.alert.alert-danger", /your account has been suspended/ do
997 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
1001 def test_login_wikipedia_blocked
1002 user = create(:user, :auth_provider => "wikipedia", :auth_uid => "1234567890")
1003 create(:user_block, :needs_view, :user => user)
1004 OmniAuth.config.add_mock(:wikipedia, :uid => user.auth_uid)
1006 get "/login", :params => { :referer => "/history" }
1007 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1009 assert_response :success
1010 assert_template "sessions/new"
1011 post auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1012 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1014 assert_response :redirect
1016 assert_response :success
1017 assert_template "user_blocks/show"
1018 assert_select "span.username", user.display_name
1021 def test_login_wikipedia_connection_failed
1022 OmniAuth.config.mock_auth[:wikipedia] = :connection_failed
1024 get "/login", :params => { :referer => "/history" }
1025 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1027 assert_response :success
1028 assert_template "sessions/new"
1029 post auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1030 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1032 assert_redirected_to auth_failure_path(:strategy => "wikipedia", :message => "connection_failed", :origin => "/login?referer=%2Fhistory")
1034 assert_response :redirect
1036 assert_response :success
1037 assert_template "sessions/new"
1038 assert_select "div.alert.alert-danger", "Connection to authentication provider failed"
1039 assert_select "span.username", false
1042 def test_login_wikipedia_invalid_credentials
1043 OmniAuth.config.mock_auth[:wikipedia] = :invalid_credentials
1045 get "/login", :params => { :referer => "/history" }
1046 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1048 assert_response :success
1049 assert_template "sessions/new"
1050 post auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1051 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1053 assert_redirected_to auth_failure_path(:strategy => "wikipedia", :message => "invalid_credentials", :origin => "/login?referer=%2Fhistory")
1055 assert_response :redirect
1057 assert_response :success
1058 assert_template "sessions/new"
1059 assert_select "div.alert.alert-danger", "Invalid authentication credentials"
1060 assert_select "span.username", false
1063 def test_login_wikipedia_unknown
1064 OmniAuth.config.add_mock(:wikipedia, :uid => "987654321")
1066 get "/login", :params => { :referer => "/history" }
1067 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1069 assert_response :success
1070 assert_template "sessions/new"
1071 post auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1072 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1074 assert_response :redirect
1076 assert_response :success
1077 assert_template "users/new"
1078 assert_select "span.username", false
1083 def try_password_login(username, password, remember_me = nil)
1085 assert_redirected_to login_path(:cookie_test => true)
1087 assert_response :success
1088 assert_template "sessions/new"
1089 assert_select "input#username", 1 do
1090 assert_select "[value]", false
1092 assert_select "input#password", 1 do
1093 assert_select "[value=?]", ""
1095 assert_select "input#remember_me", 1 do
1096 assert_select "[checked]", false
1099 post "/login", :params => { :username => username, :password => "wrong", :remember_me => remember_me, :referer => "/history" }
1100 assert_response :redirect
1102 assert_response :success
1103 assert_template "sessions/new"
1104 assert_select "input#username", 1 do
1105 assert_select "[value=?]", username
1107 assert_select "input#password", 1 do
1108 assert_select "[value=?]", ""
1110 assert_select "input#remember_me", 1 do
1111 assert_select "[checked]", remember_me == "yes"
1114 post "/login", :params => { :username => username, :password => password, :remember_me => remember_me, :referer => "/history" }
1115 assert_response :redirect
1117 assert_response :success