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:
ViditChitkara 2017-10-21 02:38:41 +05:30 committed by Stella Rouzi
parent 2df8adea69
commit 83053f4626
5 changed files with 62 additions and 1 deletions

View file

@ -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,

View file

@ -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.

View 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
View 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
View 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