mirror of
https://github.com/openSUSE/osem.git
synced 2026-08-13 19:54:02 +00:00
added email presence validation to openid
closes #1658 added test for openid fixed robocup offences written tests for email presence validation minor changes shifted omniauth callback tests to rspec controllers fixed linting bug minor changes minor changes
This commit is contained in:
parent
2df8adea69
commit
83053f4626
5 changed files with 62 additions and 1 deletions
|
|
@ -11,6 +11,11 @@ module Users
|
|||
|
||||
def handle(provider)
|
||||
auth_hash = request.env['omniauth.auth']
|
||||
unless auth_hash.info.email.present?
|
||||
flash[:error] = "Email field is missing in your #{provider} account"
|
||||
redirect_to new_user_registration_path
|
||||
return
|
||||
end
|
||||
username = auth_hash.info.email.split('@')[0]
|
||||
openid = Openid.find_for_oauth(auth_hash) # Get or create openid
|
||||
# If openid exists and is associated with a user, sign in with associated user,
|
||||
|
|
|
|||
|
|
@ -1,6 +1,6 @@
|
|||
class Openid < ApplicationRecord
|
||||
belongs_to :user
|
||||
validates :provider, :uid, presence: true
|
||||
validates :provider, :uid, :email, presence: true
|
||||
|
||||
# Searches for openid based on provider and uid.
|
||||
# Returns found openid or a new openid.
|
||||
|
|
|
|||
31
spec/controllers/users/omniauth_callbacks_controller_spec.rb
Normal file
31
spec/controllers/users/omniauth_callbacks_controller_spec.rb
Normal file
|
|
@ -0,0 +1,31 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Users::OmniauthCallbacksController do
|
||||
context 'email is not there in auth hash' do
|
||||
before do
|
||||
stub_env_for_omniauth
|
||||
get :google
|
||||
end
|
||||
|
||||
it { expect(flash[:error]).to eq('Email field is missing in your google account') }
|
||||
end
|
||||
end
|
||||
|
||||
def stub_env_for_omniauth
|
||||
request.env['devise.mapping'] = Devise.mappings[:user]
|
||||
env = OmniAuth::AuthHash.new(
|
||||
provider: 'google',
|
||||
uid: 'google-test-uid-1',
|
||||
info: {
|
||||
name: 'google user',
|
||||
email: nil,
|
||||
username: 'user_google'
|
||||
},
|
||||
credentials: {
|
||||
token: 'google_mock_token',
|
||||
secret: 'google_mock_secret'
|
||||
}
|
||||
)
|
||||
request.env['omniauth.auth'] = env
|
||||
@controller.stub(:env).and_return(env)
|
||||
end
|
||||
10
spec/factories/openid.rb
Normal file
10
spec/factories/openid.rb
Normal file
|
|
@ -0,0 +1,10 @@
|
|||
# Read about factories at https://github.com/thoughtbot/factory_girl
|
||||
|
||||
FactoryGirl.define do
|
||||
factory :openid do
|
||||
provider { Faker::Internet.domain_word }
|
||||
email { Faker::Internet.email }
|
||||
uid { SecureRandom.hex }
|
||||
user
|
||||
end
|
||||
end
|
||||
15
spec/models/openid.rb
Normal file
15
spec/models/openid.rb
Normal file
|
|
@ -0,0 +1,15 @@
|
|||
require 'spec_helper'
|
||||
|
||||
describe Openid do
|
||||
subject { create(:openid) }
|
||||
|
||||
describe 'validation' do
|
||||
it { is_expected.to validate_presence_of(:provider) }
|
||||
it { is_expected.to validate_presence_of(:uid) }
|
||||
it { is_expected.to validate_presence_of(:email) }
|
||||
end
|
||||
|
||||
describe 'association' do
|
||||
it { is_expected.to belong_to(:user) }
|
||||
end
|
||||
end
|
||||
Loading…
Add table
Add a link
Reference in a new issue