1 # frozen_string_literal: true
5 class LoginTest < ActionDispatch::IntegrationTest
7 OmniAuth.config.test_mode = true
11 OmniAuth.config.mock_auth[:google] = nil
12 OmniAuth.config.mock_auth[:apple] = nil
13 OmniAuth.config.mock_auth[:facebook] = nil
14 OmniAuth.config.mock_auth[:microsoft] = nil
15 OmniAuth.config.mock_auth[:github] = nil
16 OmniAuth.config.mock_auth[:wikipedia] = nil
17 OmniAuth.config.test_mode = false
20 # It's possible to have multiple accounts in the database with only differences
21 # in email case, for hysterical raisins. We need to bypass the validation checks to
22 # create users like this nowadays.
23 def test_login_email_password_duplicate
24 # Attempt to log in as one user, it should work
26 _uppercase_user = build(:user, :email => user.email.upcase).tap { |u| u.save(:validate => false) }
28 try_password_login user.email, "test"
30 assert_template "changesets/history"
31 assert_select "span.username", user.display_name
34 def test_login_email_password_duplicate_upcase
35 # Attempt to log in as the uppercase_user, it should also work
37 uppercase_user = build(:user, :email => user.email.upcase).tap { |u| u.save(:validate => false) }
39 try_password_login uppercase_user.email, "test"
41 assert_template "changesets/history"
42 assert_select "span.username", uppercase_user.display_name
45 def test_login_email_password_duplicate_titlecase
46 # When there's no exact match for case, and two possible users, it should fail
48 _uppercase_user = build(:user, :email => user.email.upcase).tap { |u| u.save(:validate => false) }
50 try_password_login user.email.titlecase, "test"
52 assert_template "sessions/new"
53 assert_select "span.username", false
56 # When there are no duplicate emails, any variation of cases should work
57 def test_login_email_password
60 try_password_login user.email, "test"
62 assert_template "changesets/history"
63 assert_select "span.username", user.display_name
66 def test_login_email_password_upcase
69 try_password_login user.email.upcase, "test"
71 assert_template "changesets/history"
72 assert_select "span.username", user.display_name
75 def test_login_email_password_titlecase
78 try_password_login user.email.titlecase, "test"
80 assert_template "changesets/history"
81 assert_select "span.username", user.display_name
84 def test_login_email_password_pending
85 user = create(:user, :pending)
87 try_password_login user.email, "test"
89 assert_template "confirm"
90 assert_select "span.username", false
93 def test_login_email_password_pending_upcase
94 user = create(:user, :pending)
96 try_password_login user.email.upcase, "test"
98 assert_template "confirm"
99 assert_select "span.username", false
102 def test_login_email_password_pending_titlecase
103 user = create(:user, :pending)
105 try_password_login user.email.titlecase, "test"
107 assert_template "confirm"
108 assert_select "span.username", false
111 def test_login_email_password_suspended
112 user = create(:user, :suspended)
114 try_password_login user.email, "test"
116 assert_template "sessions/new"
117 assert_select "span.username", false
118 assert_select "div.alert.alert-danger", /your account has been suspended/ do
119 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
123 def test_login_email_password_suspended_upcase
124 user = create(:user, :suspended)
126 try_password_login user.email.upcase, "test"
128 assert_template "sessions/new"
129 assert_select "span.username", false
130 assert_select "div.alert.alert-danger", /your account has been suspended/ do
131 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
135 def test_login_email_password_suspended_titlecase
136 user = create(:user, :suspended)
138 try_password_login user.email.titlecase, "test"
140 assert_template "sessions/new"
141 assert_select "span.username", false
142 assert_select "div.alert.alert-danger", /your account has been suspended/ do
143 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
147 def test_login_email_password_blocked
149 create(:user_block, :needs_view, :user => user)
151 try_password_login user.email, "test"
153 assert_template "user_blocks/show"
154 assert_select "span.username", user.display_name
157 def test_login_email_password_blocked_upcase
159 create(:user_block, :needs_view, :user => user)
161 try_password_login user.email.upcase, "test"
163 assert_template "user_blocks/show"
164 assert_select "span.username", user.display_name
167 def test_login_email_password_blocked_titlecase
169 create(:user_block, :needs_view, :user => user)
171 try_password_login user.email.titlecase, "test"
173 assert_template "user_blocks/show"
174 assert_select "span.username", user.display_name
177 # As above, it's possible to have multiple accounts in the database with only
178 # differences in display_name case, for hysterical raisins. We need to bypass
179 # the validation checks to create users like this nowadays.
180 def test_login_username_password_duplicate
181 # Attempt to log in as one user, it should work
183 _uppercase_user = build(:user, :display_name => user.display_name.upcase).tap { |u| u.save(:validate => false) }
185 try_password_login user.display_name, "test"
187 assert_template "changesets/history"
188 assert_select "span.username", user.display_name
191 def test_login_username_password_duplicate_upcase
192 # Attempt to log in as the uppercase_user, it should also work
194 uppercase_user = build(:user, :display_name => user.display_name.upcase).tap { |u| u.save(:validate => false) }
196 try_password_login uppercase_user.display_name, "test"
198 assert_template "changesets/history"
199 assert_select "span.username", uppercase_user.display_name
202 def test_login_username_password_duplicate_downcase
203 # When there's no exact match for case, and two possible users, it should fail
205 _uppercase_user = build(:user, :display_name => user.display_name.upcase).tap { |u| u.save(:validate => false) }
207 try_password_login user.display_name.downcase, "test"
209 assert_template "sessions/new"
210 assert_select "span.username", false
213 # When there are no duplicate emails, any variation of cases should work
214 def test_login_username_password
217 try_password_login user.display_name, "test"
219 assert_template "changesets/history"
220 assert_select "span.username", user.display_name
223 def test_login_username_password_upcase
226 try_password_login user.display_name.upcase, "test"
228 assert_template "changesets/history"
229 assert_select "span.username", user.display_name
232 def test_login_username_password_downcase
235 try_password_login user.display_name.downcase, "test"
237 assert_template "changesets/history"
238 assert_select "span.username", user.display_name
241 def test_login_username_password_pending
242 user = create(:user, :pending)
244 try_password_login user.display_name, "test"
246 assert_template "confirm"
247 assert_select "span.username", false
250 def test_login_username_password_pending_upcase
251 user = create(:user, :pending)
253 try_password_login user.display_name.upcase, "test"
255 assert_template "confirm"
256 assert_select "span.username", false
259 def test_login_username_password_pending_downcase
260 user = create(:user, :pending)
262 try_password_login user.display_name.downcase, "test"
264 assert_template "confirm"
265 assert_select "span.username", false
268 def test_login_username_password_suspended
269 user = create(:user, :suspended)
271 try_password_login user.display_name, "test"
273 assert_template "sessions/new"
274 assert_select "span.username", false
275 assert_select "div.alert.alert-danger", /your account has been suspended/ do
276 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
280 def test_login_username_password_suspended_upcase
281 user = create(:user, :suspended)
283 try_password_login user.display_name.upcase, "test"
285 assert_template "sessions/new"
286 assert_select "span.username", false
287 assert_select "div.alert.alert-danger", /your account has been suspended/ do
288 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
292 def test_login_username_password_suspended_downcase
293 user = create(:user, :suspended)
295 try_password_login user.display_name.downcase, "test"
297 assert_template "sessions/new"
298 assert_select "span.username", false
299 assert_select "div.alert.alert-danger", /your account has been suspended/ do
300 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
304 def test_login_username_password_blocked
306 create(:user_block, :needs_view, :user => user)
308 try_password_login user.display_name.upcase, "test"
310 assert_template "user_blocks/show"
311 assert_select "span.username", user.display_name
314 def test_login_username_password_blocked_upcase
316 create(:user_block, :needs_view, :user => user)
318 try_password_login user.display_name, "test"
320 assert_template "user_blocks/show"
321 assert_select "span.username", user.display_name
324 def test_login_username_password_blocked_downcase
326 create(:user_block, :needs_view, :user => user)
328 try_password_login user.display_name.downcase, "test"
330 assert_template "user_blocks/show"
331 assert_select "span.username", user.display_name
334 def test_login_email_password_remember_me
337 try_password_login user.email, "test", "yes"
339 assert_template "changesets/history"
340 assert_select "span.username", user.display_name
341 assert session.key?(:_remember_for)
344 def test_login_username_password_remember_me
347 try_password_login user.display_name, "test", "yes"
349 assert_template "changesets/history"
350 assert_select "span.username", user.display_name
351 assert session.key?(:_remember_for)
354 def test_login_google_success
355 user = create(:user, :auth_provider => "google", :auth_uid => "1234567890")
356 OmniAuth.config.add_mock(:google, :uid => user.auth_uid, :extra => {
357 :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
360 get "/login", :params => { :referer => "/history" }
361 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
363 assert_response :success
364 assert_template "sessions/new"
365 post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
366 assert_redirected_to auth_success_path(:provider => "google")
368 assert_response :redirect
370 assert_response :success
371 assert_template "changesets/history"
372 assert_select "span.username", user.display_name
375 def test_login_google_pending
376 user = create(:user, :pending, :auth_provider => "google", :auth_uid => "1234567890")
377 OmniAuth.config.add_mock(:google, :uid => user.auth_uid, :extra => {
378 :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
381 get "/login", :params => { :referer => "/history" }
382 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
384 assert_response :success
385 assert_template "sessions/new"
386 post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
387 assert_redirected_to auth_success_path(:provider => "google")
389 assert_response :redirect
391 assert_response :success
392 assert_template "confirm"
395 def test_login_google_suspended
396 user = create(:user, :suspended, :auth_provider => "google", :auth_uid => "1234567890")
397 OmniAuth.config.add_mock(:google, :uid => user.auth_uid, :extra => {
398 :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
401 get "/login", :params => { :referer => "/history" }
402 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
404 assert_response :success
405 assert_template "sessions/new"
406 post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
407 assert_redirected_to auth_success_path(:provider => "google")
409 assert_response :redirect
411 assert_response :success
412 assert_template "sessions/new"
413 assert_select "span.username", false
414 assert_select "div.alert.alert-danger", /your account has been suspended/ do
415 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
419 def test_login_google_blocked
420 user = create(:user, :auth_provider => "google", :auth_uid => "1234567890")
421 create(:user_block, :needs_view, :user => user)
422 OmniAuth.config.add_mock(:google, :uid => user.auth_uid, :extra => {
423 :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
426 get "/login", :params => { :referer => "/history" }
427 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
429 assert_response :success
430 assert_template "sessions/new"
431 post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
432 assert_redirected_to auth_success_path(:provider => "google")
434 assert_response :redirect
436 assert_response :success
437 assert_template "user_blocks/show"
438 assert_select "span.username", user.display_name
441 def test_login_google_connection_failed
442 OmniAuth.config.mock_auth[:google] = :connection_failed
444 get "/login", :params => { :referer => "/history" }
445 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
447 assert_response :success
448 assert_template "sessions/new"
449 post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
450 assert_redirected_to auth_success_path(:provider => "google")
452 assert_redirected_to auth_failure_path(:strategy => "google", :message => "connection_failed", :origin => "/login?referer=%2Fhistory")
454 assert_response :redirect
456 assert_response :success
457 assert_template "sessions/new"
458 assert_select "div.alert.alert-danger", "Connection to authentication provider failed"
459 assert_select "span.username", false
462 def test_login_google_invalid_credentials
463 OmniAuth.config.mock_auth[:google] = :invalid_credentials
465 get "/login", :params => { :referer => "/history" }
466 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
468 assert_response :success
469 assert_template "sessions/new"
470 post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
471 assert_redirected_to auth_success_path(:provider => "google")
473 assert_redirected_to auth_failure_path(:strategy => "google", :message => "invalid_credentials", :origin => "/login?referer=%2Fhistory")
475 assert_response :redirect
477 assert_response :success
478 assert_template "sessions/new"
479 assert_select "div.alert.alert-danger", "Invalid authentication credentials"
480 assert_select "span.username", false
483 def test_login_google_unknown
484 OmniAuth.config.add_mock(:google, :uid => "987654321", :extra => {
485 :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
488 get "/login", :params => { :referer => "/history" }
489 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
491 assert_response :success
492 assert_template "sessions/new"
493 post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
494 assert_redirected_to auth_success_path(:provider => "google")
496 assert_response :redirect
498 assert_response :success
499 assert_template "users/new"
500 assert_select "span.username", false
503 def test_login_google_upgrade
504 user = create(:user, :auth_provider => "openid", :auth_uid => "http://example.com/john.doe")
505 OmniAuth.config.add_mock(:google, :uid => "987654321", :extra => {
506 :id_info => { "openid_id" => user.auth_uid }
509 get "/login", :params => { :referer => "/history" }
510 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
512 assert_response :success
513 assert_template "sessions/new"
514 post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
515 assert_redirected_to auth_success_path(:provider => "google")
517 assert_response :redirect
519 assert_response :success
520 assert_template "changesets/history"
521 assert_select "span.username", user.display_name
523 u = User.find_by(:display_name => user.display_name)
524 assert_equal "google", u.auth_provider
525 assert_equal "987654321", u.auth_uid
528 def test_login_apple_success
529 user = create(:user, :auth_provider => "apple", :auth_uid => "1234567890")
530 OmniAuth.config.add_mock(:apple, :uid => user.auth_uid, :extra => {
531 :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
534 get "/login", :params => { :referer => "/history" }
535 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
537 assert_response :success
538 assert_template "sessions/new"
539 post auth_path(:provider => "apple", :origin => "/login?referer=%2Fhistory", :referer => "/history")
540 assert_redirected_to auth_success_path(:provider => "apple")
542 assert_response :redirect
544 assert_response :success
545 assert_template "changesets/history"
546 assert_select "span.username", user.display_name
549 def test_login_apple_pending
550 user = create(:user, :pending, :auth_provider => "apple", :auth_uid => "1234567890")
551 OmniAuth.config.add_mock(:apple, :uid => user.auth_uid, :extra => {
552 :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
555 get "/login", :params => { :referer => "/history" }
556 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
558 assert_response :success
559 assert_template "sessions/new"
560 post auth_path(:provider => "apple", :origin => "/login?referer=%2Fhistory", :referer => "/history")
561 assert_redirected_to auth_success_path(:provider => "apple")
563 assert_response :redirect
565 assert_response :success
566 assert_template "confirm"
569 def test_login_apple_suspended
570 user = create(:user, :suspended, :auth_provider => "apple", :auth_uid => "1234567890")
571 OmniAuth.config.add_mock(:apple, :uid => user.auth_uid, :extra => {
572 :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
575 get "/login", :params => { :referer => "/history" }
576 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
578 assert_response :success
579 assert_template "sessions/new"
580 post auth_path(:provider => "apple", :origin => "/login?referer=%2Fhistory", :referer => "/history")
581 assert_redirected_to auth_success_path(:provider => "apple")
583 assert_response :redirect
585 assert_response :success
586 assert_template "sessions/new"
587 assert_select "span.username", false
588 assert_select "div.alert.alert-danger", /your account has been suspended/ do
589 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
593 def test_login_apple_blocked
594 user = create(:user, :auth_provider => "apple", :auth_uid => "1234567890")
595 create(:user_block, :needs_view, :user => user)
596 OmniAuth.config.add_mock(:apple, :uid => user.auth_uid, :extra => {
597 :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
600 get "/login", :params => { :referer => "/history" }
601 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
603 assert_response :success
604 assert_template "sessions/new"
605 post auth_path(:provider => "apple", :origin => "/login?referer=%2Fhistory", :referer => "/history")
606 assert_redirected_to auth_success_path(:provider => "apple")
608 assert_response :redirect
610 assert_response :success
611 assert_template "user_blocks/show"
612 assert_select "span.username", user.display_name
615 def test_login_apple_connection_failed
616 OmniAuth.config.mock_auth[:apple] = :connection_failed
618 get "/login", :params => { :referer => "/history" }
619 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
621 assert_response :success
622 assert_template "sessions/new"
623 post auth_path(:provider => "apple", :origin => "/login?referer=%2Fhistory", :referer => "/history")
624 assert_redirected_to auth_success_path(:provider => "apple")
626 assert_redirected_to auth_failure_path(:strategy => "apple", :message => "connection_failed", :origin => "/login?referer=%2Fhistory")
628 assert_response :redirect
630 assert_response :success
631 assert_template "sessions/new"
632 assert_select "div.alert.alert-danger", "Connection to authentication provider failed"
633 assert_select "span.username", false
636 def test_login_apple_invalid_credentials
637 OmniAuth.config.mock_auth[:apple] = :invalid_credentials
639 get "/login", :params => { :referer => "/history" }
640 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
642 assert_response :success
643 assert_template "sessions/new"
644 post auth_path(:provider => "apple", :origin => "/login?referer=%2Fhistory", :referer => "/history")
645 assert_redirected_to auth_success_path(:provider => "apple")
647 assert_redirected_to auth_failure_path(:strategy => "apple", :message => "invalid_credentials", :origin => "/login?referer=%2Fhistory")
649 assert_response :redirect
651 assert_response :success
652 assert_template "sessions/new"
653 assert_select "div.alert.alert-danger", "Invalid authentication credentials"
654 assert_select "span.username", false
657 def test_login_apple_unknown
658 OmniAuth.config.add_mock(:apple, :uid => "987654321", :extra => {
659 :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
662 get "/login", :params => { :referer => "/history" }
663 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
665 assert_response :success
666 assert_template "sessions/new"
667 post auth_path(:provider => "apple", :origin => "/login?referer=%2Fhistory", :referer => "/history")
668 assert_redirected_to auth_success_path(:provider => "apple")
670 assert_response :redirect
672 assert_response :success
673 assert_template "users/new"
674 assert_select "span.username", false
677 def test_login_facebook_success
678 user = create(:user, :auth_provider => "facebook", :auth_uid => "1234567890")
679 OmniAuth.config.add_mock(:facebook, :uid => user.auth_uid)
681 get "/login", :params => { :referer => "/history" }
682 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
684 assert_response :success
685 assert_template "sessions/new"
686 post auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history")
687 assert_redirected_to auth_success_path(:provider => "facebook")
689 assert_response :redirect
691 assert_response :success
692 assert_template "changesets/history"
693 assert_select "span.username", user.display_name
696 def test_login_facebook_pending
697 user = create(:user, :pending, :auth_provider => "facebook", :auth_uid => "1234567890")
698 OmniAuth.config.add_mock(:facebook, :uid => user.auth_uid)
700 get "/login", :params => { :referer => "/history" }
701 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
703 assert_response :success
704 assert_template "sessions/new"
705 post auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history")
706 assert_redirected_to auth_success_path(:provider => "facebook")
708 assert_response :redirect
710 assert_response :success
711 assert_template "confirm"
714 def test_login_facebook_suspended
715 user = create(:user, :suspended, :auth_provider => "facebook", :auth_uid => "1234567890")
716 OmniAuth.config.add_mock(:facebook, :uid => user.auth_uid)
718 get "/login", :params => { :referer => "/history" }
719 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
721 assert_response :success
722 assert_template "sessions/new"
723 post auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history")
724 assert_redirected_to auth_success_path(:provider => "facebook")
726 assert_response :redirect
728 assert_response :success
729 assert_template "sessions/new"
730 assert_select "span.username", false
731 assert_select "div.alert.alert-danger", /your account has been suspended/ do
732 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
736 def test_login_facebook_blocked
737 user = create(:user, :auth_provider => "facebook", :auth_uid => "1234567890")
738 create(:user_block, :needs_view, :user => user)
739 OmniAuth.config.add_mock(:facebook, :uid => user.auth_uid)
741 get "/login", :params => { :referer => "/history" }
742 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
744 assert_response :success
745 assert_template "sessions/new"
746 post auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history")
747 assert_redirected_to auth_success_path(:provider => "facebook")
749 assert_response :redirect
751 assert_response :success
752 assert_template "user_blocks/show"
753 assert_select "span.username", user.display_name
756 def test_login_facebook_connection_failed
757 OmniAuth.config.mock_auth[:facebook] = :connection_failed
759 get "/login", :params => { :referer => "/history" }
760 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
762 assert_response :success
763 assert_template "sessions/new"
764 post auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history")
765 assert_redirected_to auth_success_path(:provider => "facebook")
767 assert_redirected_to auth_failure_path(:strategy => "facebook", :message => "connection_failed", :origin => "/login?referer=%2Fhistory")
769 assert_response :redirect
771 assert_response :success
772 assert_template "sessions/new"
773 assert_select "div.alert.alert-danger", "Connection to authentication provider failed"
774 assert_select "span.username", false
777 def test_login_facebook_invalid_credentials
778 OmniAuth.config.mock_auth[:facebook] = :invalid_credentials
780 get "/login", :params => { :referer => "/history" }
781 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
783 assert_response :success
784 assert_template "sessions/new"
785 post auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history")
786 assert_redirected_to auth_success_path(:provider => "facebook")
788 assert_redirected_to auth_failure_path(:strategy => "facebook", :message => "invalid_credentials", :origin => "/login?referer=%2Fhistory")
790 assert_response :redirect
792 assert_response :success
793 assert_template "sessions/new"
794 assert_select "div.alert.alert-danger", "Invalid authentication credentials"
795 assert_select "span.username", false
798 def test_login_facebook_unknown
799 OmniAuth.config.add_mock(:facebook, :uid => "987654321")
801 get "/login", :params => { :referer => "/history" }
802 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
804 assert_response :success
805 assert_template "sessions/new"
806 post auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history")
807 assert_redirected_to auth_success_path(:provider => "facebook")
809 assert_response :redirect
811 assert_response :success
812 assert_template "users/new"
813 assert_select "span.username", false
816 def test_login_microsoft_success
817 user = create(:user, :auth_provider => "microsoft", :auth_uid => "1234567890")
818 OmniAuth.config.add_mock(:microsoft, :uid => user.auth_uid)
820 get "/login", :params => { :referer => "/history" }
821 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
823 assert_response :success
824 assert_template "sessions/new"
825 post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history")
826 assert_redirected_to auth_success_path(:provider => "microsoft")
828 assert_response :redirect
830 assert_response :success
831 assert_template "changesets/history"
832 assert_select "span.username", user.display_name
835 def test_login_microsoft_pending
836 user = create(:user, :pending, :auth_provider => "microsoft", :auth_uid => "1234567890")
837 OmniAuth.config.add_mock(:microsoft, :uid => user.auth_uid)
839 get "/login", :params => { :referer => "/history" }
840 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
842 assert_response :success
843 assert_template "sessions/new"
844 post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history")
845 assert_redirected_to auth_success_path(:provider => "microsoft")
847 assert_response :redirect
849 assert_response :success
850 assert_template "confirm"
853 def test_login_microsoft_suspended
854 user = create(:user, :suspended, :auth_provider => "microsoft", :auth_uid => "1234567890")
855 OmniAuth.config.add_mock(:microsoft, :uid => user.auth_uid)
857 get "/login", :params => { :referer => "/history" }
858 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
860 assert_response :success
861 assert_template "sessions/new"
862 post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history")
863 assert_redirected_to auth_success_path(:provider => "microsoft")
865 assert_response :redirect
867 assert_response :success
868 assert_template "sessions/new"
869 assert_select "span.username", false
870 assert_select "div.alert.alert-danger", /your account has been suspended/ do
871 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
875 def test_login_microsoft_blocked
876 user = create(:user, :auth_provider => "microsoft", :auth_uid => "1234567890")
877 create(:user_block, :needs_view, :user => user)
878 OmniAuth.config.add_mock(:microsoft, :uid => user.auth_uid)
880 get "/login", :params => { :referer => "/history" }
881 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
883 assert_response :success
884 assert_template "sessions/new"
885 post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history")
886 assert_redirected_to auth_success_path(:provider => "microsoft")
888 assert_response :redirect
890 assert_response :success
891 assert_template "user_blocks/show"
892 assert_select "span.username", user.display_name
895 def test_login_microsoft_connection_failed
896 OmniAuth.config.mock_auth[:microsoft] = :connection_failed
898 get "/login", :params => { :referer => "/history" }
899 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
901 assert_response :success
902 assert_template "sessions/new"
903 post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history")
904 assert_redirected_to auth_success_path(:provider => "microsoft")
906 assert_redirected_to auth_failure_path(:strategy => "microsoft", :message => "connection_failed", :origin => "/login?referer=%2Fhistory")
908 assert_response :redirect
910 assert_response :success
911 assert_template "sessions/new"
912 assert_select "div.alert.alert-danger", "Connection to authentication provider failed"
913 assert_select "span.username", false
916 def test_login_microsoft_invalid_credentials
917 OmniAuth.config.mock_auth[:microsoft] = :invalid_credentials
919 get "/login", :params => { :referer => "/history" }
920 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
922 assert_response :success
923 assert_template "sessions/new"
924 post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history")
925 assert_redirected_to auth_success_path(:provider => "microsoft")
927 assert_redirected_to auth_failure_path(:strategy => "microsoft", :message => "invalid_credentials", :origin => "/login?referer=%2Fhistory")
929 assert_response :redirect
931 assert_response :success
932 assert_template "sessions/new"
933 assert_select "div.alert.alert-danger", "Invalid authentication credentials"
934 assert_select "span.username", false
937 def test_login_microsoft_unknown
938 OmniAuth.config.add_mock(:microsoft, :uid => "987654321")
940 get "/login", :params => { :referer => "/history" }
941 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
943 assert_response :success
944 assert_template "sessions/new"
945 post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history")
946 assert_redirected_to auth_success_path(:provider => "microsoft")
948 assert_response :redirect
950 assert_response :success
951 assert_template "users/new"
952 assert_select "span.username", false
955 def test_login_github_success
956 user = create(:user, :auth_provider => "github", :auth_uid => "1234567890")
957 OmniAuth.config.add_mock(:github, :uid => user.auth_uid)
959 get "/login", :params => { :referer => "/history" }
960 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
962 assert_response :success
963 assert_template "sessions/new"
964 post auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history")
965 assert_redirected_to auth_success_path(:provider => "github")
967 assert_response :redirect
969 assert_response :success
970 assert_template "changesets/history"
971 assert_select "span.username", user.display_name
974 def test_login_github_pending
975 user = create(:user, :pending, :auth_provider => "github", :auth_uid => "1234567890")
976 OmniAuth.config.add_mock(:github, :uid => user.auth_uid)
978 get "/login", :params => { :referer => "/history" }
979 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
981 assert_response :success
982 assert_template "sessions/new"
983 post auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history")
984 assert_redirected_to auth_success_path(:provider => "github")
986 assert_response :redirect
988 assert_response :success
989 assert_template "confirm"
992 def test_login_github_suspended
993 user = create(:user, :suspended, :auth_provider => "github", :auth_uid => "1234567890")
994 OmniAuth.config.add_mock(:github, :uid => user.auth_uid)
996 get "/login", :params => { :referer => "/history" }
997 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
999 assert_response :success
1000 assert_template "sessions/new"
1001 post auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1002 assert_redirected_to auth_success_path(:provider => "github")
1004 assert_response :redirect
1006 assert_response :success
1007 assert_template "sessions/new"
1008 assert_select "span.username", false
1009 assert_select "div.alert.alert-danger", /your account has been suspended/ do
1010 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
1014 def test_login_github_blocked
1015 user = create(:user, :auth_provider => "github", :auth_uid => "1234567890")
1016 create(:user_block, :needs_view, :user => user)
1017 OmniAuth.config.add_mock(:github, :uid => user.auth_uid)
1019 get "/login", :params => { :referer => "/history" }
1020 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1022 assert_response :success
1023 assert_template "sessions/new"
1024 post auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1025 assert_redirected_to auth_success_path(:provider => "github")
1027 assert_response :redirect
1029 assert_response :success
1030 assert_template "user_blocks/show"
1031 assert_select "span.username", user.display_name
1034 def test_login_github_connection_failed
1035 OmniAuth.config.mock_auth[:github] = :connection_failed
1037 get "/login", :params => { :referer => "/history" }
1038 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1040 assert_response :success
1041 assert_template "sessions/new"
1042 post auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1043 assert_redirected_to auth_success_path(:provider => "github")
1045 assert_redirected_to auth_failure_path(:strategy => "github", :message => "connection_failed", :origin => "/login?referer=%2Fhistory")
1047 assert_response :redirect
1049 assert_response :success
1050 assert_template "sessions/new"
1051 assert_select "div.alert.alert-danger", "Connection to authentication provider failed"
1052 assert_select "span.username", false
1055 def test_login_github_invalid_credentials
1056 OmniAuth.config.mock_auth[:github] = :invalid_credentials
1058 get "/login", :params => { :referer => "/history" }
1059 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1061 assert_response :success
1062 assert_template "sessions/new"
1063 post auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1064 assert_redirected_to auth_success_path(:provider => "github")
1066 assert_redirected_to auth_failure_path(:strategy => "github", :message => "invalid_credentials", :origin => "/login?referer=%2Fhistory")
1068 assert_response :redirect
1070 assert_response :success
1071 assert_template "sessions/new"
1072 assert_select "div.alert.alert-danger", "Invalid authentication credentials"
1073 assert_select "span.username", false
1076 def test_login_github_unknown
1077 OmniAuth.config.add_mock(:github, :uid => "987654321")
1079 get "/login", :params => { :referer => "/history" }
1080 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1082 assert_response :success
1083 assert_template "sessions/new"
1084 post auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1085 assert_redirected_to auth_success_path(:provider => "github")
1087 assert_response :redirect
1089 assert_response :success
1090 assert_template "users/new"
1091 assert_select "span.username", false
1094 def test_login_wikipedia_success
1095 user = create(:user, :auth_provider => "wikipedia", :auth_uid => "1234567890")
1096 OmniAuth.config.add_mock(:wikipedia, :uid => user.auth_uid)
1098 get "/login", :params => { :referer => "/history" }
1099 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1101 assert_response :success
1102 assert_template "sessions/new"
1103 post auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1104 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1106 assert_response :redirect
1108 assert_response :success
1109 assert_template "changesets/history"
1110 assert_select "span.username", user.display_name
1113 def test_login_wikipedia_pending
1114 user = create(:user, :pending, :auth_provider => "wikipedia", :auth_uid => "1234567890")
1115 OmniAuth.config.add_mock(:wikipedia, :uid => user.auth_uid)
1117 get "/login", :params => { :referer => "/history" }
1118 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1120 assert_response :success
1121 assert_template "sessions/new"
1122 post auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1123 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1125 assert_response :redirect
1127 assert_response :success
1128 assert_template "confirm"
1131 def test_login_wikipedia_suspended
1132 user = create(:user, :suspended, :auth_provider => "wikipedia", :auth_uid => "1234567890")
1133 OmniAuth.config.add_mock(:wikipedia, :uid => user.auth_uid)
1135 get "/login", :params => { :referer => "/history" }
1136 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1138 assert_response :success
1139 assert_template "sessions/new"
1140 post auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1141 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1143 assert_response :redirect
1145 assert_response :success
1146 assert_template "sessions/new"
1147 assert_select "span.username", false
1148 assert_select "div.alert.alert-danger", /your account has been suspended/ do
1149 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
1153 def test_login_wikipedia_blocked
1154 user = create(:user, :auth_provider => "wikipedia", :auth_uid => "1234567890")
1155 create(:user_block, :needs_view, :user => user)
1156 OmniAuth.config.add_mock(:wikipedia, :uid => user.auth_uid)
1158 get "/login", :params => { :referer => "/history" }
1159 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1161 assert_response :success
1162 assert_template "sessions/new"
1163 post auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1164 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1166 assert_response :redirect
1168 assert_response :success
1169 assert_template "user_blocks/show"
1170 assert_select "span.username", user.display_name
1173 def test_login_wikipedia_connection_failed
1174 OmniAuth.config.mock_auth[:wikipedia] = :connection_failed
1176 get "/login", :params => { :referer => "/history" }
1177 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1179 assert_response :success
1180 assert_template "sessions/new"
1181 post auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1182 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1184 assert_redirected_to auth_failure_path(:strategy => "wikipedia", :message => "connection_failed", :origin => "/login?referer=%2Fhistory")
1186 assert_response :redirect
1188 assert_response :success
1189 assert_template "sessions/new"
1190 assert_select "div.alert.alert-danger", "Connection to authentication provider failed"
1191 assert_select "span.username", false
1194 def test_login_wikipedia_invalid_credentials
1195 OmniAuth.config.mock_auth[:wikipedia] = :invalid_credentials
1197 get "/login", :params => { :referer => "/history" }
1198 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1200 assert_response :success
1201 assert_template "sessions/new"
1202 post auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1203 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1205 assert_redirected_to auth_failure_path(:strategy => "wikipedia", :message => "invalid_credentials", :origin => "/login?referer=%2Fhistory")
1207 assert_response :redirect
1209 assert_response :success
1210 assert_template "sessions/new"
1211 assert_select "div.alert.alert-danger", "Invalid authentication credentials"
1212 assert_select "span.username", false
1215 def test_login_wikipedia_unknown
1216 OmniAuth.config.add_mock(:wikipedia, :uid => "987654321")
1218 get "/login", :params => { :referer => "/history" }
1219 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1221 assert_response :success
1222 assert_template "sessions/new"
1223 post auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1224 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1226 assert_response :redirect
1228 assert_response :success
1229 assert_template "users/new"
1230 assert_select "span.username", false
1235 def try_password_login(username, password, remember_me = nil)
1237 assert_redirected_to login_path(:cookie_test => true)
1239 assert_response :success
1240 assert_template "sessions/new"
1241 assert_select "input#username", 1 do
1242 assert_select "[value]", false
1244 assert_select "input#password", 1 do
1245 assert_select "[value=?]", ""
1247 assert_select "input#remember_me", 1 do
1248 assert_select "[checked]", false
1251 post "/login", :params => { :username => username, :password => "wrong", :remember_me => remember_me, :referer => "/history" }
1252 assert_response :redirect
1254 assert_response :success
1255 assert_template "sessions/new"
1256 assert_select "input#username", 1 do
1257 assert_select "[value=?]", username
1259 assert_select "input#password", 1 do
1260 assert_select "[value=?]", ""
1262 assert_select "input#remember_me", 1 do
1263 assert_select "[checked]", remember_me == "yes"
1266 post "/login", :params => { :username => username, :password => password, :remember_me => remember_me, :referer => "/history" }
1267 assert_response :redirect
1269 assert_response :success