Files
osem/spec/features/omniauth_spec.rb
AEtherC0r3 95b88be061 Add tests for openid signup with every provider
The spec for omniauth doesn't test signup for every provider, and it
doesn't test if it has tests for all available providers
Also, we no longer use secrets

* Add model test to check if the omniauth providers have changed
* Test signup using every provider
* Replace secretswith environment variables
2017-05-06 10:37:58 +03:00

153 lines
5.3 KiB
Ruby

require 'spec_helper'
feature Openid do
shared_examples 'sign in with openid' do
scenario 'has option to log in with Google account' do
visit '/accounts/sign_in'
expect(page.has_content?('or sign in using')).to be true
expect(page.has_link?('omniauth-google')).to be true
end
scenario 'signs in *new* user with Google account' do
expected_count_openid = Openid.count + 1
expected_count_user = User.count + 1
visit '/accounts/sign_in'
mock_auth_new_user
within('#openidlinks') do
click_link 'omniauth-google'
end
expect(flash).to eq('test-1@example.com signed in successfully with google')
expect(Openid.count).to eq(expected_count_openid)
expect(User.count).to eq(expected_count_user)
end
scenario 'signs in an existing user' do
create(:user, email: 'test-participant-1@example.com')
expected_count_openid = Openid.count + 1
expected_count_user = User.count
visit '/accounts/sign_in'
mock_auth_existing_user_participant
within('#openidlinks') do
click_link 'omniauth-google'
end
expect(flash).to eq('test-participant-1@example.com signed in successfully with google')
expect(Openid.count).to eq(expected_count_openid)
expect(User.count).to eq(expected_count_user)
end
scenario 'can handle authentication error' do
OmniAuth.config.mock_auth[:google] = :invalid_credentials
visit '/accounts/sign_in'
expect(page.has_content?('or sign in using')).to be true
within('#openidlinks') do
click_link 'omniauth-google'
end
expect(flash).to eq('Could not authenticate you from Google because "Invalid credentials".')
end
scenario 'adds openid to existing user' do
# Sign in user
user = create(:user, email: 'test-participant-1@example.com')
sign_in user
# Add openID to current user
expected_count_openid = Openid.count + 1
expected_count_user = User.count
visit '/accounts/edit'
mock_auth_new_user
within('#openidlinks') do
click_link 'omniauth-google'
end
expect(flash).to eq('test-participant-1@example.com signed in successfully with google')
expect(Openid.count).to eq(expected_count_openid)
expect(User.count).to eq(expected_count_user)
expect(Openid.where(email: 'test-1@example.com').first.nil?).to eq(false)
end
scenario 'signs in with openID using the same email as another associated openid' do
# Sign in user
create(:user, email: 'test-participant-1@example.com')
expected_count_openid = Openid.count + 1
expected_count_user = User.count
visit '/accounts/sign_in'
mock_auth_existing_user_participant
within('#openidlinks') do
click_link 'omniauth-google'
end
expect(flash).to eq('test-participant-1@example.com signed in successfully with google')
expect(Openid.count).to eq(expected_count_openid)
expect(User.count).to eq(expected_count_user)
# Add openID to current user with email test-1@gmail.com
expected_count_openid = Openid.count + 1
expected_count_user = User.count
visit '/accounts/edit'
mock_auth_new_user
within('#openidlinks') do
click_link 'omniauth-google'
end
expect(flash).to eq('test-participant-1@example.com signed in successfully with google')
expect(Openid.count).to eq(expected_count_openid)
expect(User.count).to eq(expected_count_user)
expect(Openid.where(email: 'test-participant-1@example.com').first.nil?).to eq(false)
expect(Openid.where(email: 'test-1@example.com').first.nil?).to eq(false)
# Sign in with different openID using same email (test-1@gmail.com)
sign_out
expected_count_openid = Openid.count + 1
expected_count_user = User.count
visit '/accounts/sign_in'
mock_auth_new_user_fb
within('#openidlinks') do
click_link 'omniauth-facebook'
end
expect(flash).to eq('test-participant-1@example.com signed in successfully with facebook')
expect(Openid.count).to eq(expected_count_openid)
expect(User.count).to eq(expected_count_user)
last_openid = Openid.last
expect(last_openid.uid).to eq('facebook-test-uid-1')
expect(last_openid.email).to eq('test-1@example.com')
end
end
shared_examples 'sign up with openid' do |provider|
scenario "has option to sign in with #{provider}" do
visit '/accounts/sign_up'
expect(page.has_content?('or sign in using')).to eq true
expect(page.has_link?("omniauth-#{provider}")).to eq true
end
scenario "sign up with #{provider}" do
expected_count_openid = Openid.count + 1
expected_count_user = User.count + 1
visit '/accounts/sign_up'
mock_auth_accounts
within('#openidlinks') do
click_link "omniauth-#{provider}"
end
expect(flash).to eq("user-#{provider}@example.com signed in successfully with #{provider}")
expect(Openid.count).to eq(expected_count_openid)
expect(User.count).to eq(expected_count_user)
end
end
describe 'omniauth' do
if User.omniauth_providers.present?
it_behaves_like 'sign in with openid'
User.omniauth_providers.each do |provider|
it_behaves_like 'sign up with openid', provider
end
end
end
end