From 95b88be061da8b4068e7b3e78597282a9fc033ee Mon Sep 17 00:00:00 2001 From: AEtherC0r3 Date: Thu, 13 Apr 2017 22:40:56 +0300 Subject: [PATCH] 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 --- spec/features/omniauth_spec.rb | 26 +++++++++++ spec/models/user_spec.rb | 6 +++ spec/support/omniauth_macros.rb | 79 +++++++++++++++++++++++++++++++-- 3 files changed, 107 insertions(+), 4 deletions(-) diff --git a/spec/features/omniauth_spec.rb b/spec/features/omniauth_spec.rb index 6e05b06d..419d1f03 100644 --- a/spec/features/omniauth_spec.rb +++ b/spec/features/omniauth_spec.rb @@ -118,9 +118,35 @@ feature Openid do 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 diff --git a/spec/models/user_spec.rb b/spec/models/user_spec.rb index def87319..d9b24c79 100644 --- a/spec/models/user_spec.rb +++ b/spec/models/user_spec.rb @@ -426,4 +426,10 @@ describe User do expect(user.events_registrations).to eq [@events_registration1, @events_registration2] end end + + describe '.omniauth_providers' do + it 'contains providers' do + expect(User.omniauth_providers).to eq [:suse, :google, :facebook, :github] + end + end end diff --git a/spec/support/omniauth_macros.rb b/spec/support/omniauth_macros.rb index 1f81efe0..47ff191e 100644 --- a/spec/support/omniauth_macros.rb +++ b/spec/support/omniauth_macros.rb @@ -2,10 +2,14 @@ module OmniauthMacros # The mock_auth configuration allows you to set per-provider (or default) # authentication hashes to return during integration testing. - Rails.application.secrets.google_key = 'test key google' - Rails.application.secrets.google_secret = 'test secret google' - Rails.application.secrets.facebook_key = 'test key facebook' - Rails.application.secrets.facebook_secret = 'test secret facebook' + ENV['OSEM_GOOGLE_KEY'] = 'test key google' + ENV['OSEM_GOOGLE_SECRET'] = 'test secret google' + ENV['OSEM_FACEBOOK_KEY'] = 'test key facebook' + ENV['OSEM_FACEBOOK_SECRET'] = 'test secret facebook' + ENV['OSEM_SUSE_KEY'] = 'test key suse' + ENV['OSEM_SUSE_SECRET'] = 'test secret suse' + ENV['OSEM_GITHUB_KEY'] = 'test key github' + ENV['OSEM_GITHUB_SECRET'] = 'test secret github' def mock_auth_new_user OmniAuth.config.mock_auth[:google] = @@ -74,4 +78,71 @@ module OmniauthMacros } ) end + + # We use these mock accounts to ensure that the ones which are available in + # development are valid, to test omniauth actions and verify that a mock + # account is available for every supported omniauth provider. + # These must be identical to the ones in /config/environments/development.rb + # Remember to keep them in sync with development.rb + def mock_auth_accounts + OmniAuth.config.mock_auth[:facebook] = + OmniAuth::AuthHash.new( + provider: 'facebook', + uid: 'facebook-test-uid-1', + info: { + name: 'facebook user', + email: 'user-facebook@example.com', + username: 'user_facebook' + }, + credentials: { + token: 'fb_mock_token', + secret: 'fb_mock_secret' + } + ) + + OmniAuth.config.mock_auth[:google] = + OmniAuth::AuthHash.new( + provider: 'google', + uid: 'google-test-uid-1', + info: { + name: 'google user', + email: 'user-google@example.com', + username: 'user_google' + }, + credentials: { + token: 'google_mock_token', + secret: 'google_mock_secret' + } + ) + + OmniAuth.config.mock_auth[:suse] = + OmniAuth::AuthHash.new( + provider: 'suse', + uid: 'suse-test-uid-1', + info: { + name: 'suse user', + email: 'user-suse@example.com', + username: 'user_suse' + }, + credentials: { + token: 'suse_mock_token', + secret: 'suse_mock_secret' + } + ) + + OmniAuth.config.mock_auth[:github] = + OmniAuth::AuthHash.new( + provider: 'github', + uid: 'github-test-uid-1', + info: { + name: 'github user', + email: 'user-github@example.com', + username: 'user_github' + }, + credentials: { + token: 'github_mock_token', + secret: 'github_mock_secret' + } + ) + end end