Omniauth-microsoft_graph correctly populates 'email' and 'name' fields used by OpenStreetMap. It also uses updated endpoints for Microsoft identity provider. Use email address returned by microsoft_graph provider as a verified address. Upgrading exisiting users from windowslive to microsoft_graph: - upon next login existing `windowslive` users will have to authorizei OpenStreetMap application to "Read Your Profile," required for proper reading of display name field. The name of the identity provider in OSM is kept to 'windowslive': - the entries in users table with `provider == 'windowslive'` can be reused for microsoft_graph provider, since the uid field is preserved. Users will not need to repeat the sign up process. - OAuth2 callback is still `/auth/windowslive`, no updates to Microsoft Identity Provider portal App registration are necessary.
1151 lines
48 KiB
Ruby
1151 lines
48 KiB
Ruby
require "test_helper"
|
|
|
|
class UserCreationTest < ActionDispatch::IntegrationTest
|
|
def setup
|
|
OmniAuth.config.test_mode = true
|
|
|
|
stub_request(:get, /.*gravatar.com.*d=404/).to_return(:status => 404)
|
|
end
|
|
|
|
def teardown
|
|
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[:github] = nil
|
|
OmniAuth.config.mock_auth[:wikipedia] = nil
|
|
OmniAuth.config.test_mode = false
|
|
end
|
|
|
|
def test_create_user_form
|
|
I18n.with_locale "en" do
|
|
I18n.available_locales.each do |locale|
|
|
reset!
|
|
get "/user/new", :headers => { "HTTP_ACCEPT_LANGUAGE" => locale.to_s }
|
|
follow_redirect!
|
|
assert_response :success
|
|
assert_template "users/new"
|
|
end
|
|
end
|
|
end
|
|
|
|
def test_user_create_submit_duplicate_email
|
|
I18n.with_locale "en" do
|
|
Locale.available.each do |locale|
|
|
dup_email = create(:user).email
|
|
display_name = "#{locale}_new_tester"
|
|
assert_difference("User.count", 0) do
|
|
assert_difference("ActionMailer::Base.deliveries.size", 0) do
|
|
perform_enqueued_jobs do
|
|
post "/user/new",
|
|
:params => { :user => { :email => dup_email,
|
|
:email_confirmation => dup_email,
|
|
:display_name => display_name,
|
|
:pass_crypt => "testtest",
|
|
:pass_crypt_confirmation => "testtest" } },
|
|
:headers => { "HTTP_ACCEPT_LANGUAGE" => locale.to_s }
|
|
end
|
|
end
|
|
end
|
|
assert_response :success
|
|
assert_template "users/new"
|
|
assert_equal locale.to_s, response.headers["Content-Language"]
|
|
assert_select "form"
|
|
assert_select "form > div > input.is-invalid#user_email"
|
|
assert_no_missing_translations
|
|
end
|
|
end
|
|
end
|
|
|
|
def test_user_create_submit_duplicate_username
|
|
I18n.with_locale "en" do
|
|
I18n.available_locales.each do |locale|
|
|
dup_display_name = create(:user).display_name
|
|
email = "#{locale}_new_tester"
|
|
assert_difference("User.count", 0) do
|
|
assert_difference("ActionMailer::Base.deliveries.size", 0) do
|
|
perform_enqueued_jobs do
|
|
post "/user/new",
|
|
:params => { :user => { :email => email,
|
|
:email_confirmation => email,
|
|
:display_name => dup_display_name,
|
|
:pass_crypt => "testtest",
|
|
:pass_crypt_confirmation => "testtest" } },
|
|
:headers => { "HTTP_ACCEPT_LANGUAGE" => locale.to_s }
|
|
end
|
|
end
|
|
end
|
|
assert_response :success
|
|
assert_template "users/new"
|
|
assert_select "form > div > input.is-invalid#user_display_name"
|
|
assert_no_missing_translations
|
|
end
|
|
end
|
|
end
|
|
|
|
def test_user_create_success
|
|
I18n.with_locale "en" do
|
|
I18n.available_locales.each do |locale|
|
|
new_email = "#{locale}newtester@osm.org"
|
|
display_name = "#{locale}_new_tester"
|
|
|
|
assert_difference("User.count", 0) 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,
|
|
:pass_crypt => "testtest",
|
|
:pass_crypt_confirmation => "testtest" } }
|
|
end
|
|
end
|
|
end
|
|
|
|
assert_redirected_to "/user/terms"
|
|
|
|
assert_difference("User.count") do
|
|
assert_difference("ActionMailer::Base.deliveries.size", 1) do
|
|
perform_enqueued_jobs do
|
|
post "/user/save",
|
|
:headers => { "HTTP_ACCEPT_LANGUAGE" => locale.to_s },
|
|
:params => { :read_ct => 1, :read_tou => 1 }
|
|
follow_redirect!
|
|
end
|
|
end
|
|
end
|
|
|
|
# Check the e-mail
|
|
register_email = ActionMailer::Base.deliveries.first
|
|
|
|
assert_equal register_email.to.first, new_email
|
|
# Check that the confirm account url is correct
|
|
assert_match(/#{@url}/, register_email.body.to_s)
|
|
|
|
# Check the page
|
|
assert_response :success
|
|
assert_template "confirmations/confirm"
|
|
|
|
ActionMailer::Base.deliveries.clear
|
|
end
|
|
end
|
|
end
|
|
|
|
def test_user_create_no_tou_failure
|
|
I18n.with_locale "en" do
|
|
I18n.available_locales.each do |locale|
|
|
new_email = "#{locale}newtester@osm.org"
|
|
display_name = "#{locale}_new_tester"
|
|
|
|
assert_difference("User.count", 0) 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,
|
|
:pass_crypt => "testtest",
|
|
:pass_crypt_confirmation => "testtest" } }
|
|
end
|
|
end
|
|
end
|
|
|
|
assert_redirected_to "/user/terms"
|
|
|
|
perform_enqueued_jobs do
|
|
post "/user/save",
|
|
:headers => { "HTTP_ACCEPT_LANGUAGE" => locale.to_s }
|
|
assert_redirected_to "/user/terms"
|
|
end
|
|
|
|
ActionMailer::Base.deliveries.clear
|
|
end
|
|
end
|
|
end
|
|
|
|
# Check that the user can successfully recover their password
|
|
def test_lost_password_recovery_success
|
|
# Open the lost password form
|
|
# Submit the lost password form
|
|
# Check the e-mail
|
|
# Submit the reset password token
|
|
# Check that the password has changed, and the user can login
|
|
end
|
|
|
|
def test_user_create_redirect
|
|
new_email = "redirect_tester@osm.org"
|
|
display_name = "redirect_tester"
|
|
password = "testtest"
|
|
# nothing special about this page, just need a protected page to redirect back to.
|
|
referer = "/traces/mine"
|
|
assert_difference("User.count") do
|
|
assert_difference("ActionMailer::Base.deliveries.size", 1) do
|
|
perform_enqueued_jobs do
|
|
post "/user/new",
|
|
:params => { :user => { :email => new_email,
|
|
:email_confirmation => new_email,
|
|
:display_name => display_name,
|
|
:pass_crypt => password,
|
|
:pass_crypt_confirmation => password },
|
|
:referer => referer }
|
|
assert_redirected_to "/user/terms"
|
|
post "/user/save",
|
|
:params => { :user => { :email => new_email,
|
|
:email_confirmation => new_email,
|
|
:display_name => display_name,
|
|
:pass_crypt => password,
|
|
:pass_crypt_confirmation => password },
|
|
:read_ct => 1, :read_tou => 1 }
|
|
follow_redirect!
|
|
end
|
|
end
|
|
end
|
|
|
|
# Check the e-mail
|
|
register_email = ActionMailer::Base.deliveries.first
|
|
|
|
assert_equal register_email.to.first, new_email
|
|
# Check that the confirm account url is correct
|
|
confirm_regex = Regexp.new("/user/redirect_tester/confirm\\?confirm_string=([a-zA-Z0-9]*)")
|
|
email_text_parts(register_email).each do |part|
|
|
assert_match confirm_regex, part.body.to_s
|
|
end
|
|
confirm_string = email_text_parts(register_email).first.body.match(confirm_regex)[1]
|
|
|
|
# Check the page
|
|
assert_response :success
|
|
assert_template "confirmations/confirm"
|
|
|
|
ActionMailer::Base.deliveries.clear
|
|
|
|
# Go to the confirmation page
|
|
get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
|
|
assert_response :success
|
|
assert_template "confirmations/confirm"
|
|
|
|
post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
|
|
assert_response :redirect
|
|
follow_redirect!
|
|
assert_response :success
|
|
assert_template "site/welcome"
|
|
end
|
|
|
|
def test_user_create_openid_success
|
|
OmniAuth.config.add_mock(:openid, :uid => "http://localhost:1123/new.tester")
|
|
|
|
new_email = "newtester-openid@osm.org"
|
|
display_name = "new_tester-openid"
|
|
password = "testtest"
|
|
assert_difference("User.count") do
|
|
assert_difference("ActionMailer::Base.deliveries.size", 1) do
|
|
perform_enqueued_jobs do
|
|
post "/user/new",
|
|
:params => { :user => { :email => new_email,
|
|
:email_confirmation => new_email,
|
|
:display_name => display_name,
|
|
:auth_provider => "openid",
|
|
:auth_uid => "http://localhost:1123/new.tester",
|
|
:pass_crypt => "",
|
|
:pass_crypt_confirmation => "" } }
|
|
assert_response :redirect
|
|
assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
|
|
post response.location
|
|
assert_response :redirect
|
|
assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
|
|
follow_redirect!
|
|
assert_response :redirect
|
|
assert_redirected_to "/user/terms"
|
|
post "/user/save",
|
|
:params => { :user => { :email => new_email,
|
|
:email_confirmation => new_email,
|
|
:display_name => display_name,
|
|
:auth_provider => "openid",
|
|
:auth_uid => "http://localhost:1123/new.tester",
|
|
:pass_crypt => password,
|
|
:pass_crypt_confirmation => password },
|
|
:read_ct => 1, :read_tou => 1 }
|
|
assert_response :redirect
|
|
follow_redirect!
|
|
end
|
|
end
|
|
end
|
|
|
|
# Check the page
|
|
assert_response :success
|
|
assert_template "confirmations/confirm"
|
|
|
|
ActionMailer::Base.deliveries.clear
|
|
end
|
|
|
|
def test_user_create_openid_failure
|
|
OmniAuth.config.mock_auth[:openid] = :connection_failed
|
|
|
|
new_email = "newtester-openid2@osm.org"
|
|
display_name = "new_tester-openid2"
|
|
assert_difference("User.count", 0) 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 => "openid",
|
|
:auth_uid => "http://localhost:1123/new.tester",
|
|
:pass_crypt => "",
|
|
:pass_crypt_confirmation => "" } }
|
|
assert_response :redirect
|
|
assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
|
|
post response.location
|
|
assert_response :redirect
|
|
assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
|
|
follow_redirect!
|
|
assert_response :redirect
|
|
assert_redirected_to auth_failure_path(:strategy => "openid", :message => "connection_failed", :origin => "/user/new")
|
|
follow_redirect!
|
|
assert_response :redirect
|
|
follow_redirect!
|
|
assert_response :success
|
|
assert_template "users/new"
|
|
end
|
|
end
|
|
end
|
|
|
|
ActionMailer::Base.deliveries.clear
|
|
end
|
|
|
|
def test_user_create_openid_redirect
|
|
OmniAuth.config.add_mock(:openid, :uid => "http://localhost:1123/new.tester")
|
|
|
|
new_email = "redirect_tester_openid@osm.org"
|
|
display_name = "redirect_tester_openid"
|
|
# nothing special about this page, just need a protected page to redirect back to.
|
|
referer = "/traces/mine"
|
|
assert_difference("User.count") do
|
|
assert_difference("ActionMailer::Base.deliveries.size", 1) do
|
|
perform_enqueued_jobs do
|
|
post "/user/new",
|
|
:params => { :user => { :email => new_email,
|
|
:email_confirmation => new_email,
|
|
:display_name => display_name,
|
|
:auth_provider => "openid",
|
|
:auth_uid => "http://localhost:1123/new.tester",
|
|
:pass_crypt => "",
|
|
:pass_crypt_confirmation => "" },
|
|
:referer => referer }
|
|
assert_response :redirect
|
|
assert_redirected_to auth_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
|
|
post response.location
|
|
assert_response :redirect
|
|
assert_redirected_to auth_success_path(:provider => "openid", :openid_url => "http://localhost:1123/new.tester", :origin => "/user/new")
|
|
follow_redirect!
|
|
assert_response :redirect
|
|
assert_redirected_to "/user/terms"
|
|
post "/user/save",
|
|
:params => { :user => { :email => new_email,
|
|
:email_confirmation => new_email,
|
|
:display_name => display_name,
|
|
:auth_provider => "openid",
|
|
:auth_uid => "http://localhost:1123/new.tester",
|
|
:pass_crypt => "testtest",
|
|
:pass_crypt_confirmation => "testtest" },
|
|
:read_ct => 1, :read_tou => 1 }
|
|
follow_redirect!
|
|
end
|
|
end
|
|
end
|
|
|
|
# Check the e-mail
|
|
register_email = ActionMailer::Base.deliveries.first
|
|
|
|
assert_equal register_email.to.first, new_email
|
|
# Check that the confirm account url is correct
|
|
confirm_regex = Regexp.new("/user/redirect_tester_openid/confirm\\?confirm_string=([a-zA-Z0-9]*)")
|
|
email_text_parts(register_email).each do |part|
|
|
assert_match confirm_regex, part.body.to_s
|
|
end
|
|
confirm_string = email_text_parts(register_email).first.body.match(confirm_regex)[1]
|
|
|
|
# Check the page
|
|
assert_response :success
|
|
assert_template "confirmations/confirm"
|
|
|
|
ActionMailer::Base.deliveries.clear
|
|
|
|
# Go to the confirmation page
|
|
get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
|
|
assert_response :success
|
|
assert_template "confirmations/confirm"
|
|
|
|
post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
|
|
assert_response :redirect
|
|
follow_redirect!
|
|
assert_response :success
|
|
assert_template "site/welcome"
|
|
end
|
|
|
|
def test_user_create_google_success
|
|
new_email = "newtester-google@osm.org"
|
|
display_name = "new_tester-google"
|
|
password = "testtest"
|
|
|
|
OmniAuth.config.add_mock(:google, :uid => "123454321", :info => { "email" => new_email })
|
|
|
|
assert_difference("User.count") do
|
|
assert_no_difference("ActionMailer::Base.deliveries.size") do
|
|
perform_enqueued_jobs do
|
|
post "/user/new",
|
|
:params => { :user => { :email => new_email,
|
|
:email_confirmation => new_email,
|
|
:display_name => display_name,
|
|
:auth_provider => "google",
|
|
:pass_crypt => "",
|
|
:pass_crypt_confirmation => "" } }
|
|
assert_response :redirect
|
|
assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
|
|
post response.location
|
|
assert_response :redirect
|
|
assert_redirected_to auth_success_path(:provider => "google")
|
|
follow_redirect!
|
|
assert_response :redirect
|
|
assert_redirected_to "/user/terms"
|
|
post "/user/save",
|
|
:params => { :user => { :email => new_email,
|
|
:email_confirmation => new_email,
|
|
:display_name => display_name,
|
|
:auth_provider => "google",
|
|
:auth_uid => "123454321",
|
|
:pass_crypt => password,
|
|
:pass_crypt_confirmation => password },
|
|
:read_ct => 1, :read_tou => 1 }
|
|
assert_response :redirect
|
|
assert_redirected_to welcome_path
|
|
follow_redirect!
|
|
end
|
|
end
|
|
end
|
|
|
|
# Check the page
|
|
assert_response :success
|
|
assert_template "site/welcome"
|
|
|
|
ActionMailer::Base.deliveries.clear
|
|
end
|
|
|
|
def test_user_create_google_failure
|
|
OmniAuth.config.mock_auth[:google] = :connection_failed
|
|
|
|
new_email = "newtester-google2@osm.org"
|
|
display_name = "new_tester-google2"
|
|
assert_difference("User.count", 0) 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 => "google",
|
|
:pass_crypt => "",
|
|
:pass_crypt_confirmation => "" } }
|
|
assert_response :redirect
|
|
assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
|
|
post response.location
|
|
assert_response :redirect
|
|
assert_redirected_to auth_success_path(:provider => "google")
|
|
follow_redirect!
|
|
assert_response :redirect
|
|
assert_redirected_to auth_failure_path(:strategy => "google", :message => "connection_failed", :origin => "/user/new")
|
|
follow_redirect!
|
|
assert_response :redirect
|
|
follow_redirect!
|
|
assert_response :success
|
|
assert_template "users/new"
|
|
end
|
|
end
|
|
end
|
|
|
|
ActionMailer::Base.deliveries.clear
|
|
end
|
|
|
|
def test_user_create_google_redirect
|
|
OmniAuth.config.add_mock(:google, :uid => "123454321", :extra => {
|
|
:id_info => { "openid_id" => "http://localhost:1123/new.tester" }
|
|
})
|
|
|
|
new_email = "redirect_tester_google@osm.org"
|
|
display_name = "redirect_tester_google"
|
|
# nothing special about this page, just need a protected page to redirect back to.
|
|
referer = "/traces/mine"
|
|
assert_difference("User.count") do
|
|
assert_difference("ActionMailer::Base.deliveries.size", 1) do
|
|
perform_enqueued_jobs do
|
|
post "/user/new",
|
|
:params => { :user => { :email => new_email,
|
|
:email_confirmation => new_email,
|
|
:display_name => display_name,
|
|
:auth_provider => "google",
|
|
:pass_crypt => "",
|
|
:pass_crypt_confirmation => "" },
|
|
:referer => referer }
|
|
assert_response :redirect
|
|
assert_redirected_to auth_path(:provider => "google", :origin => "/user/new")
|
|
post response.location
|
|
assert_response :redirect
|
|
assert_redirected_to auth_success_path(:provider => "google")
|
|
follow_redirect!
|
|
assert_response :redirect
|
|
assert_redirected_to "/user/terms"
|
|
post "/user/save",
|
|
:params => { :user => { :email => new_email,
|
|
:email_confirmation => new_email,
|
|
:display_name => display_name,
|
|
:auth_provider => "google",
|
|
:auth_uid => "http://localhost:1123/new.tester",
|
|
:pass_crypt => "testtest",
|
|
:pass_crypt_confirmation => "testtest" },
|
|
:read_ct => 1, :read_tou => 1 }
|
|
follow_redirect!
|
|
end
|
|
end
|
|
end
|
|
|
|
# Check the e-mail
|
|
register_email = ActionMailer::Base.deliveries.first
|
|
|
|
assert_equal register_email.to.first, new_email
|
|
# Check that the confirm account url is correct
|
|
confirm_regex = Regexp.new("/user/redirect_tester_google/confirm\\?confirm_string=([a-zA-Z0-9]*)")
|
|
email_text_parts(register_email).each do |part|
|
|
assert_match confirm_regex, part.body.to_s
|
|
end
|
|
confirm_string = email_text_parts(register_email).first.body.match(confirm_regex)[1]
|
|
|
|
# Check the page
|
|
assert_response :success
|
|
assert_template "confirmations/confirm"
|
|
|
|
ActionMailer::Base.deliveries.clear
|
|
|
|
# Go to the confirmation page
|
|
get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
|
|
assert_response :success
|
|
assert_template "confirmations/confirm"
|
|
|
|
post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
|
|
assert_response :redirect
|
|
follow_redirect!
|
|
assert_response :success
|
|
assert_template "site/welcome"
|
|
end
|
|
|
|
def test_user_create_facebook_success
|
|
new_email = "newtester-facebook@osm.org"
|
|
display_name = "new_tester-facebook"
|
|
password = "testtest"
|
|
|
|
OmniAuth.config.add_mock(:facebook, :uid => "123454321", :info => { "email" => new_email })
|
|
|
|
assert_difference("User.count") do
|
|
assert_no_difference("ActionMailer::Base.deliveries.size") do
|
|
perform_enqueued_jobs do
|
|
post "/user/new",
|
|
:params => { :user => { :email => new_email,
|
|
:email_confirmation => new_email,
|
|
:display_name => display_name,
|
|
:auth_provider => "facebook",
|
|
:pass_crypt => "",
|
|
:pass_crypt_confirmation => "" } }
|
|
assert_response :redirect
|
|
assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
|
|
post response.location
|
|
assert_response :redirect
|
|
assert_redirected_to auth_success_path(:provider => "facebook")
|
|
follow_redirect!
|
|
assert_response :redirect
|
|
assert_redirected_to "/user/terms"
|
|
post "/user/save",
|
|
:params => { :user => { :email => new_email,
|
|
:email_confirmation => new_email,
|
|
:display_name => display_name,
|
|
:auth_provider => "facebook",
|
|
:auth_uid => "123454321",
|
|
:pass_crypt => password,
|
|
:pass_crypt_confirmation => password },
|
|
:read_ct => 1, :read_tou => 1 }
|
|
assert_response :redirect
|
|
assert_redirected_to welcome_path
|
|
follow_redirect!
|
|
end
|
|
end
|
|
end
|
|
|
|
# Check the page
|
|
assert_response :success
|
|
assert_template "site/welcome"
|
|
|
|
ActionMailer::Base.deliveries.clear
|
|
end
|
|
|
|
def test_user_create_facebook_failure
|
|
OmniAuth.config.mock_auth[:facebook] = :connection_failed
|
|
|
|
new_email = "newtester-facebook2@osm.org"
|
|
display_name = "new_tester-facebook2"
|
|
assert_difference("User.count", 0) 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 => "facebook",
|
|
:pass_crypt => "",
|
|
:pass_crypt_confirmation => "" } }
|
|
assert_response :redirect
|
|
assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
|
|
post response.location
|
|
assert_response :redirect
|
|
assert_redirected_to auth_success_path(:provider => "facebook")
|
|
follow_redirect!
|
|
assert_response :redirect
|
|
assert_redirected_to auth_failure_path(:strategy => "facebook", :message => "connection_failed", :origin => "/user/new")
|
|
follow_redirect!
|
|
assert_response :redirect
|
|
follow_redirect!
|
|
assert_response :success
|
|
assert_template "users/new"
|
|
end
|
|
end
|
|
end
|
|
|
|
ActionMailer::Base.deliveries.clear
|
|
end
|
|
|
|
def test_user_create_facebook_redirect
|
|
OmniAuth.config.add_mock(:facebook, :uid => "123454321")
|
|
|
|
new_email = "redirect_tester_facebook@osm.org"
|
|
display_name = "redirect_tester_facebook"
|
|
# nothing special about this page, just need a protected page to redirect back to.
|
|
referer = "/traces/mine"
|
|
assert_difference("User.count") do
|
|
assert_difference("ActionMailer::Base.deliveries.size", 1) do
|
|
perform_enqueued_jobs do
|
|
post "/user/new",
|
|
:params => { :user => { :email => new_email,
|
|
:email_confirmation => new_email,
|
|
:display_name => display_name,
|
|
:auth_provider => "facebook",
|
|
:pass_crypt => "",
|
|
:pass_crypt_confirmation => "" },
|
|
:referer => referer }
|
|
assert_response :redirect
|
|
assert_redirected_to auth_path(:provider => "facebook", :origin => "/user/new")
|
|
post response.location
|
|
assert_response :redirect
|
|
assert_redirected_to auth_success_path(:provider => "facebook")
|
|
follow_redirect!
|
|
assert_response :redirect
|
|
assert_redirected_to "/user/terms"
|
|
post "/user/save",
|
|
:params => { :user => { :email => new_email,
|
|
:email_confirmation => new_email,
|
|
:display_name => display_name,
|
|
:auth_provider => "facebook",
|
|
:auth_uid => "http://localhost:1123/new.tester",
|
|
:pass_crypt => "testtest",
|
|
:pass_crypt_confirmation => "testtest" },
|
|
:read_ct => 1, :read_tou => 1 }
|
|
follow_redirect!
|
|
end
|
|
end
|
|
end
|
|
|
|
# Check the e-mail
|
|
register_email = ActionMailer::Base.deliveries.first
|
|
|
|
assert_equal register_email.to.first, new_email
|
|
# Check that the confirm account url is correct
|
|
confirm_regex = Regexp.new("/user/redirect_tester_facebook/confirm\\?confirm_string=([a-zA-Z0-9]*)")
|
|
email_text_parts(register_email).each do |part|
|
|
assert_match confirm_regex, part.body.to_s
|
|
end
|
|
confirm_string = email_text_parts(register_email).first.body.match(confirm_regex)[1]
|
|
|
|
# Check the page
|
|
assert_response :success
|
|
assert_template "confirmations/confirm"
|
|
|
|
ActionMailer::Base.deliveries.clear
|
|
|
|
# Go to the confirmation page
|
|
get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
|
|
assert_response :success
|
|
assert_template "confirmations/confirm"
|
|
|
|
post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
|
|
assert_response :redirect
|
|
follow_redirect!
|
|
assert_response :success
|
|
assert_template "site/welcome"
|
|
end
|
|
|
|
def test_user_create_windowslive_success
|
|
new_email = "newtester-windowslive@osm.org"
|
|
display_name = "new_tester-windowslive"
|
|
password = "testtest"
|
|
|
|
OmniAuth.config.add_mock(:windowslive, :uid => "123454321", :info => { "email" => new_email })
|
|
|
|
assert_difference("User.count") 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",
|
|
:pass_crypt => "",
|
|
:pass_crypt_confirmation => "" } }
|
|
assert_response :redirect
|
|
assert_redirected_to auth_path(:provider => "windowslive", :origin => "/user/new")
|
|
post response.location
|
|
assert_response :redirect
|
|
assert_redirected_to auth_success_path(:provider => "windowslive")
|
|
follow_redirect!
|
|
assert_response :redirect
|
|
assert_redirected_to "/user/terms"
|
|
post "/user/save",
|
|
:params => { :user => { :email => new_email,
|
|
:email_confirmation => new_email,
|
|
:display_name => display_name,
|
|
:auth_provider => "windowslive",
|
|
:auth_uid => "123454321",
|
|
:pass_crypt => password,
|
|
:pass_crypt_confirmation => password },
|
|
:read_ct => 1, :read_tou => 1 }
|
|
assert_response :redirect
|
|
assert_redirected_to welcome_path
|
|
follow_redirect!
|
|
end
|
|
end
|
|
end
|
|
|
|
# Check the page
|
|
assert_response :success
|
|
assert_template "site/welcome"
|
|
|
|
ActionMailer::Base.deliveries.clear
|
|
end
|
|
|
|
def test_user_create_windowslive_failure
|
|
OmniAuth.config.mock_auth[:windowslive] = :connection_failed
|
|
|
|
new_email = "newtester-windowslive2@osm.org"
|
|
display_name = "new_tester-windowslive2"
|
|
assert_difference("User.count", 0) 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",
|
|
:pass_crypt => "",
|
|
:pass_crypt_confirmation => "" } }
|
|
assert_response :redirect
|
|
assert_redirected_to auth_path(:provider => "windowslive", :origin => "/user/new")
|
|
post response.location
|
|
assert_response :redirect
|
|
assert_redirected_to auth_success_path(:provider => "windowslive")
|
|
follow_redirect!
|
|
assert_response :redirect
|
|
assert_redirected_to auth_failure_path(:strategy => "windowslive", :message => "connection_failed", :origin => "/user/new")
|
|
follow_redirect!
|
|
assert_response :redirect
|
|
follow_redirect!
|
|
assert_response :success
|
|
assert_template "users/new"
|
|
end
|
|
end
|
|
end
|
|
|
|
ActionMailer::Base.deliveries.clear
|
|
end
|
|
|
|
def test_user_create_windowslive_redirect
|
|
OmniAuth.config.add_mock(:windowslive, :uid => "123454321")
|
|
|
|
new_email = "redirect_tester_windowslive@osm.org"
|
|
display_name = "redirect_tester_windowslive"
|
|
# nothing special about this page, just need a protected page to redirect back to.
|
|
referer = "/traces/mine"
|
|
assert_difference("User.count") do
|
|
assert_difference("ActionMailer::Base.deliveries.size", 1) do
|
|
perform_enqueued_jobs do
|
|
post "/user/new",
|
|
:params => { :user => { :email => new_email,
|
|
:email_confirmation => new_email,
|
|
:display_name => display_name,
|
|
:auth_provider => "windowslive",
|
|
:pass_crypt => "",
|
|
:pass_crypt_confirmation => "" },
|
|
:referer => referer }
|
|
assert_response :redirect
|
|
assert_redirected_to auth_path(:provider => "windowslive", :origin => "/user/new")
|
|
post response.location
|
|
assert_response :redirect
|
|
assert_redirected_to auth_success_path(:provider => "windowslive")
|
|
follow_redirect!
|
|
assert_response :redirect
|
|
assert_redirected_to "/user/terms"
|
|
post "/user/save",
|
|
:params => { :user => { :email => new_email,
|
|
:email_confirmation => new_email,
|
|
:display_name => display_name,
|
|
:auth_provider => "windowslive",
|
|
:auth_uid => "http://localhost:1123/new.tester",
|
|
:pass_crypt => "testtest",
|
|
:pass_crypt_confirmation => "testtest" },
|
|
:read_ct => 1, :read_tou => 1 }
|
|
follow_redirect!
|
|
end
|
|
end
|
|
end
|
|
|
|
# Check the e-mail
|
|
register_email = ActionMailer::Base.deliveries.first
|
|
|
|
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]*)")
|
|
email_text_parts(register_email).each do |part|
|
|
assert_match confirm_regex, part.body.to_s
|
|
end
|
|
confirm_string = email_text_parts(register_email).first.body.match(confirm_regex)[1]
|
|
|
|
# Check the page
|
|
assert_response :success
|
|
assert_template "confirmations/confirm"
|
|
|
|
ActionMailer::Base.deliveries.clear
|
|
|
|
# Go to the confirmation page
|
|
get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
|
|
assert_response :success
|
|
assert_template "confirmations/confirm"
|
|
|
|
post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
|
|
assert_response :redirect
|
|
follow_redirect!
|
|
assert_response :success
|
|
assert_template "site/welcome"
|
|
end
|
|
|
|
def test_user_create_github_success
|
|
new_email = "newtester-github@osm.org"
|
|
display_name = "new_tester-github"
|
|
password = "testtest"
|
|
|
|
OmniAuth.config.add_mock(:github, :uid => "123454321", :info => { "email" => new_email })
|
|
|
|
assert_difference("User.count") do
|
|
assert_difference("ActionMailer::Base.deliveries.size", 1) do
|
|
perform_enqueued_jobs do
|
|
post "/user/new",
|
|
:params => { :user => { :email => new_email,
|
|
:email_confirmation => new_email,
|
|
:display_name => display_name,
|
|
:auth_provider => "github",
|
|
:pass_crypt => "",
|
|
:pass_crypt_confirmation => "" } }
|
|
assert_response :redirect
|
|
assert_redirected_to auth_path(:provider => "github", :origin => "/user/new")
|
|
post response.location
|
|
assert_response :redirect
|
|
assert_redirected_to auth_success_path(:provider => "github")
|
|
follow_redirect!
|
|
assert_response :redirect
|
|
assert_redirected_to "/user/terms"
|
|
post "/user/save",
|
|
:params => { :user => { :email => new_email,
|
|
:email_confirmation => new_email,
|
|
:display_name => display_name,
|
|
:auth_provider => "github",
|
|
: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
|
|
follow_redirect!
|
|
end
|
|
end
|
|
end
|
|
|
|
# Check the page
|
|
assert_response :success
|
|
assert_template "confirmations/confirm"
|
|
|
|
ActionMailer::Base.deliveries.clear
|
|
end
|
|
|
|
def test_user_create_github_failure
|
|
OmniAuth.config.mock_auth[:github] = :connection_failed
|
|
|
|
new_email = "newtester-github2@osm.org"
|
|
display_name = "new_tester-github2"
|
|
assert_difference("User.count", 0) 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 => "github",
|
|
:pass_crypt => "",
|
|
:pass_crypt_confirmation => "" } }
|
|
assert_response :redirect
|
|
assert_redirected_to auth_path(:provider => "github", :origin => "/user/new")
|
|
post response.location
|
|
assert_response :redirect
|
|
assert_redirected_to auth_success_path(:provider => "github")
|
|
follow_redirect!
|
|
assert_response :redirect
|
|
assert_redirected_to auth_failure_path(:strategy => "github", :message => "connection_failed", :origin => "/user/new")
|
|
follow_redirect!
|
|
assert_response :redirect
|
|
follow_redirect!
|
|
assert_response :success
|
|
assert_template "users/new"
|
|
end
|
|
end
|
|
end
|
|
|
|
ActionMailer::Base.deliveries.clear
|
|
end
|
|
|
|
def test_user_create_github_redirect
|
|
OmniAuth.config.add_mock(:github, :uid => "123454321")
|
|
|
|
new_email = "redirect_tester_github@osm.org"
|
|
display_name = "redirect_tester_github"
|
|
# nothing special about this page, just need a protected page to redirect back to.
|
|
referer = "/traces/mine"
|
|
assert_difference("User.count") do
|
|
assert_difference("ActionMailer::Base.deliveries.size", 1) do
|
|
perform_enqueued_jobs do
|
|
post "/user/new",
|
|
:params => { :user => { :email => new_email,
|
|
:email_confirmation => new_email,
|
|
:display_name => display_name,
|
|
:auth_provider => "github",
|
|
:pass_crypt => "",
|
|
:pass_crypt_confirmation => "" },
|
|
:referer => referer }
|
|
assert_response :redirect
|
|
assert_redirected_to auth_path(:provider => "github", :origin => "/user/new")
|
|
post response.location
|
|
assert_response :redirect
|
|
assert_redirected_to auth_success_path(:provider => "github")
|
|
follow_redirect!
|
|
assert_response :redirect
|
|
assert_redirected_to "/user/terms"
|
|
post "/user/save",
|
|
:params => { :user => { :email => new_email,
|
|
:email_confirmation => new_email,
|
|
:display_name => display_name,
|
|
:auth_provider => "github",
|
|
:auth_uid => "http://localhost:1123/new.tester",
|
|
:pass_crypt => "testtest",
|
|
:pass_crypt_confirmation => "testtest" },
|
|
:read_ct => 1,
|
|
:read_tou => 1 }
|
|
follow_redirect!
|
|
end
|
|
end
|
|
end
|
|
|
|
# Check the e-mail
|
|
register_email = ActionMailer::Base.deliveries.first
|
|
|
|
assert_equal register_email.to.first, new_email
|
|
# Check that the confirm account url is correct
|
|
confirm_regex = Regexp.new("/user/redirect_tester_github/confirm\\?confirm_string=([a-zA-Z0-9]*)")
|
|
email_text_parts(register_email).each do |part|
|
|
assert_match confirm_regex, part.body.to_s
|
|
end
|
|
confirm_string = email_text_parts(register_email).first.body.match(confirm_regex)[1]
|
|
|
|
# Check the page
|
|
assert_response :success
|
|
assert_template "confirmations/confirm"
|
|
|
|
ActionMailer::Base.deliveries.clear
|
|
|
|
# Go to the confirmation page
|
|
get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
|
|
assert_response :success
|
|
assert_template "confirmations/confirm"
|
|
|
|
post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
|
|
assert_response :redirect
|
|
follow_redirect!
|
|
assert_response :success
|
|
assert_template "site/welcome"
|
|
end
|
|
|
|
def test_user_create_wikipedia_success
|
|
new_email = "newtester-wikipedia@osm.org"
|
|
display_name = "new_tester-wikipedia"
|
|
password = "testtest"
|
|
|
|
OmniAuth.config.add_mock(:wikipedia, :uid => "123454321", :info => { "email" => new_email })
|
|
|
|
assert_difference("User.count") do
|
|
assert_difference("ActionMailer::Base.deliveries.size", 1) do
|
|
perform_enqueued_jobs do
|
|
post "/user/new",
|
|
:params => { :user => { :email => new_email,
|
|
:email_confirmation => new_email,
|
|
:display_name => display_name,
|
|
:auth_provider => "wikipedia",
|
|
:pass_crypt => "",
|
|
:pass_crypt_confirmation => "" } }
|
|
assert_response :redirect
|
|
assert_redirected_to auth_path(:provider => "wikipedia", :origin => "/user/new")
|
|
post response.location
|
|
assert_response :redirect
|
|
assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
|
|
follow_redirect!
|
|
assert_response :redirect
|
|
assert_redirected_to "/user/terms"
|
|
post "/user/save",
|
|
:params => { :user => { :email => new_email,
|
|
:email_confirmation => new_email,
|
|
:display_name => display_name,
|
|
:auth_provider => "wikipedia",
|
|
: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
|
|
follow_redirect!
|
|
end
|
|
end
|
|
end
|
|
|
|
# Check the page
|
|
assert_response :success
|
|
assert_template "confirmations/confirm"
|
|
|
|
ActionMailer::Base.deliveries.clear
|
|
end
|
|
|
|
def test_user_create_wikipedia_failure
|
|
OmniAuth.config.mock_auth[:wikipedia] = :connection_failed
|
|
|
|
new_email = "newtester-wikipedia2@osm.org"
|
|
display_name = "new_tester-wikipedia2"
|
|
assert_difference("User.count", 0) 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 => "wikipedia",
|
|
:pass_crypt => "",
|
|
:pass_crypt_confirmation => "" } }
|
|
assert_response :redirect
|
|
assert_redirected_to auth_path(:provider => "wikipedia", :origin => "/user/new")
|
|
post response.location
|
|
assert_response :redirect
|
|
assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
|
|
follow_redirect!
|
|
assert_response :redirect
|
|
assert_redirected_to auth_failure_path(:strategy => "wikipedia", :message => "connection_failed", :origin => "/user/new")
|
|
follow_redirect!
|
|
assert_response :redirect
|
|
follow_redirect!
|
|
assert_response :success
|
|
assert_template "users/new"
|
|
end
|
|
end
|
|
end
|
|
|
|
ActionMailer::Base.deliveries.clear
|
|
end
|
|
|
|
def test_user_create_wikipedia_redirect
|
|
OmniAuth.config.add_mock(:wikipedia, :uid => "123454321")
|
|
|
|
new_email = "redirect_tester_wikipedia@osm.org"
|
|
display_name = "redirect_tester_wikipedia"
|
|
# nothing special about this page, just need a protected page to redirect back to.
|
|
referer = "/traces/mine"
|
|
assert_difference("User.count") do
|
|
assert_difference("ActionMailer::Base.deliveries.size", 1) do
|
|
perform_enqueued_jobs do
|
|
post "/user/new",
|
|
:params => { :user => { :email => new_email,
|
|
:email_confirmation => new_email,
|
|
:display_name => display_name,
|
|
:auth_provider => "wikipedia",
|
|
:pass_crypt => "",
|
|
:pass_crypt_confirmation => "" },
|
|
:referer => referer }
|
|
assert_response :redirect
|
|
assert_redirected_to auth_path(:provider => "wikipedia", :origin => "/user/new")
|
|
post response.location
|
|
assert_response :redirect
|
|
assert_redirected_to auth_success_path(:provider => "wikipedia", :origin => "/user/new")
|
|
follow_redirect!
|
|
assert_response :redirect
|
|
assert_redirected_to "/user/terms"
|
|
post "/user/save",
|
|
:params => { :user => { :email => new_email,
|
|
:email_confirmation => new_email,
|
|
:display_name => display_name,
|
|
:auth_provider => "wikipedia",
|
|
:auth_uid => "http://localhost:1123/new.tester",
|
|
:pass_crypt => "testtest",
|
|
:pass_crypt_confirmation => "testtest" },
|
|
:read_ct => 1,
|
|
:read_tou => 1 }
|
|
follow_redirect!
|
|
end
|
|
end
|
|
end
|
|
|
|
# Check the e-mail
|
|
register_email = ActionMailer::Base.deliveries.first
|
|
|
|
assert_equal register_email.to.first, new_email
|
|
# Check that the confirm account url is correct
|
|
confirm_regex = Regexp.new("/user/redirect_tester_wikipedia/confirm\\?confirm_string=([a-zA-Z0-9]*)")
|
|
email_text_parts(register_email).each do |part|
|
|
assert_match confirm_regex, part.body.to_s
|
|
end
|
|
confirm_string = email_text_parts(register_email).first.body.match(confirm_regex)[1]
|
|
|
|
# Check the page
|
|
assert_response :success
|
|
assert_template "confirmations/confirm"
|
|
|
|
ActionMailer::Base.deliveries.clear
|
|
|
|
# Go to the confirmation page
|
|
get "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
|
|
assert_response :success
|
|
assert_template "confirmations/confirm"
|
|
|
|
post "/user/#{display_name}/confirm", :params => { :confirm_string => confirm_string }
|
|
assert_response :redirect
|
|
follow_redirect!
|
|
assert_response :success
|
|
assert_template "site/welcome"
|
|
end
|
|
end
|