devise_g5_authenticatable 0.1.0

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (120) hide show
  1. checksums.yaml +7 -0
  2. data/.gitignore +21 -0
  3. data/.rspec +2 -0
  4. data/.ruby-version +1 -0
  5. data/CHANGELOG.md +25 -0
  6. data/Gemfile +23 -0
  7. data/LICENSE +20 -0
  8. data/README.md +243 -0
  9. data/Rakefile +20 -0
  10. data/app/controllers/devise_g5_authenticatable/registrations_controller.rb +5 -0
  11. data/app/controllers/devise_g5_authenticatable/sessions_controller.rb +58 -0
  12. data/circle.yml +4 -0
  13. data/config/initializers/devise_g5_authenticatable.rb +3 -0
  14. data/config/locales/en.yml +6 -0
  15. data/devise_g5_authenticatable.gemspec +24 -0
  16. data/lib/devise_g5_authenticatable.rb +16 -0
  17. data/lib/devise_g5_authenticatable/controllers/helpers.rb +37 -0
  18. data/lib/devise_g5_authenticatable/controllers/url_helpers.rb +13 -0
  19. data/lib/devise_g5_authenticatable/engine.rb +11 -0
  20. data/lib/devise_g5_authenticatable/g5.rb +4 -0
  21. data/lib/devise_g5_authenticatable/g5/auth_password_validator.rb +30 -0
  22. data/lib/devise_g5_authenticatable/g5/auth_user_creator.rb +48 -0
  23. data/lib/devise_g5_authenticatable/g5/auth_user_updater.rb +43 -0
  24. data/lib/devise_g5_authenticatable/g5/user_exporter.rb +61 -0
  25. data/lib/devise_g5_authenticatable/models/g5_authenticatable.rb +99 -0
  26. data/lib/devise_g5_authenticatable/models/protected_attributes.rb +16 -0
  27. data/lib/devise_g5_authenticatable/omniauth.rb +9 -0
  28. data/lib/devise_g5_authenticatable/routes.rb +58 -0
  29. data/lib/devise_g5_authenticatable/version.rb +3 -0
  30. data/lib/tasks/g5/export_users.rake +13 -0
  31. data/spec/controllers/helpers_spec.rb +295 -0
  32. data/spec/controllers/sessions_controller_spec.rb +256 -0
  33. data/spec/controllers/url_helpers_spec.rb +332 -0
  34. data/spec/dummy/.gitignore +15 -0
  35. data/spec/dummy/README.rdoc +261 -0
  36. data/spec/dummy/Rakefile +7 -0
  37. data/spec/dummy/app/assets/images/rails.png +0 -0
  38. data/spec/dummy/app/assets/javascripts/application.js +15 -0
  39. data/spec/dummy/app/assets/javascripts/custom_sessions.js +2 -0
  40. data/spec/dummy/app/assets/javascripts/home.js +2 -0
  41. data/spec/dummy/app/assets/stylesheets/application.css +13 -0
  42. data/spec/dummy/app/assets/stylesheets/custom_sessions.css +4 -0
  43. data/spec/dummy/app/assets/stylesheets/home.css +4 -0
  44. data/spec/dummy/app/controllers/application_controller.rb +3 -0
  45. data/spec/dummy/app/controllers/custom_registrations_controllers.rb +2 -0
  46. data/spec/dummy/app/controllers/custom_sessions_controller.rb +2 -0
  47. data/spec/dummy/app/controllers/home_controller.rb +4 -0
  48. data/spec/dummy/app/helpers/application_helper.rb +2 -0
  49. data/spec/dummy/app/helpers/custom_sessions_helper.rb +2 -0
  50. data/spec/dummy/app/helpers/home_helper.rb +2 -0
  51. data/spec/dummy/app/mailers/.gitkeep +0 -0
  52. data/spec/dummy/app/models/admin.rb +3 -0
  53. data/spec/dummy/app/models/user.rb +10 -0
  54. data/spec/dummy/app/views/anonymous/new.html.erb +0 -0
  55. data/spec/dummy/app/views/home/index.html.erb +1 -0
  56. data/spec/dummy/app/views/layouts/application.html.erb +16 -0
  57. data/spec/dummy/config.ru +4 -0
  58. data/spec/dummy/config/application.rb +64 -0
  59. data/spec/dummy/config/boot.rb +10 -0
  60. data/spec/dummy/config/database.yml.ci +6 -0
  61. data/spec/dummy/config/database.yml.sample +13 -0
  62. data/spec/dummy/config/environment.rb +5 -0
  63. data/spec/dummy/config/environments/development.rb +39 -0
  64. data/spec/dummy/config/environments/production.rb +67 -0
  65. data/spec/dummy/config/environments/test.rb +37 -0
  66. data/spec/dummy/config/initializers/backtrace_silencers.rb +7 -0
  67. data/spec/dummy/config/initializers/devise.rb +259 -0
  68. data/spec/dummy/config/initializers/inflections.rb +15 -0
  69. data/spec/dummy/config/initializers/mime_types.rb +5 -0
  70. data/spec/dummy/config/initializers/secret_token.rb +7 -0
  71. data/spec/dummy/config/initializers/session_store.rb +8 -0
  72. data/spec/dummy/config/initializers/wrap_parameters.rb +14 -0
  73. data/spec/dummy/config/locales/devise.en.yml +60 -0
  74. data/spec/dummy/config/locales/en.yml +5 -0
  75. data/spec/dummy/config/routes.rb +70 -0
  76. data/spec/dummy/db/migrate/20131230235849_devise_create_users.rb +42 -0
  77. data/spec/dummy/db/migrate/20140102213131_drop_database_authenticatable.rb +16 -0
  78. data/spec/dummy/db/migrate/20140103032308_drop_recoverable.rb +16 -0
  79. data/spec/dummy/db/migrate/20140103042329_drop_rememberable.rb +13 -0
  80. data/spec/dummy/db/migrate/20140103174810_add_omniauth_columns_to_users.rb +18 -0
  81. data/spec/dummy/db/migrate/20140103191601_add_email_back_to_user.rb +8 -0
  82. data/spec/dummy/db/migrate/20140113202948_devise_create_admins.rb +42 -0
  83. data/spec/dummy/db/migrate/20140113233821_add_provider_and_uid_to_admins.rb +8 -0
  84. data/spec/dummy/db/schema.rb +50 -0
  85. data/spec/dummy/db/seeds.rb +7 -0
  86. data/spec/dummy/lib/assets/.gitkeep +0 -0
  87. data/spec/dummy/lib/tasks/.gitkeep +0 -0
  88. data/spec/dummy/log/.gitkeep +0 -0
  89. data/spec/dummy/public/404.html +26 -0
  90. data/spec/dummy/public/422.html +26 -0
  91. data/spec/dummy/public/500.html +25 -0
  92. data/spec/dummy/public/favicon.ico +0 -0
  93. data/spec/dummy/public/robots.txt +5 -0
  94. data/spec/dummy/script/rails +6 -0
  95. data/spec/dummy/vendor/assets/javascripts/.gitkeep +0 -0
  96. data/spec/dummy/vendor/assets/stylesheets/.gitkeep +0 -0
  97. data/spec/dummy/vendor/plugins/.gitkeep +0 -0
  98. data/spec/factories/admin.rb +10 -0
  99. data/spec/factories/user.rb +10 -0
  100. data/spec/features/edit_registration_spec.rb +109 -0
  101. data/spec/features/registration_spec.rb +99 -0
  102. data/spec/features/sign_in_spec.rb +91 -0
  103. data/spec/features/sign_out_spec.rb +7 -0
  104. data/spec/g5/auth_password_validator_spec.rb +81 -0
  105. data/spec/g5/auth_user_creator_spec.rb +100 -0
  106. data/spec/g5/auth_user_updater_spec.rb +113 -0
  107. data/spec/g5/user_exporter_spec.rb +105 -0
  108. data/spec/models/g5_authenticatable_spec.rb +540 -0
  109. data/spec/models/protected_attributes_spec.rb +17 -0
  110. data/spec/routing/registrations_routing_spec.rb +107 -0
  111. data/spec/routing/sessions_routing_spec.rb +111 -0
  112. data/spec/spec_helper.rb +44 -0
  113. data/spec/support/devise.rb +3 -0
  114. data/spec/support/omniauth.rb +3 -0
  115. data/spec/support/shared_contexts/oauth_error.rb +9 -0
  116. data/spec/support/shared_contexts/rake.rb +21 -0
  117. data/spec/support/shared_examples/registration_error.rb +15 -0
  118. data/spec/support/user_feature_methods.rb +26 -0
  119. data/spec/tasks/export_users_spec.rb +90 -0
  120. metadata +293 -0
@@ -0,0 +1,17 @@
1
+ require 'spec_helper'
2
+
3
+ describe DeviseG5Authenticatable::Models::ProtectedAttributes do
4
+ subject { model }
5
+
6
+ let(:model_class) { User }
7
+ let(:model) { model_class.new }
8
+
9
+ it { should allow_mass_assignment_of(:email) }
10
+ it { should allow_mass_assignment_of(:password) }
11
+ it { should allow_mass_assignment_of(:password_confirmation) }
12
+ it { should allow_mass_assignment_of(:provider) }
13
+ it { should allow_mass_assignment_of(:uid) }
14
+ it { should_not allow_mass_assignment_of(:g5_access_token) }
15
+ it { should allow_mass_assignment_of(:current_password) }
16
+ it { should allow_mass_assignment_of(:updated_by) }
17
+ end
@@ -0,0 +1,107 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Registrations controller' do
4
+ describe 'routing' do
5
+ context 'with user scope' do
6
+ it 'should route GET /users/sign_up' do
7
+ expect(get '/users/sign_up').to route_to(controller: 'devise_g5_authenticatable/registrations',
8
+ action: 'new')
9
+ end
10
+
11
+ it 'should route POST /users' do
12
+ expect(post '/users').to route_to(controller: 'devise_g5_authenticatable/registrations',
13
+ action: 'create')
14
+ end
15
+
16
+ it 'should route GET /users/edit' do
17
+ expect(get '/users/edit').to route_to(controller: 'devise_g5_authenticatable/registrations',
18
+ action: 'edit')
19
+ end
20
+
21
+ it 'should route PUT /users' do
22
+ expect(put '/users').to route_to(controller: 'devise_g5_authenticatable/registrations',
23
+ action: 'update')
24
+ end
25
+
26
+ it 'should route DELETE /users' do
27
+ expect(delete '/users').to route_to(controller: 'devise_g5_authenticatable/registrations',
28
+ action: 'destroy')
29
+ end
30
+
31
+ it 'should route GET /users/cancel' do
32
+ expect(get '/users/cancel').to route_to(controller: 'devise_g5_authenticatable/registrations',
33
+ action: 'cancel')
34
+ end
35
+ end
36
+
37
+ context 'with admin scope' do
38
+ it 'should route GET /registered/admins/custom_sign_up' do
39
+ expect(get '/registered/admins/custom_sign_up').to route_to(controller: 'custom_registrations',
40
+ action: 'new')
41
+ end
42
+
43
+ it 'should route POST /registered/admins' do
44
+ expect(post '/registered/admins').to route_to(controller: 'custom_registrations',
45
+ action: 'create')
46
+ end
47
+
48
+ it 'should route GET /registered/admins/edit' do
49
+ expect(get '/registered/admins/edit').to route_to(controller: 'custom_registrations',
50
+ action: 'edit')
51
+ end
52
+
53
+ it 'should route PUT /registered/admins' do
54
+ expect(put '/registered/admins').to route_to(controller: 'custom_registrations',
55
+ action: 'update')
56
+ end
57
+
58
+ it 'should route DELETE /registered/admins' do
59
+ expect(delete '/registered/admins').to route_to(controller: 'custom_registrations',
60
+ action: 'destroy')
61
+ end
62
+
63
+ it 'should route GET /registered/admins/custom_cancel' do
64
+ expect(get '/registered/admins/custom_cancel').to route_to(controller: 'custom_registrations',
65
+ action: 'cancel')
66
+ end
67
+ end
68
+ end
69
+
70
+ describe 'generated url helpers' do
71
+ context 'with user scope' do
72
+ it 'should generate new_user_registration_path' do
73
+ expect(new_user_registration_path).to eq('/users/sign_up')
74
+ end
75
+
76
+ it 'should generate user_registration_path' do
77
+ expect(user_registration_path).to eq('/users')
78
+ end
79
+
80
+ it 'should generate edit_user_registration_path' do
81
+ expect(edit_user_registration_path).to eq('/users/edit')
82
+ end
83
+
84
+ it 'should generate cancel_user_registration_path' do
85
+ expect(cancel_user_registration_path).to eq('/users/cancel')
86
+ end
87
+ end
88
+
89
+ context 'with admin scope' do
90
+ it 'should generate new_admin_registration_path' do
91
+ expect(new_admin_registration_path).to eq('/registered/admins/custom_sign_up')
92
+ end
93
+
94
+ it 'should generate admin_registration_path' do
95
+ expect(admin_registration_path).to eq('/registered/admins')
96
+ end
97
+
98
+ it 'should generate edit_admin_registration_path' do
99
+ expect(edit_admin_registration_path).to eq('/registered/admins/edit')
100
+ end
101
+
102
+ it 'should generate cancel_admin_registration_path' do
103
+ expect(cancel_admin_registration_path).to eq('/registered/admins/custom_cancel')
104
+ end
105
+ end
106
+ end
107
+ end
@@ -0,0 +1,111 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'Sessions controller' do
4
+ describe 'routing' do
5
+ context 'with user scope' do
6
+ it 'should route GET /users/sign_in' do
7
+ expect(get '/users/sign_in').to route_to(controller: 'devise_g5_authenticatable/sessions',
8
+ action: 'new')
9
+ end
10
+
11
+ it 'should route DELETE /users/sign_out' do
12
+ expect(delete '/users/sign_out').to route_to(controller: 'devise_g5_authenticatable/sessions',
13
+ action: 'destroy')
14
+ end
15
+
16
+ it 'should route GET /users/auth/g5' do
17
+ expect(get '/users/auth/g5').to route_to(controller: 'devise_g5_authenticatable/sessions',
18
+ action: 'omniauth_passthru')
19
+ end
20
+
21
+ it 'should route POST /users/auth/g5' do
22
+ expect(post '/users/auth/g5').to route_to(controller: 'devise_g5_authenticatable/sessions',
23
+ action: 'omniauth_passthru')
24
+ end
25
+
26
+ it 'should route GET /users/auth/g5/callback' do
27
+ expect(get '/users/auth/g5/callback').to route_to(controller: 'devise_g5_authenticatable/sessions',
28
+ action: 'create')
29
+ end
30
+
31
+ it 'should route POST /users/auth/g5/callback' do
32
+ expect(post '/users/auth/g5/callback').to route_to(controller: 'devise_g5_authenticatable/sessions',
33
+ action: 'create')
34
+ end
35
+
36
+ it 'should set the OmniAuth path prefix' do
37
+ expect(OmniAuth.config.path_prefix).to eq('/users/auth')
38
+ end
39
+ end
40
+
41
+ context 'with admin scope' do
42
+ it 'should route GET /registered/admins/custom_sign_in' do
43
+ expect(get '/registered/admins/custom_sign_in').to route_to(controller: 'custom_sessions',
44
+ action: 'new')
45
+ end
46
+
47
+ it 'should route DELETE /registered/admins/custom_sign_out' do
48
+ expect(delete '/registered/admins/custom_sign_out').to route_to(controller: 'custom_sessions',
49
+ action: 'destroy')
50
+ end
51
+
52
+ it 'should route GET /registered/admins/auth/g5' do
53
+ expect(get '/registered/admins/auth/g5').to route_to(controller: 'custom_sessions',
54
+ action: 'omniauth_passthru')
55
+ end
56
+
57
+ it 'should route POST /registered/admins/auth/g5' do
58
+ expect(post '/registered/admins/auth/g5').to route_to(controller: 'custom_sessions',
59
+ action: 'omniauth_passthru')
60
+ end
61
+
62
+ it 'should route GET /registered/admins/auth/g5/callback' do
63
+ expect(get '/registered/admins/auth/g5/callback').to route_to(controller: 'custom_sessions',
64
+ action: 'create')
65
+ end
66
+
67
+ it 'should route POST /registered/admins/auth/g5/callback' do
68
+ expect(post '/registered/admins/auth/g5/callback').to route_to(controller: 'custom_sessions',
69
+ action: 'create')
70
+ end
71
+ end
72
+ end
73
+
74
+ describe 'generated url helpers' do
75
+ context 'with user scope' do
76
+ it 'should generate new_user_session_path' do
77
+ expect(new_user_session_path).to eq('/users/sign_in')
78
+ end
79
+
80
+ it 'should generate destroy_user_session_path' do
81
+ expect(destroy_user_session_path).to eq('/users/sign_out')
82
+ end
83
+
84
+ it 'should generate user_g5_authorize_path' do
85
+ expect(user_g5_authorize_path).to eq('/users/auth/g5')
86
+ end
87
+
88
+ it 'should generate user_g5_callback_path' do
89
+ expect(user_g5_callback_path).to eq('/users/auth/g5/callback')
90
+ end
91
+ end
92
+
93
+ context 'with admin scope' do
94
+ it 'should route new_admin_session_path' do
95
+ expect(new_admin_session_path).to eq('/registered/admins/custom_sign_in')
96
+ end
97
+
98
+ it 'should route destroy_admin_session_path' do
99
+ expect(destroy_admin_session_path).to eq('/registered/admins/custom_sign_out')
100
+ end
101
+
102
+ it 'should generate admin_g5_authorize_path' do
103
+ expect(admin_g5_authorize_path).to eq('/registered/admins/auth/g5')
104
+ end
105
+
106
+ it 'should generate admin_g5_callback_path' do
107
+ expect(admin_g5_callback_path).to eq('/registered/admins/auth/g5/callback')
108
+ end
109
+ end
110
+ end
111
+ end
@@ -0,0 +1,44 @@
1
+ # Setup for test coverage instrumentation (e.g. simplecov, codeclimate)
2
+ # MUST happen before any other code is loaded
3
+ require 'simplecov'
4
+ SimpleCov.start 'test_frameworks'
5
+
6
+ require 'codeclimate-test-reporter'
7
+ CodeClimate::TestReporter.start
8
+
9
+ require 'pry'
10
+
11
+ # Load rails dummy application
12
+ ENV['RAILS_ENV'] = 'test'
13
+ require File.expand_path('../dummy/config/environment.rb', __FILE__)
14
+
15
+ require 'rspec/rails'
16
+ require 'capybara/rspec'
17
+ require 'webmock/rspec'
18
+ require 'shoulda-matchers'
19
+ require 'factory_girl_rails'
20
+
21
+ # Load support files
22
+ Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
23
+
24
+ RSpec.configure do |config|
25
+ config.include FactoryGirl::Syntax::Methods
26
+
27
+ config.use_transactional_fixtures = true
28
+
29
+ config.treat_symbols_as_metadata_keys_with_true_values = true
30
+ config.run_all_when_everything_filtered = true
31
+ config.filter_run :focus
32
+
33
+ # Run specs in random order to surface order dependencies. If you find an
34
+ # order dependency and want to debug it, you can fix the order by providing
35
+ # the seed, which is printed after each run.
36
+ # --seed 1234
37
+ config.order = 'random'
38
+
39
+ # The integration tests can be run with:
40
+ # rspec -t type:feature
41
+ # config.filter_run_excluding type: 'feature'
42
+
43
+ config.after(:suite) { WebMock.disable! }
44
+ end
@@ -0,0 +1,3 @@
1
+ RSpec.configure do |config|
2
+ config.include Devise::TestHelpers, type: :controller
3
+ end
@@ -0,0 +1,3 @@
1
+ RSpec.configure do |config|
2
+ config.before(:all) { OmniAuth.config.logger = Logger.new('/dev/null') }
3
+ end
@@ -0,0 +1,9 @@
1
+ shared_context 'OAuth2::Error' do
2
+ let(:oauth_error) { OAuth2::Error.new(oauth_response) }
3
+ let(:oauth_response) do
4
+ double(:oauth_response,
5
+ parsed: {'error' => error_message}).as_null_object
6
+ end
7
+
8
+ let(:error_message) { 'Validation failed: Email is already taken' }
9
+ end
@@ -0,0 +1,21 @@
1
+ # Based on: http://robots.thoughtbot.com/test-rake-tasks-like-a-boss
2
+ # Modified for a non-Rails environment
3
+ require 'rake'
4
+
5
+ shared_context 'rake' do
6
+ let(:rake) { Rake::Application.new }
7
+ let(:task_name) { self.class.top_level_description }
8
+ let(:task_path) { "lib/tasks/#{task_name.split(':').first}/#{task_name.split(':').last}" }
9
+ let(:root_path) { File.expand_path('../../../..', __FILE__) }
10
+ subject(:task) { rake[task_name] }
11
+
12
+ def loaded_files_excluding_current_rake_file
13
+ $".reject {|file| file =~ /#{task_path}\.rake$/ }
14
+ end
15
+
16
+ before do
17
+ Rake.application = rake
18
+ Rake.application.rake_require(task_path, [root_path], loaded_files_excluding_current_rake_file)
19
+ Rake::Task.define_task(:environment)
20
+ end
21
+ end
@@ -0,0 +1,15 @@
1
+ shared_examples_for 'a registration validation error' do
2
+ it 'should not create a user' do
3
+ expect { subject }.to_not change { User.count }
4
+ end
5
+
6
+ it 'should not create a user on the auth server' do
7
+ subject
8
+ expect(auth_client).to_not have_received(:create_user)
9
+ end
10
+
11
+ it 'should display an error message' do
12
+ subject
13
+ expect(page).to have_content(error_message)
14
+ end
15
+ end
@@ -0,0 +1,26 @@
1
+ module UserFeatureMethods
2
+ def stub_g5_omniauth(user, options={})
3
+ OmniAuth.config.mock_auth[:g5] = OmniAuth::AuthHash.new({
4
+ uid: user.uid,
5
+ provider: 'g5',
6
+ info: {email: user.email},
7
+ credentials: {token: user.g5_access_token}
8
+ }.merge(options))
9
+ end
10
+
11
+ def stub_g5_invalid_credentials
12
+ OmniAuth.config.mock_auth[:g5] = :invalid_credentials
13
+ end
14
+
15
+ def visit_path_and_login_with(path, user)
16
+ stub_g5_omniauth(user)
17
+ visit path
18
+ end
19
+ end
20
+
21
+ RSpec.configure do |config|
22
+ config.before(:each) { OmniAuth.config.test_mode = true }
23
+ config.after(:each) { OmniAuth.config.test_mode = false }
24
+
25
+ config.include UserFeatureMethods, type: :feature
26
+ end
@@ -0,0 +1,90 @@
1
+ require 'spec_helper'
2
+
3
+ describe 'g5:export_users' do
4
+ include_context 'rake'
5
+
6
+ let(:user_exporter) { double(:user_exporter, export: nil) }
7
+ before { allow(G5::UserExporter).to receive(:new).and_return(user_exporter) }
8
+
9
+ before { ENV['G5_AUTH_CLIENT_ID'] = default_client_id }
10
+ let(:default_client_id) { 'default_client_id' }
11
+
12
+ before { ENV['G5_AUTH_CLIENT_SECRET'] = default_client_secret }
13
+ let(:default_client_secret) { 'default_client_secret' }
14
+
15
+ before { ENV['G5_AUTH_REDIRECT_URI'] = default_redirect_uri }
16
+ let(:default_redirect_uri) { 'http://test.host/default' }
17
+
18
+ before { ENV['G5_AUTH_ENDPOINT'] = default_endpoint }
19
+ let(:default_endpoint) { 'https://my.g5auth.host' }
20
+
21
+ before { ENV['G5_AUTH_AUTHORIZATION_CODE'] = default_auth_code }
22
+ let(:default_auth_code) { 'default_auth_code' }
23
+
24
+ def expect_init_user_exporter_with(option_name, expected_value)
25
+ expect(G5::UserExporter).to receive(:new) do |args|
26
+ expect(args[option_name]).to eq(expected_value)
27
+ user_exporter
28
+ end
29
+ end
30
+
31
+ it 'should use the default authorization code from the environment' do
32
+ expect_init_user_exporter_with(:authorization_code, default_auth_code)
33
+ task.invoke
34
+ end
35
+
36
+ it 'should allow the default authorization code to be overridden by an argument' do
37
+ auth_code_arg = 'some new auth code'
38
+ expect_init_user_exporter_with(:authorization_code, auth_code_arg)
39
+ task.invoke(auth_code_arg)
40
+ end
41
+
42
+ it 'should use the default client id from the environment' do
43
+ expect_init_user_exporter_with(:client_id, default_client_id)
44
+ task.invoke
45
+ end
46
+
47
+ it 'should allow the default client id to be overridden by an argument' do
48
+ client_id_arg = 'custom_client_id_override'
49
+ expect_init_user_exporter_with(:client_id, client_id_arg)
50
+ task.invoke(nil, client_id_arg)
51
+ end
52
+
53
+ it 'should use the default client secret from the environment' do
54
+ expect_init_user_exporter_with(:client_secret, default_client_secret)
55
+ task.invoke
56
+ end
57
+
58
+ it 'should allow the default client secret to be overridden by an argument' do
59
+ client_secret_arg = 'custom client secret'
60
+ expect_init_user_exporter_with(:client_secret, client_secret_arg)
61
+ task.invoke(nil, nil, client_secret_arg)
62
+ end
63
+
64
+ it 'should use the default redirect uri from the environment' do
65
+ expect_init_user_exporter_with(:redirect_uri, default_redirect_uri)
66
+ task.invoke
67
+ end
68
+
69
+ it 'should allow the default redirect uri to be overridden by an argument' do
70
+ redirect_uri_arg = 'http://test.localhost/custom/callback'
71
+ expect_init_user_exporter_with(:redirect_uri, redirect_uri_arg)
72
+ task.invoke(nil, nil, nil, redirect_uri_arg)
73
+ end
74
+
75
+ it 'should use the default auth endpoint from the environment' do
76
+ expect_init_user_exporter_with(:endpoint, default_endpoint)
77
+ task.invoke
78
+ end
79
+
80
+ it 'should allow the default auth endpoint to be overridden by an argument' do
81
+ endpoint_arg = 'https://custom-arg.auth.host'
82
+ expect_init_user_exporter_with(:endpoint, endpoint_arg)
83
+ task.invoke(nil, nil, nil, nil, endpoint_arg)
84
+ end
85
+
86
+ it 'should export the users' do
87
+ expect(user_exporter).to receive(:export)
88
+ task.invoke
89
+ end
90
+ end