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, "s3cr3t"
 
  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, "s3cr3t"
 
  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, "s3cr3t"
 
  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, "s3cr3t"
 
  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, "s3cr3t"
 
  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, "s3cr3t"
 
  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, "s3cr3t"
 
  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, "s3cr3t"
 
  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, "s3cr3t"
 
 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, "s3cr3t"
 
 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, "s3cr3t"
 
 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, "s3cr3t"
 
 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, "s3cr3t"
 
 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, "s3cr3t"
 
 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, "s3cr3t"
 
 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, "s3cr3t"
 
 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, "s3cr3t"
 
 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, "s3cr3t"
 
 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, "s3cr3t"
 
 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, "s3cr3t"
 
 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, "s3cr3t"
 
 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, "s3cr3t"
 
 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, "s3cr3t"
 
 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, "s3cr3t"
 
 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, "s3cr3t"
 
 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, "s3cr3t"
 
 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, "s3cr3t"
 
 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, "s3cr3t"
 
 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, "s3cr3t"
 
 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, "s3cr3t"
 
 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, "s3cr3t", "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, "s3cr3t", "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