3 class LoginTest < ActionDispatch::IntegrationTest
5 OmniAuth.config.test_mode = true
9 OmniAuth.config.mock_auth[:google] = nil
10 OmniAuth.config.mock_auth[:apple] = nil
11 OmniAuth.config.mock_auth[:facebook] = nil
12 OmniAuth.config.mock_auth[:microsoft] = nil
13 OmniAuth.config.mock_auth[:github] = nil
14 OmniAuth.config.mock_auth[:wikipedia] = nil
15 OmniAuth.config.test_mode = false
18 # It's possible to have multiple accounts in the database with only differences
19 # in email case, for hysterical raisins. We need to bypass the validation checks to
20 # create users like this nowadays.
21 def test_login_email_password_duplicate
22 # Attempt to log in as one user, it should work
24 _uppercase_user = build(:user, :email => user.email.upcase).tap { |u| u.save(:validate => false) }
26 try_password_login user.email, "test"
28 assert_template "changesets/history"
29 assert_select "span.username", user.display_name
32 def test_login_email_password_duplicate_upcase
33 # Attempt to log in as the uppercase_user, it should also work
35 uppercase_user = build(:user, :email => user.email.upcase).tap { |u| u.save(:validate => false) }
37 try_password_login uppercase_user.email, "test"
39 assert_template "changesets/history"
40 assert_select "span.username", uppercase_user.display_name
43 def test_login_email_password_duplicate_titlecase
44 # When there's no exact match for case, and two possible users, it should fail
46 _uppercase_user = build(:user, :email => user.email.upcase).tap { |u| u.save(:validate => false) }
48 try_password_login user.email.titlecase, "test"
50 assert_template "sessions/new"
51 assert_select "span.username", false
54 # When there are no duplicate emails, any variation of cases should work
55 def test_login_email_password
58 try_password_login user.email, "test"
60 assert_template "changesets/history"
61 assert_select "span.username", user.display_name
64 def test_login_email_password_upcase
67 try_password_login user.email.upcase, "test"
69 assert_template "changesets/history"
70 assert_select "span.username", user.display_name
73 def test_login_email_password_titlecase
76 try_password_login user.email.titlecase, "test"
78 assert_template "changesets/history"
79 assert_select "span.username", user.display_name
82 def test_login_email_password_pending
83 user = create(:user, :pending)
85 try_password_login user.email, "test"
87 assert_template "confirm"
88 assert_select "span.username", false
91 def test_login_email_password_pending_upcase
92 user = create(:user, :pending)
94 try_password_login user.email.upcase, "test"
96 assert_template "confirm"
97 assert_select "span.username", false
100 def test_login_email_password_pending_titlecase
101 user = create(:user, :pending)
103 try_password_login user.email.titlecase, "test"
105 assert_template "confirm"
106 assert_select "span.username", false
109 def test_login_email_password_suspended
110 user = create(:user, :suspended)
112 try_password_login user.email, "test"
114 assert_template "sessions/new"
115 assert_select "span.username", false
116 assert_select "div.alert.alert-danger", /your account has been suspended/ do
117 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
121 def test_login_email_password_suspended_upcase
122 user = create(:user, :suspended)
124 try_password_login user.email.upcase, "test"
126 assert_template "sessions/new"
127 assert_select "span.username", false
128 assert_select "div.alert.alert-danger", /your account has been suspended/ do
129 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
133 def test_login_email_password_suspended_titlecase
134 user = create(:user, :suspended)
136 try_password_login user.email.titlecase, "test"
138 assert_template "sessions/new"
139 assert_select "span.username", false
140 assert_select "div.alert.alert-danger", /your account has been suspended/ do
141 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
145 def test_login_email_password_blocked
147 create(:user_block, :needs_view, :user => user)
149 try_password_login user.email, "test"
151 assert_template "user_blocks/show"
152 assert_select "span.username", user.display_name
155 def test_login_email_password_blocked_upcase
157 create(:user_block, :needs_view, :user => user)
159 try_password_login user.email.upcase, "test"
161 assert_template "user_blocks/show"
162 assert_select "span.username", user.display_name
165 def test_login_email_password_blocked_titlecase
167 create(:user_block, :needs_view, :user => user)
169 try_password_login user.email.titlecase, "test"
171 assert_template "user_blocks/show"
172 assert_select "span.username", user.display_name
175 # As above, it's possible to have multiple accounts in the database with only
176 # differences in display_name case, for hysterical raisins. We need to bypass
177 # the validation checks to create users like this nowadays.
178 def test_login_username_password_duplicate
179 # Attempt to log in as one user, it should work
181 _uppercase_user = build(:user, :display_name => user.display_name.upcase).tap { |u| u.save(:validate => false) }
183 try_password_login user.display_name, "test"
185 assert_template "changesets/history"
186 assert_select "span.username", user.display_name
189 def test_login_username_password_duplicate_upcase
190 # Attempt to log in as the uppercase_user, it should also work
192 uppercase_user = build(:user, :display_name => user.display_name.upcase).tap { |u| u.save(:validate => false) }
194 try_password_login uppercase_user.display_name, "test"
196 assert_template "changesets/history"
197 assert_select "span.username", uppercase_user.display_name
200 def test_login_username_password_duplicate_downcase
201 # When there's no exact match for case, and two possible users, it should fail
203 _uppercase_user = build(:user, :display_name => user.display_name.upcase).tap { |u| u.save(:validate => false) }
205 try_password_login user.display_name.downcase, "test"
207 assert_template "sessions/new"
208 assert_select "span.username", false
211 # When there are no duplicate emails, any variation of cases should work
212 def test_login_username_password
215 try_password_login user.display_name, "test"
217 assert_template "changesets/history"
218 assert_select "span.username", user.display_name
221 def test_login_username_password_upcase
224 try_password_login user.display_name.upcase, "test"
226 assert_template "changesets/history"
227 assert_select "span.username", user.display_name
230 def test_login_username_password_downcase
233 try_password_login user.display_name.downcase, "test"
235 assert_template "changesets/history"
236 assert_select "span.username", user.display_name
239 def test_login_username_password_pending
240 user = create(:user, :pending)
242 try_password_login user.display_name, "test"
244 assert_template "confirm"
245 assert_select "span.username", false
248 def test_login_username_password_pending_upcase
249 user = create(:user, :pending)
251 try_password_login user.display_name.upcase, "test"
253 assert_template "confirm"
254 assert_select "span.username", false
257 def test_login_username_password_pending_downcase
258 user = create(:user, :pending)
260 try_password_login user.display_name.downcase, "test"
262 assert_template "confirm"
263 assert_select "span.username", false
266 def test_login_username_password_suspended
267 user = create(:user, :suspended)
269 try_password_login user.display_name, "test"
271 assert_template "sessions/new"
272 assert_select "span.username", false
273 assert_select "div.alert.alert-danger", /your account has been suspended/ do
274 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
278 def test_login_username_password_suspended_upcase
279 user = create(:user, :suspended)
281 try_password_login user.display_name.upcase, "test"
283 assert_template "sessions/new"
284 assert_select "span.username", false
285 assert_select "div.alert.alert-danger", /your account has been suspended/ do
286 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
290 def test_login_username_password_suspended_downcase
291 user = create(:user, :suspended)
293 try_password_login user.display_name.downcase, "test"
295 assert_template "sessions/new"
296 assert_select "span.username", false
297 assert_select "div.alert.alert-danger", /your account has been suspended/ do
298 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
302 def test_login_username_password_blocked
304 create(:user_block, :needs_view, :user => user)
306 try_password_login user.display_name.upcase, "test"
308 assert_template "user_blocks/show"
309 assert_select "span.username", user.display_name
312 def test_login_username_password_blocked_upcase
314 create(:user_block, :needs_view, :user => user)
316 try_password_login user.display_name, "test"
318 assert_template "user_blocks/show"
319 assert_select "span.username", user.display_name
322 def test_login_username_password_blocked_downcase
324 create(:user_block, :needs_view, :user => user)
326 try_password_login user.display_name.downcase, "test"
328 assert_template "user_blocks/show"
329 assert_select "span.username", user.display_name
332 def test_login_email_password_remember_me
335 try_password_login user.email, "test", "yes"
337 assert_template "changesets/history"
338 assert_select "span.username", user.display_name
339 assert session.key?(:_remember_for)
342 def test_login_username_password_remember_me
345 try_password_login user.display_name, "test", "yes"
347 assert_template "changesets/history"
348 assert_select "span.username", user.display_name
349 assert session.key?(:_remember_for)
352 def test_login_google_success
353 user = create(:user, :auth_provider => "google", :auth_uid => "1234567890")
354 OmniAuth.config.add_mock(:google, :uid => user.auth_uid, :extra => {
355 :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
358 get "/login", :params => { :referer => "/history" }
359 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
361 assert_response :success
362 assert_template "sessions/new"
363 post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
364 assert_redirected_to auth_success_path(:provider => "google")
366 assert_response :redirect
368 assert_response :success
369 assert_template "changesets/history"
370 assert_select "span.username", user.display_name
373 def test_login_google_pending
374 user = create(:user, :pending, :auth_provider => "google", :auth_uid => "1234567890")
375 OmniAuth.config.add_mock(:google, :uid => user.auth_uid, :extra => {
376 :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
379 get "/login", :params => { :referer => "/history" }
380 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
382 assert_response :success
383 assert_template "sessions/new"
384 post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
385 assert_redirected_to auth_success_path(:provider => "google")
387 assert_response :redirect
389 assert_response :success
390 assert_template "confirm"
393 def test_login_google_suspended
394 user = create(:user, :suspended, :auth_provider => "google", :auth_uid => "1234567890")
395 OmniAuth.config.add_mock(:google, :uid => user.auth_uid, :extra => {
396 :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
399 get "/login", :params => { :referer => "/history" }
400 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
402 assert_response :success
403 assert_template "sessions/new"
404 post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
405 assert_redirected_to auth_success_path(:provider => "google")
407 assert_response :redirect
409 assert_response :success
410 assert_template "sessions/new"
411 assert_select "span.username", false
412 assert_select "div.alert.alert-danger", /your account has been suspended/ do
413 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
417 def test_login_google_blocked
418 user = create(:user, :auth_provider => "google", :auth_uid => "1234567890")
419 create(:user_block, :needs_view, :user => user)
420 OmniAuth.config.add_mock(:google, :uid => user.auth_uid, :extra => {
421 :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
424 get "/login", :params => { :referer => "/history" }
425 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
427 assert_response :success
428 assert_template "sessions/new"
429 post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
430 assert_redirected_to auth_success_path(:provider => "google")
432 assert_response :redirect
434 assert_response :success
435 assert_template "user_blocks/show"
436 assert_select "span.username", user.display_name
439 def test_login_google_connection_failed
440 OmniAuth.config.mock_auth[:google] = :connection_failed
442 get "/login", :params => { :referer => "/history" }
443 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
445 assert_response :success
446 assert_template "sessions/new"
447 post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
448 assert_redirected_to auth_success_path(:provider => "google")
450 assert_redirected_to auth_failure_path(:strategy => "google", :message => "connection_failed", :origin => "/login?referer=%2Fhistory")
452 assert_response :redirect
454 assert_response :success
455 assert_template "sessions/new"
456 assert_select "div.alert.alert-danger", "Connection to authentication provider failed"
457 assert_select "span.username", false
460 def test_login_google_invalid_credentials
461 OmniAuth.config.mock_auth[:google] = :invalid_credentials
463 get "/login", :params => { :referer => "/history" }
464 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
466 assert_response :success
467 assert_template "sessions/new"
468 post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
469 assert_redirected_to auth_success_path(:provider => "google")
471 assert_redirected_to auth_failure_path(:strategy => "google", :message => "invalid_credentials", :origin => "/login?referer=%2Fhistory")
473 assert_response :redirect
475 assert_response :success
476 assert_template "sessions/new"
477 assert_select "div.alert.alert-danger", "Invalid authentication credentials"
478 assert_select "span.username", false
481 def test_login_google_unknown
482 OmniAuth.config.add_mock(:google, :uid => "987654321", :extra => {
483 :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
486 get "/login", :params => { :referer => "/history" }
487 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
489 assert_response :success
490 assert_template "sessions/new"
491 post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
492 assert_redirected_to auth_success_path(:provider => "google")
494 assert_response :redirect
496 assert_response :success
497 assert_template "users/new"
498 assert_select "span.username", false
501 def test_login_google_upgrade
502 user = create(:user, :auth_provider => "openid", :auth_uid => "http://example.com/john.doe")
503 OmniAuth.config.add_mock(:google, :uid => "987654321", :extra => {
504 :id_info => { "openid_id" => user.auth_uid }
507 get "/login", :params => { :referer => "/history" }
508 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
510 assert_response :success
511 assert_template "sessions/new"
512 post auth_path(:provider => "google", :origin => "/login?referer=%2Fhistory", :referer => "/history")
513 assert_redirected_to auth_success_path(:provider => "google")
515 assert_response :redirect
517 assert_response :success
518 assert_template "changesets/history"
519 assert_select "span.username", user.display_name
521 u = User.find_by(:display_name => user.display_name)
522 assert_equal "google", u.auth_provider
523 assert_equal "987654321", u.auth_uid
526 def test_login_apple_success
527 user = create(:user, :auth_provider => "apple", :auth_uid => "1234567890")
528 OmniAuth.config.add_mock(:apple, :uid => user.auth_uid, :extra => {
529 :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
532 get "/login", :params => { :referer => "/history" }
533 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
535 assert_response :success
536 assert_template "sessions/new"
537 post auth_path(:provider => "apple", :origin => "/login?referer=%2Fhistory", :referer => "/history")
538 assert_redirected_to auth_success_path(:provider => "apple")
540 assert_response :redirect
542 assert_response :success
543 assert_template "changesets/history"
544 assert_select "span.username", user.display_name
547 def test_login_apple_pending
548 user = create(:user, :pending, :auth_provider => "apple", :auth_uid => "1234567890")
549 OmniAuth.config.add_mock(:apple, :uid => user.auth_uid, :extra => {
550 :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
553 get "/login", :params => { :referer => "/history" }
554 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
556 assert_response :success
557 assert_template "sessions/new"
558 post auth_path(:provider => "apple", :origin => "/login?referer=%2Fhistory", :referer => "/history")
559 assert_redirected_to auth_success_path(:provider => "apple")
561 assert_response :redirect
563 assert_response :success
564 assert_template "confirm"
567 def test_login_apple_suspended
568 user = create(:user, :suspended, :auth_provider => "apple", :auth_uid => "1234567890")
569 OmniAuth.config.add_mock(:apple, :uid => user.auth_uid, :extra => {
570 :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
573 get "/login", :params => { :referer => "/history" }
574 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
576 assert_response :success
577 assert_template "sessions/new"
578 post auth_path(:provider => "apple", :origin => "/login?referer=%2Fhistory", :referer => "/history")
579 assert_redirected_to auth_success_path(:provider => "apple")
581 assert_response :redirect
583 assert_response :success
584 assert_template "sessions/new"
585 assert_select "span.username", false
586 assert_select "div.alert.alert-danger", /your account has been suspended/ do
587 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
591 def test_login_apple_blocked
592 user = create(:user, :auth_provider => "apple", :auth_uid => "1234567890")
593 create(:user_block, :needs_view, :user => user)
594 OmniAuth.config.add_mock(:apple, :uid => user.auth_uid, :extra => {
595 :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
598 get "/login", :params => { :referer => "/history" }
599 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
601 assert_response :success
602 assert_template "sessions/new"
603 post auth_path(:provider => "apple", :origin => "/login?referer=%2Fhistory", :referer => "/history")
604 assert_redirected_to auth_success_path(:provider => "apple")
606 assert_response :redirect
608 assert_response :success
609 assert_template "user_blocks/show"
610 assert_select "span.username", user.display_name
613 def test_login_apple_connection_failed
614 OmniAuth.config.mock_auth[:apple] = :connection_failed
616 get "/login", :params => { :referer => "/history" }
617 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
619 assert_response :success
620 assert_template "sessions/new"
621 post auth_path(:provider => "apple", :origin => "/login?referer=%2Fhistory", :referer => "/history")
622 assert_redirected_to auth_success_path(:provider => "apple")
624 assert_redirected_to auth_failure_path(:strategy => "apple", :message => "connection_failed", :origin => "/login?referer=%2Fhistory")
626 assert_response :redirect
628 assert_response :success
629 assert_template "sessions/new"
630 assert_select "div.alert.alert-danger", "Connection to authentication provider failed"
631 assert_select "span.username", false
634 def test_login_apple_invalid_credentials
635 OmniAuth.config.mock_auth[:apple] = :invalid_credentials
637 get "/login", :params => { :referer => "/history" }
638 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
640 assert_response :success
641 assert_template "sessions/new"
642 post auth_path(:provider => "apple", :origin => "/login?referer=%2Fhistory", :referer => "/history")
643 assert_redirected_to auth_success_path(:provider => "apple")
645 assert_redirected_to auth_failure_path(:strategy => "apple", :message => "invalid_credentials", :origin => "/login?referer=%2Fhistory")
647 assert_response :redirect
649 assert_response :success
650 assert_template "sessions/new"
651 assert_select "div.alert.alert-danger", "Invalid authentication credentials"
652 assert_select "span.username", false
655 def test_login_apple_unknown
656 OmniAuth.config.add_mock(:apple, :uid => "987654321", :extra => {
657 :id_info => { "openid_id" => "http://localhost:1123/fred.bloggs" }
660 get "/login", :params => { :referer => "/history" }
661 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
663 assert_response :success
664 assert_template "sessions/new"
665 post auth_path(:provider => "apple", :origin => "/login?referer=%2Fhistory", :referer => "/history")
666 assert_redirected_to auth_success_path(:provider => "apple")
668 assert_response :redirect
670 assert_response :success
671 assert_template "users/new"
672 assert_select "span.username", false
675 def test_login_facebook_success
676 user = create(:user, :auth_provider => "facebook", :auth_uid => "1234567890")
677 OmniAuth.config.add_mock(:facebook, :uid => user.auth_uid)
679 get "/login", :params => { :referer => "/history" }
680 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
682 assert_response :success
683 assert_template "sessions/new"
684 post auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history")
685 assert_redirected_to auth_success_path(:provider => "facebook")
687 assert_response :redirect
689 assert_response :success
690 assert_template "changesets/history"
691 assert_select "span.username", user.display_name
694 def test_login_facebook_pending
695 user = create(:user, :pending, :auth_provider => "facebook", :auth_uid => "1234567890")
696 OmniAuth.config.add_mock(:facebook, :uid => user.auth_uid)
698 get "/login", :params => { :referer => "/history" }
699 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
701 assert_response :success
702 assert_template "sessions/new"
703 post auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history")
704 assert_redirected_to auth_success_path(:provider => "facebook")
706 assert_response :redirect
708 assert_response :success
709 assert_template "confirm"
712 def test_login_facebook_suspended
713 user = create(:user, :suspended, :auth_provider => "facebook", :auth_uid => "1234567890")
714 OmniAuth.config.add_mock(:facebook, :uid => user.auth_uid)
716 get "/login", :params => { :referer => "/history" }
717 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
719 assert_response :success
720 assert_template "sessions/new"
721 post auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history")
722 assert_redirected_to auth_success_path(:provider => "facebook")
724 assert_response :redirect
726 assert_response :success
727 assert_template "sessions/new"
728 assert_select "span.username", false
729 assert_select "div.alert.alert-danger", /your account has been suspended/ do
730 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
734 def test_login_facebook_blocked
735 user = create(:user, :auth_provider => "facebook", :auth_uid => "1234567890")
736 create(:user_block, :needs_view, :user => user)
737 OmniAuth.config.add_mock(:facebook, :uid => user.auth_uid)
739 get "/login", :params => { :referer => "/history" }
740 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
742 assert_response :success
743 assert_template "sessions/new"
744 post auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history")
745 assert_redirected_to auth_success_path(:provider => "facebook")
747 assert_response :redirect
749 assert_response :success
750 assert_template "user_blocks/show"
751 assert_select "span.username", user.display_name
754 def test_login_facebook_connection_failed
755 OmniAuth.config.mock_auth[:facebook] = :connection_failed
757 get "/login", :params => { :referer => "/history" }
758 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
760 assert_response :success
761 assert_template "sessions/new"
762 post auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history")
763 assert_redirected_to auth_success_path(:provider => "facebook")
765 assert_redirected_to auth_failure_path(:strategy => "facebook", :message => "connection_failed", :origin => "/login?referer=%2Fhistory")
767 assert_response :redirect
769 assert_response :success
770 assert_template "sessions/new"
771 assert_select "div.alert.alert-danger", "Connection to authentication provider failed"
772 assert_select "span.username", false
775 def test_login_facebook_invalid_credentials
776 OmniAuth.config.mock_auth[:facebook] = :invalid_credentials
778 get "/login", :params => { :referer => "/history" }
779 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
781 assert_response :success
782 assert_template "sessions/new"
783 post auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history")
784 assert_redirected_to auth_success_path(:provider => "facebook")
786 assert_redirected_to auth_failure_path(:strategy => "facebook", :message => "invalid_credentials", :origin => "/login?referer=%2Fhistory")
788 assert_response :redirect
790 assert_response :success
791 assert_template "sessions/new"
792 assert_select "div.alert.alert-danger", "Invalid authentication credentials"
793 assert_select "span.username", false
796 def test_login_facebook_unknown
797 OmniAuth.config.add_mock(:facebook, :uid => "987654321")
799 get "/login", :params => { :referer => "/history" }
800 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
802 assert_response :success
803 assert_template "sessions/new"
804 post auth_path(:provider => "facebook", :origin => "/login?referer=%2Fhistory", :referer => "/history")
805 assert_redirected_to auth_success_path(:provider => "facebook")
807 assert_response :redirect
809 assert_response :success
810 assert_template "users/new"
811 assert_select "span.username", false
814 def test_login_microsoft_success
815 user = create(:user, :auth_provider => "microsoft", :auth_uid => "1234567890")
816 OmniAuth.config.add_mock(:microsoft, :uid => user.auth_uid)
818 get "/login", :params => { :referer => "/history" }
819 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
821 assert_response :success
822 assert_template "sessions/new"
823 post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history")
824 assert_redirected_to auth_success_path(:provider => "microsoft")
826 assert_response :redirect
828 assert_response :success
829 assert_template "changesets/history"
830 assert_select "span.username", user.display_name
833 def test_login_microsoft_pending
834 user = create(:user, :pending, :auth_provider => "microsoft", :auth_uid => "1234567890")
835 OmniAuth.config.add_mock(:microsoft, :uid => user.auth_uid)
837 get "/login", :params => { :referer => "/history" }
838 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
840 assert_response :success
841 assert_template "sessions/new"
842 post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history")
843 assert_redirected_to auth_success_path(:provider => "microsoft")
845 assert_response :redirect
847 assert_response :success
848 assert_template "confirm"
851 def test_login_microsoft_suspended
852 user = create(:user, :suspended, :auth_provider => "microsoft", :auth_uid => "1234567890")
853 OmniAuth.config.add_mock(:microsoft, :uid => user.auth_uid)
855 get "/login", :params => { :referer => "/history" }
856 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
858 assert_response :success
859 assert_template "sessions/new"
860 post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history")
861 assert_redirected_to auth_success_path(:provider => "microsoft")
863 assert_response :redirect
865 assert_response :success
866 assert_template "sessions/new"
867 assert_select "span.username", false
868 assert_select "div.alert.alert-danger", /your account has been suspended/ do
869 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
873 def test_login_microsoft_blocked
874 user = create(:user, :auth_provider => "microsoft", :auth_uid => "1234567890")
875 create(:user_block, :needs_view, :user => user)
876 OmniAuth.config.add_mock(:microsoft, :uid => user.auth_uid)
878 get "/login", :params => { :referer => "/history" }
879 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
881 assert_response :success
882 assert_template "sessions/new"
883 post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history")
884 assert_redirected_to auth_success_path(:provider => "microsoft")
886 assert_response :redirect
888 assert_response :success
889 assert_template "user_blocks/show"
890 assert_select "span.username", user.display_name
893 def test_login_microsoft_connection_failed
894 OmniAuth.config.mock_auth[:microsoft] = :connection_failed
896 get "/login", :params => { :referer => "/history" }
897 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
899 assert_response :success
900 assert_template "sessions/new"
901 post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history")
902 assert_redirected_to auth_success_path(:provider => "microsoft")
904 assert_redirected_to auth_failure_path(:strategy => "microsoft", :message => "connection_failed", :origin => "/login?referer=%2Fhistory")
906 assert_response :redirect
908 assert_response :success
909 assert_template "sessions/new"
910 assert_select "div.alert.alert-danger", "Connection to authentication provider failed"
911 assert_select "span.username", false
914 def test_login_microsoft_invalid_credentials
915 OmniAuth.config.mock_auth[:microsoft] = :invalid_credentials
917 get "/login", :params => { :referer => "/history" }
918 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
920 assert_response :success
921 assert_template "sessions/new"
922 post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history")
923 assert_redirected_to auth_success_path(:provider => "microsoft")
925 assert_redirected_to auth_failure_path(:strategy => "microsoft", :message => "invalid_credentials", :origin => "/login?referer=%2Fhistory")
927 assert_response :redirect
929 assert_response :success
930 assert_template "sessions/new"
931 assert_select "div.alert.alert-danger", "Invalid authentication credentials"
932 assert_select "span.username", false
935 def test_login_microsoft_unknown
936 OmniAuth.config.add_mock(:microsoft, :uid => "987654321")
938 get "/login", :params => { :referer => "/history" }
939 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
941 assert_response :success
942 assert_template "sessions/new"
943 post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history")
944 assert_redirected_to auth_success_path(:provider => "microsoft")
946 assert_response :redirect
948 assert_response :success
949 assert_template "users/new"
950 assert_select "span.username", false
953 def test_login_github_success
954 user = create(:user, :auth_provider => "github", :auth_uid => "1234567890")
955 OmniAuth.config.add_mock(:github, :uid => user.auth_uid)
957 get "/login", :params => { :referer => "/history" }
958 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
960 assert_response :success
961 assert_template "sessions/new"
962 post auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history")
963 assert_redirected_to auth_success_path(:provider => "github")
965 assert_response :redirect
967 assert_response :success
968 assert_template "changesets/history"
969 assert_select "span.username", user.display_name
972 def test_login_github_pending
973 user = create(:user, :pending, :auth_provider => "github", :auth_uid => "1234567890")
974 OmniAuth.config.add_mock(:github, :uid => user.auth_uid)
976 get "/login", :params => { :referer => "/history" }
977 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
979 assert_response :success
980 assert_template "sessions/new"
981 post auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history")
982 assert_redirected_to auth_success_path(:provider => "github")
984 assert_response :redirect
986 assert_response :success
987 assert_template "confirm"
990 def test_login_github_suspended
991 user = create(:user, :suspended, :auth_provider => "github", :auth_uid => "1234567890")
992 OmniAuth.config.add_mock(:github, :uid => user.auth_uid)
994 get "/login", :params => { :referer => "/history" }
995 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
997 assert_response :success
998 assert_template "sessions/new"
999 post auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1000 assert_redirected_to auth_success_path(:provider => "github")
1002 assert_response :redirect
1004 assert_response :success
1005 assert_template "sessions/new"
1006 assert_select "span.username", false
1007 assert_select "div.alert.alert-danger", /your account has been suspended/ do
1008 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
1012 def test_login_github_blocked
1013 user = create(:user, :auth_provider => "github", :auth_uid => "1234567890")
1014 create(:user_block, :needs_view, :user => user)
1015 OmniAuth.config.add_mock(:github, :uid => user.auth_uid)
1017 get "/login", :params => { :referer => "/history" }
1018 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1020 assert_response :success
1021 assert_template "sessions/new"
1022 post auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1023 assert_redirected_to auth_success_path(:provider => "github")
1025 assert_response :redirect
1027 assert_response :success
1028 assert_template "user_blocks/show"
1029 assert_select "span.username", user.display_name
1032 def test_login_github_connection_failed
1033 OmniAuth.config.mock_auth[:github] = :connection_failed
1035 get "/login", :params => { :referer => "/history" }
1036 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1038 assert_response :success
1039 assert_template "sessions/new"
1040 post auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1041 assert_redirected_to auth_success_path(:provider => "github")
1043 assert_redirected_to auth_failure_path(:strategy => "github", :message => "connection_failed", :origin => "/login?referer=%2Fhistory")
1045 assert_response :redirect
1047 assert_response :success
1048 assert_template "sessions/new"
1049 assert_select "div.alert.alert-danger", "Connection to authentication provider failed"
1050 assert_select "span.username", false
1053 def test_login_github_invalid_credentials
1054 OmniAuth.config.mock_auth[:github] = :invalid_credentials
1056 get "/login", :params => { :referer => "/history" }
1057 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1059 assert_response :success
1060 assert_template "sessions/new"
1061 post auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1062 assert_redirected_to auth_success_path(:provider => "github")
1064 assert_redirected_to auth_failure_path(:strategy => "github", :message => "invalid_credentials", :origin => "/login?referer=%2Fhistory")
1066 assert_response :redirect
1068 assert_response :success
1069 assert_template "sessions/new"
1070 assert_select "div.alert.alert-danger", "Invalid authentication credentials"
1071 assert_select "span.username", false
1074 def test_login_github_unknown
1075 OmniAuth.config.add_mock(:github, :uid => "987654321")
1077 get "/login", :params => { :referer => "/history" }
1078 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1080 assert_response :success
1081 assert_template "sessions/new"
1082 post auth_path(:provider => "github", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1083 assert_redirected_to auth_success_path(:provider => "github")
1085 assert_response :redirect
1087 assert_response :success
1088 assert_template "users/new"
1089 assert_select "span.username", false
1092 def test_login_wikipedia_success
1093 user = create(:user, :auth_provider => "wikipedia", :auth_uid => "1234567890")
1094 OmniAuth.config.add_mock(:wikipedia, :uid => user.auth_uid)
1096 get "/login", :params => { :referer => "/history" }
1097 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1099 assert_response :success
1100 assert_template "sessions/new"
1101 post auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1102 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1104 assert_response :redirect
1106 assert_response :success
1107 assert_template "changesets/history"
1108 assert_select "span.username", user.display_name
1111 def test_login_wikipedia_pending
1112 user = create(:user, :pending, :auth_provider => "wikipedia", :auth_uid => "1234567890")
1113 OmniAuth.config.add_mock(:wikipedia, :uid => user.auth_uid)
1115 get "/login", :params => { :referer => "/history" }
1116 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1118 assert_response :success
1119 assert_template "sessions/new"
1120 post auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1121 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1123 assert_response :redirect
1125 assert_response :success
1126 assert_template "confirm"
1129 def test_login_wikipedia_suspended
1130 user = create(:user, :suspended, :auth_provider => "wikipedia", :auth_uid => "1234567890")
1131 OmniAuth.config.add_mock(:wikipedia, :uid => user.auth_uid)
1133 get "/login", :params => { :referer => "/history" }
1134 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1136 assert_response :success
1137 assert_template "sessions/new"
1138 post auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1139 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1141 assert_response :redirect
1143 assert_response :success
1144 assert_template "sessions/new"
1145 assert_select "span.username", false
1146 assert_select "div.alert.alert-danger", /your account has been suspended/ do
1147 assert_select "a[href='mailto:openstreetmap@example.com']", "support"
1151 def test_login_wikipedia_blocked
1152 user = create(:user, :auth_provider => "wikipedia", :auth_uid => "1234567890")
1153 create(:user_block, :needs_view, :user => user)
1154 OmniAuth.config.add_mock(:wikipedia, :uid => user.auth_uid)
1156 get "/login", :params => { :referer => "/history" }
1157 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1159 assert_response :success
1160 assert_template "sessions/new"
1161 post auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1162 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1164 assert_response :redirect
1166 assert_response :success
1167 assert_template "user_blocks/show"
1168 assert_select "span.username", user.display_name
1171 def test_login_wikipedia_connection_failed
1172 OmniAuth.config.mock_auth[:wikipedia] = :connection_failed
1174 get "/login", :params => { :referer => "/history" }
1175 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1177 assert_response :success
1178 assert_template "sessions/new"
1179 post auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1180 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1182 assert_redirected_to auth_failure_path(:strategy => "wikipedia", :message => "connection_failed", :origin => "/login?referer=%2Fhistory")
1184 assert_response :redirect
1186 assert_response :success
1187 assert_template "sessions/new"
1188 assert_select "div.alert.alert-danger", "Connection to authentication provider failed"
1189 assert_select "span.username", false
1192 def test_login_wikipedia_invalid_credentials
1193 OmniAuth.config.mock_auth[:wikipedia] = :invalid_credentials
1195 get "/login", :params => { :referer => "/history" }
1196 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1198 assert_response :success
1199 assert_template "sessions/new"
1200 post auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1201 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1203 assert_redirected_to auth_failure_path(:strategy => "wikipedia", :message => "invalid_credentials", :origin => "/login?referer=%2Fhistory")
1205 assert_response :redirect
1207 assert_response :success
1208 assert_template "sessions/new"
1209 assert_select "div.alert.alert-danger", "Invalid authentication credentials"
1210 assert_select "span.username", false
1213 def test_login_wikipedia_unknown
1214 OmniAuth.config.add_mock(:wikipedia, :uid => "987654321")
1216 get "/login", :params => { :referer => "/history" }
1217 assert_redirected_to login_path("cookie_test" => "true", "referer" => "/history")
1219 assert_response :success
1220 assert_template "sessions/new"
1221 post auth_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1222 assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/login?referer=%2Fhistory", :referer => "/history")
1224 assert_response :redirect
1226 assert_response :success
1227 assert_template "users/new"
1228 assert_select "span.username", false
1233 def try_password_login(username, password, remember_me = nil)
1235 assert_redirected_to login_path(:cookie_test => true)
1237 assert_response :success
1238 assert_template "sessions/new"
1239 assert_select "input#username", 1 do
1240 assert_select "[value]", false
1242 assert_select "input#password", 1 do
1243 assert_select "[value=?]", ""
1245 assert_select "input#remember_me", 1 do
1246 assert_select "[checked]", false
1249 post "/login", :params => { :username => username, :password => "wrong", :remember_me => remember_me, :referer => "/history" }
1250 assert_response :redirect
1252 assert_response :success
1253 assert_template "sessions/new"
1254 assert_select "input#username", 1 do
1255 assert_select "[value=?]", username
1257 assert_select "input#password", 1 do
1258 assert_select "[value=?]", ""
1260 assert_select "input#remember_me", 1 do
1261 assert_select "[checked]", remember_me == "yes"
1264 post "/login", :params => { :username => username, :password => password, :remember_me => remember_me, :referer => "/history" }
1265 assert_response :redirect
1267 assert_response :success