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