From: Tom Hughes Date: Sun, 20 Aug 2023 10:04:28 +0000 (+0100) Subject: Merge remote-tracking branch 'upstream/pull/4169' X-Git-Tag: live~1061 X-Git-Url: https://git.openstreetmap.org./rails.git/commitdiff_plain/2a1689f9621b7ec94e4935ea11fe64a45390ef7d?hp=406d90c5c8da5633324bb1d28d7a2103a61c95e4 Merge remote-tracking branch 'upstream/pull/4169' --- diff --git a/Gemfile b/Gemfile index 39ffed860..f60a219e7 100644 --- a/Gemfile +++ b/Gemfile @@ -72,9 +72,9 @@ gem "omniauth-facebook" gem "omniauth-github" gem "omniauth-google-oauth2", ">= 0.6.0" gem "omniauth-mediawiki", ">= 0.0.4" +gem "omniauth-microsoft_graph" gem "omniauth-openid" gem "omniauth-rails_csrf_protection", "~> 1.0" -gem "omniauth-windowslive" # Doorkeeper for OAuth2 gem "doorkeeper" diff --git a/Gemfile.lock b/Gemfile.lock index 847350b7a..774803788 100644 --- a/Gemfile.lock +++ b/Gemfile.lock @@ -348,6 +348,9 @@ GEM omniauth-mediawiki (0.0.4) jwt (~> 2.0) omniauth-oauth (~> 1.0) + omniauth-microsoft_graph (1.2.0) + omniauth (~> 2.0) + omniauth-oauth2 (~> 1.8.0) omniauth-oauth (1.2.0) oauth omniauth (>= 1.0, < 3) @@ -360,9 +363,6 @@ GEM omniauth-rails_csrf_protection (1.0.1) actionpack (>= 4.2) omniauth (~> 2.0) - omniauth-windowslive (0.0.12) - multi_json (~> 1.12) - omniauth-oauth2 (~> 1.4) openstreetmap-deadlock_retry (1.3.1) parallel (1.23.0) parser (3.2.2.3) @@ -595,9 +595,9 @@ DEPENDENCIES omniauth-github omniauth-google-oauth2 (>= 0.6.0) omniauth-mediawiki (>= 0.0.4) + omniauth-microsoft_graph omniauth-openid omniauth-rails_csrf_protection (~> 1.0) - omniauth-windowslive openstreetmap-deadlock_retry (>= 1.3.1) pg puma (~> 5.6) diff --git a/app/assets/images/windowslive.svg b/app/assets/images/microsoft.svg similarity index 100% rename from app/assets/images/windowslive.svg rename to app/assets/images/microsoft.svg diff --git a/app/controllers/users_controller.rb b/app/controllers/users_controller.rb index fc9a6afc0..0f9e16767 100644 --- a/app/controllers/users_controller.rb +++ b/app/controllers/users_controller.rb @@ -250,7 +250,7 @@ class UsersController < ApplicationController when "openid" uid.match(%r{https://www.google.com/accounts/o8/id?(.*)}) || uid.match(%r{https://me.yahoo.com/(.*)}) - when "google", "facebook" + when "google", "facebook", "microsoft" true else false diff --git a/app/views/sessions/new.html.erb b/app/views/sessions/new.html.erb index bb43aefd5..dea65f768 100644 --- a/app/views/sessions/new.html.erb +++ b/app/views/sessions/new.html.erb @@ -35,8 +35,8 @@ <% if Settings.key?(:facebook_auth_id) -%>
  • <%= auth_button "facebook", "facebook" %>
  • <% end -%> - <% if Settings.key?(:windowslive_auth_id) -%> -
  • <%= auth_button "windowslive", "windowslive" %>
  • + <% if Settings.key?(:microsoft_auth_id) -%> +
  • <%= auth_button "microsoft", "microsoft" %>
  • <% end -%> <% if Settings.key?(:github_auth_id) -%>
  • <%= auth_button "github", "github" %>
  • diff --git a/config/initializers/omniauth.rb b/config/initializers/omniauth.rb index 5ca4ccffa..3964a6729 100644 --- a/config/initializers/omniauth.rb +++ b/config/initializers/omniauth.rb @@ -24,7 +24,7 @@ end openid_options = { :name => "openid", :store => openid_store } google_options = { :name => "google", :scope => "email", :access_type => "online" } facebook_options = { :name => "facebook", :scope => "email", :client_options => { :site => "https://graph.facebook.com/v4.0", :authorize_url => "https://www.facebook.com/v4.0/dialog/oauth" } } -windowslive_options = { :name => "windowslive", :scope => "wl.signin,wl.emails" } +microsoft_options = { :name => "microsoft", :scope => "openid User.Read" } github_options = { :name => "github", :scope => "user:email" } wikipedia_options = { :name => "wikipedia", :client_options => { :site => "https://meta.wikimedia.org" } } @@ -34,7 +34,7 @@ Rails.application.config.middleware.use OmniAuth::Builder do provider :openid, openid_options provider :google_oauth2, Settings.google_auth_id, Settings.google_auth_secret, google_options if Settings.key?(:google_auth_id) provider :facebook, Settings.facebook_auth_id, Settings.facebook_auth_secret, facebook_options if Settings.key?(:facebook_auth_id) - provider :windowslive, Settings.windowslive_auth_id, Settings.windowslive_auth_secret, windowslive_options if Settings.key?(:windowslive_auth_id) + provider :microsoft_graph, Settings.microsoft_auth_id, Settings.microsoft_auth_secret, microsoft_options if Settings.key?(:microsoft_auth_id) provider :github, Settings.github_auth_id, Settings.github_auth_secret, github_options if Settings.key?(:github_auth_id) provider :mediawiki, Settings.wikipedia_auth_id, Settings.wikipedia_auth_secret, wikipedia_options if Settings.key?(:wikipedia_auth_id) end diff --git a/config/locales/en.yml b/config/locales/en.yml index 7635c483d..7b415f6b7 100644 --- a/config/locales/en.yml +++ b/config/locales/en.yml @@ -212,7 +212,7 @@ en: openid: OpenID google: Google facebook: Facebook - windowslive: Microsoft + microsoft: Microsoft github: GitHub wikipedia: Wikipedia api: @@ -1785,7 +1785,7 @@ en: facebook: title: Login with Facebook alt: Login with a Facebook Account - windowslive: + microsoft: title: Login with Microsoft alt: Login with a Microsoft Account github: diff --git a/config/settings.yml b/config/settings.yml index 15a5753e4..d9910ce28 100644 --- a/config/settings.yml +++ b/config/settings.yml @@ -104,10 +104,10 @@ fossgis_valhalla_url: "https://valhalla1.openstreetmap.de/route" #google_openid_realm: "" #facebook_auth_id: "" #facebook_auth_secret: "" -#windowslive_auth_id: "" -#windowslive_auth_secret: "" #github_auth_id: "" #github_auth_secret: "" +#microsoft_auth_id: "" +#microsoft_auth_secret: "" #wikipedia_auth_id: "" #wikipedia_auth_secret: "" # Thunderforest authentication details diff --git a/config/settings/test.yml b/config/settings/test.yml index 1f951e872..64039e362 100644 --- a/config/settings/test.yml +++ b/config/settings/test.yml @@ -6,8 +6,8 @@ google_auth_secret: "dummy" google_openid_realm: "https://www.openstreetmap.org" facebook_auth_id: "dummy" facebook_auth_secret: "dummy" -windowslive_auth_id: "dummy" -windowslive_auth_secret: "dummy" +microsoft_auth_id: "dummy" +microsoft_auth_secret: "dummy" github_auth_id: "dummy" github_auth_secret: "dummy" wikipedia_auth_id: "dummy" diff --git a/db/migrate/20230816135800_use_microsoft_graph.rb b/db/migrate/20230816135800_use_microsoft_graph.rb new file mode 100644 index 000000000..6c37a238b --- /dev/null +++ b/db/migrate/20230816135800_use_microsoft_graph.rb @@ -0,0 +1,9 @@ +class UseMicrosoftGraph < ActiveRecord::Migration[7.0] + def self.up + User.where(:auth_provider => "windowslive").update_all(:auth_provider => "microsoft") + end + + def self.down + User.where(:auth_provider => "microsoft").update_all(:auth_provider => "windowslive") + end +end diff --git a/db/structure.sql b/db/structure.sql index 89874d779..86537003f 100644 --- a/db/structure.sql +++ b/db/structure.sql @@ -3395,6 +3395,7 @@ INSERT INTO "schema_migrations" (version) VALUES ('20211216185316'), ('20220201183346'), ('20220223140543'), +('20230816135800'), ('21'), ('22'), ('23'), diff --git a/lib/auth.rb b/lib/auth.rb index bc1ee8ec6..01167fb1d 100644 --- a/lib/auth.rb +++ b/lib/auth.rb @@ -8,7 +8,7 @@ module Auth }.tap do |providers| providers[I18n.t("auth.providers.google")] = "google" if Settings.key?(:google_auth_id) providers[I18n.t("auth.providers.facebook")] = "facebook" if Settings.key?(:facebook_auth_id) - providers[I18n.t("auth.providers.windowslive")] = "windowslive" if Settings.key?(:windowslive_auth_id) + providers[I18n.t("auth.providers.microsoft")] = "microsoft" if Settings.key?(:microsoft_auth_id) providers[I18n.t("auth.providers.github")] = "github" if Settings.key?(:github_auth_id) providers[I18n.t("auth.providers.wikipedia")] = "wikipedia" if Settings.key?(:wikipedia_auth_id) end.freeze diff --git a/test/integration/user_creation_test.rb b/test/integration/user_creation_test.rb index d7f6f5200..2baa6f776 100644 --- a/test/integration/user_creation_test.rb +++ b/test/integration/user_creation_test.rb @@ -11,7 +11,7 @@ class UserCreationTest < ActionDispatch::IntegrationTest OmniAuth.config.mock_auth[:openid] = nil OmniAuth.config.mock_auth[:google] = nil OmniAuth.config.mock_auth[:facebook] = nil - OmniAuth.config.mock_auth[:windowslive] = nil + OmniAuth.config.mock_auth[:microsoft] = nil OmniAuth.config.mock_auth[:github] = nil OmniAuth.config.mock_auth[:wikipedia] = nil OmniAuth.config.test_mode = false @@ -689,28 +689,28 @@ class UserCreationTest < ActionDispatch::IntegrationTest assert_template "site/welcome" end - def test_user_create_windowslive_success - new_email = "newtester-windowslive@osm.org" - display_name = "new_tester-windowslive" + def test_user_create_microsoft_success + new_email = "newtester-microsoft@osm.org" + display_name = "new_tester-microsoft" password = "testtest" - OmniAuth.config.add_mock(:windowslive, :uid => "123454321", :info => { "email" => new_email }) + OmniAuth.config.add_mock(:microsoft, :uid => "123454321", :info => { "email" => new_email }) assert_difference("User.count") do - assert_difference("ActionMailer::Base.deliveries.size", 1) do + assert_difference("ActionMailer::Base.deliveries.size", 0) do perform_enqueued_jobs do post "/user/new", :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, - :auth_provider => "windowslive", + :auth_provider => "microsoft", :pass_crypt => "", :pass_crypt_confirmation => "" } } assert_response :redirect - assert_redirected_to auth_path(:provider => "windowslive", :origin => "/user/new") + assert_redirected_to auth_path(:provider => "microsoft", :origin => "/user/new") post response.location assert_response :redirect - assert_redirected_to auth_success_path(:provider => "windowslive") + assert_redirected_to auth_success_path(:provider => "microsoft") follow_redirect! assert_response :redirect assert_redirected_to "/user/terms" @@ -718,13 +718,13 @@ class UserCreationTest < ActionDispatch::IntegrationTest :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, - :auth_provider => "windowslive", + :auth_provider => "microsoft", :auth_uid => "123454321", :pass_crypt => password, :pass_crypt_confirmation => password }, :read_ct => 1, :read_tou => 1 } assert_response :redirect - assert_redirected_to :controller => :confirmations, :action => :confirm, :display_name => display_name + assert_redirected_to welcome_path follow_redirect! end end @@ -732,16 +732,16 @@ class UserCreationTest < ActionDispatch::IntegrationTest # Check the page assert_response :success - assert_template "confirmations/confirm" + assert_template "site/welcome" ActionMailer::Base.deliveries.clear end - def test_user_create_windowslive_failure - OmniAuth.config.mock_auth[:windowslive] = :connection_failed + def test_user_create_microsoft_failure + OmniAuth.config.mock_auth[:microsoft] = :connection_failed - new_email = "newtester-windowslive2@osm.org" - display_name = "new_tester-windowslive2" + new_email = "newtester-microsoft2@osm.org" + display_name = "new_tester-microsoft2" assert_difference("User.count", 0) do assert_difference("ActionMailer::Base.deliveries.size", 0) do perform_enqueued_jobs do @@ -749,17 +749,17 @@ class UserCreationTest < ActionDispatch::IntegrationTest :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, - :auth_provider => "windowslive", + :auth_provider => "microsoft", :pass_crypt => "", :pass_crypt_confirmation => "" } } assert_response :redirect - assert_redirected_to auth_path(:provider => "windowslive", :origin => "/user/new") + assert_redirected_to auth_path(:provider => "microsoft", :origin => "/user/new") post response.location assert_response :redirect - assert_redirected_to auth_success_path(:provider => "windowslive") + assert_redirected_to auth_success_path(:provider => "microsoft") follow_redirect! assert_response :redirect - assert_redirected_to auth_failure_path(:strategy => "windowslive", :message => "connection_failed", :origin => "/user/new") + assert_redirected_to auth_failure_path(:strategy => "microsoft", :message => "connection_failed", :origin => "/user/new") follow_redirect! assert_response :redirect follow_redirect! @@ -772,11 +772,11 @@ class UserCreationTest < ActionDispatch::IntegrationTest ActionMailer::Base.deliveries.clear end - def test_user_create_windowslive_redirect - OmniAuth.config.add_mock(:windowslive, :uid => "123454321") + def test_user_create_microsoft_redirect + OmniAuth.config.add_mock(:microsoft, :uid => "123454321") - new_email = "redirect_tester_windowslive@osm.org" - display_name = "redirect_tester_windowslive" + new_email = "redirect_tester_microsoft@osm.org" + display_name = "redirect_tester_microsoft" # nothing special about this page, just need a protected page to redirect back to. referer = "/traces/mine" assert_difference("User.count") do @@ -786,15 +786,15 @@ class UserCreationTest < ActionDispatch::IntegrationTest :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, - :auth_provider => "windowslive", + :auth_provider => "microsoft", :pass_crypt => "", :pass_crypt_confirmation => "" }, :referer => referer } assert_response :redirect - assert_redirected_to auth_path(:provider => "windowslive", :origin => "/user/new") + assert_redirected_to auth_path(:provider => "microsoft", :origin => "/user/new") post response.location assert_response :redirect - assert_redirected_to auth_success_path(:provider => "windowslive") + assert_redirected_to auth_success_path(:provider => "microsoft") follow_redirect! assert_response :redirect assert_redirected_to "/user/terms" @@ -802,7 +802,7 @@ class UserCreationTest < ActionDispatch::IntegrationTest :params => { :user => { :email => new_email, :email_confirmation => new_email, :display_name => display_name, - :auth_provider => "windowslive", + :auth_provider => "microsoft", :auth_uid => "http://localhost:1123/new.tester", :pass_crypt => "testtest", :pass_crypt_confirmation => "testtest" }, @@ -817,7 +817,7 @@ class UserCreationTest < ActionDispatch::IntegrationTest assert_equal register_email.to.first, new_email # Check that the confirm account url is correct - confirm_regex = Regexp.new("/user/redirect_tester_windowslive/confirm\\?confirm_string=([a-zA-Z0-9]*)") + confirm_regex = Regexp.new("/user/redirect_tester_microsoft/confirm\\?confirm_string=([a-zA-Z0-9]*)") email_text_parts(register_email).each do |part| assert_match confirm_regex, part.body.to_s end diff --git a/test/integration/user_login_test.rb b/test/integration/user_login_test.rb index 5610f9b6e..a9c64bea4 100644 --- a/test/integration/user_login_test.rb +++ b/test/integration/user_login_test.rb @@ -9,7 +9,7 @@ class UserLoginTest < ActionDispatch::IntegrationTest OmniAuth.config.mock_auth[:openid] = nil OmniAuth.config.mock_auth[:google] = nil OmniAuth.config.mock_auth[:facebook] = nil - OmniAuth.config.mock_auth[:windowslive] = nil + OmniAuth.config.mock_auth[:microsoft] = nil OmniAuth.config.mock_auth[:github] = nil OmniAuth.config.mock_auth[:wikipedia] = nil OmniAuth.config.test_mode = false @@ -853,9 +853,9 @@ class UserLoginTest < ActionDispatch::IntegrationTest assert_select "span.username", false end - def test_login_windowslive_success - user = create(:user, :auth_provider => "windowslive", :auth_uid => "1234567890") - OmniAuth.config.add_mock(:windowslive, :uid => user.auth_uid) + def test_login_microsoft_success + user = create(:user, :auth_provider => "microsoft", :auth_uid => "1234567890") + OmniAuth.config.add_mock(:microsoft, :uid => user.auth_uid) get "/login", :params => { :referer => "/history" } assert_response :redirect @@ -863,9 +863,9 @@ class UserLoginTest < ActionDispatch::IntegrationTest follow_redirect! assert_response :success assert_template "sessions/new" - post auth_path(:provider => "windowslive", :origin => "/login?referer=%2Fhistory", :referer => "/history") + post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history") assert_response :redirect - assert_redirected_to auth_success_path(:provider => "windowslive") + assert_redirected_to auth_success_path(:provider => "microsoft") follow_redirect! assert_response :redirect follow_redirect! @@ -874,9 +874,9 @@ class UserLoginTest < ActionDispatch::IntegrationTest assert_select "span.username", user.display_name end - def test_login_windowslive_pending - user = create(:user, :pending, :auth_provider => "windowslive", :auth_uid => "1234567890") - OmniAuth.config.add_mock(:windowslive, :uid => user.auth_uid) + def test_login_microsoft_pending + user = create(:user, :pending, :auth_provider => "microsoft", :auth_uid => "1234567890") + OmniAuth.config.add_mock(:microsoft, :uid => user.auth_uid) get "/login", :params => { :referer => "/history" } assert_response :redirect @@ -884,9 +884,9 @@ class UserLoginTest < ActionDispatch::IntegrationTest follow_redirect! assert_response :success assert_template "sessions/new" - post auth_path(:provider => "windowslive", :origin => "/login?referer=%2Fhistory", :referer => "/history") + post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history") assert_response :redirect - assert_redirected_to auth_success_path(:provider => "windowslive") + assert_redirected_to auth_success_path(:provider => "microsoft") follow_redirect! assert_response :redirect follow_redirect! @@ -894,9 +894,9 @@ class UserLoginTest < ActionDispatch::IntegrationTest assert_template "confirm" end - def test_login_windowslive_suspended - user = create(:user, :suspended, :auth_provider => "windowslive", :auth_uid => "1234567890") - OmniAuth.config.add_mock(:windowslive, :uid => user.auth_uid) + def test_login_microsoft_suspended + user = create(:user, :suspended, :auth_provider => "microsoft", :auth_uid => "1234567890") + OmniAuth.config.add_mock(:microsoft, :uid => user.auth_uid) get "/login", :params => { :referer => "/history" } assert_response :redirect @@ -904,9 +904,9 @@ class UserLoginTest < ActionDispatch::IntegrationTest follow_redirect! assert_response :success assert_template "sessions/new" - post auth_path(:provider => "windowslive", :origin => "/login?referer=%2Fhistory", :referer => "/history") + post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history") assert_response :redirect - assert_redirected_to auth_success_path(:provider => "windowslive") + assert_redirected_to auth_success_path(:provider => "microsoft") follow_redirect! assert_response :redirect follow_redirect! @@ -918,10 +918,10 @@ class UserLoginTest < ActionDispatch::IntegrationTest end end - def test_login_windowslive_blocked - user = create(:user, :auth_provider => "windowslive", :auth_uid => "1234567890") + def test_login_microsoft_blocked + user = create(:user, :auth_provider => "microsoft", :auth_uid => "1234567890") create(:user_block, :needs_view, :user => user) - OmniAuth.config.add_mock(:windowslive, :uid => user.auth_uid) + OmniAuth.config.add_mock(:microsoft, :uid => user.auth_uid) get "/login", :params => { :referer => "/history" } assert_response :redirect @@ -929,9 +929,9 @@ class UserLoginTest < ActionDispatch::IntegrationTest follow_redirect! assert_response :success assert_template "sessions/new" - post auth_path(:provider => "windowslive", :origin => "/login?referer=%2Fhistory", :referer => "/history") + post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history") assert_response :redirect - assert_redirected_to auth_success_path(:provider => "windowslive") + assert_redirected_to auth_success_path(:provider => "microsoft") follow_redirect! assert_response :redirect follow_redirect! @@ -940,8 +940,8 @@ class UserLoginTest < ActionDispatch::IntegrationTest assert_select "span.username", user.display_name end - def test_login_windowslive_connection_failed - OmniAuth.config.mock_auth[:windowslive] = :connection_failed + def test_login_microsoft_connection_failed + OmniAuth.config.mock_auth[:microsoft] = :connection_failed get "/login", :params => { :referer => "/history" } assert_response :redirect @@ -949,12 +949,12 @@ class UserLoginTest < ActionDispatch::IntegrationTest follow_redirect! assert_response :success assert_template "sessions/new" - post auth_path(:provider => "windowslive", :origin => "/login?referer=%2Fhistory", :referer => "/history") + post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history") assert_response :redirect - assert_redirected_to auth_success_path(:provider => "windowslive") + assert_redirected_to auth_success_path(:provider => "microsoft") follow_redirect! assert_response :redirect - assert_redirected_to auth_failure_path(:strategy => "windowslive", :message => "connection_failed", :origin => "/login?referer=%2Fhistory") + assert_redirected_to auth_failure_path(:strategy => "microsoft", :message => "connection_failed", :origin => "/login?referer=%2Fhistory") follow_redirect! assert_response :redirect follow_redirect! @@ -964,8 +964,8 @@ class UserLoginTest < ActionDispatch::IntegrationTest assert_select "span.username", false end - def test_login_windowslive_invalid_credentials - OmniAuth.config.mock_auth[:windowslive] = :invalid_credentials + def test_login_microsoft_invalid_credentials + OmniAuth.config.mock_auth[:microsoft] = :invalid_credentials get "/login", :params => { :referer => "/history" } assert_response :redirect @@ -973,12 +973,12 @@ class UserLoginTest < ActionDispatch::IntegrationTest follow_redirect! assert_response :success assert_template "sessions/new" - post auth_path(:provider => "windowslive", :origin => "/login?referer=%2Fhistory", :referer => "/history") + post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history") assert_response :redirect - assert_redirected_to auth_success_path(:provider => "windowslive") + assert_redirected_to auth_success_path(:provider => "microsoft") follow_redirect! assert_response :redirect - assert_redirected_to auth_failure_path(:strategy => "windowslive", :message => "invalid_credentials", :origin => "/login?referer=%2Fhistory") + assert_redirected_to auth_failure_path(:strategy => "microsoft", :message => "invalid_credentials", :origin => "/login?referer=%2Fhistory") follow_redirect! assert_response :redirect follow_redirect! @@ -988,8 +988,8 @@ class UserLoginTest < ActionDispatch::IntegrationTest assert_select "span.username", false end - def test_login_windowslive_unknown - OmniAuth.config.add_mock(:windowslive, :uid => "987654321") + def test_login_microsoft_unknown + OmniAuth.config.add_mock(:microsoft, :uid => "987654321") get "/login", :params => { :referer => "/history" } assert_response :redirect @@ -997,9 +997,9 @@ class UserLoginTest < ActionDispatch::IntegrationTest follow_redirect! assert_response :success assert_template "sessions/new" - post auth_path(:provider => "windowslive", :origin => "/login?referer=%2Fhistory", :referer => "/history") + post auth_path(:provider => "microsoft", :origin => "/login?referer=%2Fhistory", :referer => "/history") assert_response :redirect - assert_redirected_to auth_success_path(:provider => "windowslive") + assert_redirected_to auth_success_path(:provider => "microsoft") follow_redirect! assert_response :redirect follow_redirect!