devise_g5_authenticatable 0.3.0 → 1.0.0.pre.1
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.
- checksums.yaml +4 -4
- data/.gitignore +1 -0
- data/.rspec +1 -0
- data/.ruby-version +1 -1
- data/.travis.yml +29 -7
- data/Appraisals +21 -0
- data/CHANGELOG.md +24 -0
- data/Gemfile +11 -7
- data/README.md +6 -6
- data/Rakefile +6 -5
- data/app/controllers/devise_g5_authenticatable/registrations_controller.rb +3 -0
- data/app/controllers/devise_g5_authenticatable/sessions_controller.rb +9 -5
- data/config/initializers/devise_g5_authenticatable.rb +2 -0
- data/devise_g5_authenticatable.gemspec +6 -5
- data/gemfiles/rails_4.1.gemfile +26 -0
- data/gemfiles/rails_4.2.gemfile +26 -0
- data/gemfiles/rails_5.0.gemfile +26 -0
- data/gemfiles/rails_5.1.gemfile +26 -0
- data/lib/devise_g5_authenticatable/controllers/helpers.rb +5 -0
- data/lib/devise_g5_authenticatable/controllers/url_helpers.rb +3 -0
- data/lib/devise_g5_authenticatable/engine.rb +4 -1
- data/lib/devise_g5_authenticatable/g5/auth_password_validator.rb +6 -1
- data/lib/devise_g5_authenticatable/g5/auth_user_creator.rb +16 -15
- data/lib/devise_g5_authenticatable/g5/auth_user_updater.rb +11 -5
- data/lib/devise_g5_authenticatable/g5/user_exporter.rb +11 -6
- data/lib/devise_g5_authenticatable/g5.rb +2 -0
- data/lib/devise_g5_authenticatable/hooks/g5_authenticatable.rb +8 -3
- data/lib/devise_g5_authenticatable/models/g5_authenticatable.rb +38 -26
- data/lib/devise_g5_authenticatable/models/protected_attributes.rb +11 -2
- data/lib/devise_g5_authenticatable/omniauth.rb +8 -2
- data/lib/devise_g5_authenticatable/routes.rb +48 -35
- data/lib/devise_g5_authenticatable/version.rb +3 -1
- data/lib/devise_g5_authenticatable.rb +4 -1
- data/spec/controllers/helpers_spec.rb +54 -49
- data/spec/controllers/sessions_controller_spec.rb +67 -39
- data/spec/controllers/url_helpers_spec.rb +78 -78
- data/spec/dummy/app/views/{anonymous → devise}/new.html.erb +0 -0
- data/spec/dummy/config/environments/test.rb +20 -4
- data/spec/dummy/config/initializers/devise.rb +5 -1
- data/spec/dummy/config/initializers/rails_compatibility.rb +10 -0
- data/spec/dummy/db/migrate/20131230235849_devise_create_users.rb +3 -1
- data/spec/dummy/db/migrate/20140102213131_drop_database_authenticatable.rb +3 -1
- data/spec/dummy/db/migrate/20140103032308_drop_recoverable.rb +3 -1
- data/spec/dummy/db/migrate/20140103042329_drop_rememberable.rb +3 -1
- data/spec/dummy/db/migrate/20140103174810_add_omniauth_columns_to_users.rb +3 -1
- data/spec/dummy/db/migrate/20140103191601_add_email_back_to_user.rb +3 -1
- data/spec/dummy/db/migrate/20140113202948_devise_create_admins.rb +3 -1
- data/spec/dummy/db/migrate/20140113233821_add_provider_and_uid_to_admins.rb +3 -1
- data/spec/dummy/db/schema.rb +29 -29
- data/spec/factories/admin.rb +2 -0
- data/spec/factories/user.rb +2 -0
- data/spec/features/edit_registration_spec.rb +22 -13
- data/spec/features/registration_spec.rb +13 -8
- data/spec/features/sign_in_spec.rb +4 -2
- data/spec/features/sign_out_spec.rb +4 -2
- data/spec/features/token_validation_spec.rb +24 -14
- data/spec/g5/auth_password_validator_spec.rb +28 -15
- data/spec/g5/auth_user_creator_spec.rb +29 -22
- data/spec/g5/auth_user_updater_spec.rb +23 -16
- data/spec/g5/user_exporter_spec.rb +36 -31
- data/spec/models/g5_authenticatable_spec.rb +78 -38
- data/spec/models/protected_attributes_spec.rb +24 -19
- data/spec/rails_helper.rb +46 -0
- data/spec/routing/registrations_routing_spec.rb +43 -27
- data/spec/routing/sessions_routing_spec.rb +46 -29
- data/spec/spec_helper.rb +93 -27
- data/spec/support/controller_test_helpers.rb +15 -0
- data/spec/support/devise.rb +9 -1
- data/spec/support/shared_contexts/custom_router.rb +16 -0
- data/spec/support/shared_contexts/oauth_error.rb +4 -2
- data/spec/support/shared_contexts/rake.rb +10 -4
- data/spec/support/shared_examples/registration_error.rb +3 -1
- data/spec/support/{user_feature_methods.rb → user_omniauth_methods.rb} +9 -5
- data/spec/tasks/export_users_spec.rb +5 -3
- metadata +30 -26
- data/circle.yml +0 -4
- data/spec/support/omniauth.rb +0 -3
@@ -1,12 +1,17 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require 'rails_helper'
|
4
|
+
|
5
|
+
RSpec.describe Devise::G5::AuthUserUpdater do
|
4
6
|
let(:updater) { described_class.new(model) }
|
5
7
|
|
6
|
-
let(:auth_client)
|
8
|
+
let(:auth_client) do
|
9
|
+
double(:g5_authentication_client, update_user: auth_user)
|
10
|
+
end
|
7
11
|
let(:auth_user) { double(:auth_user, id: model.uid, email: model.email) }
|
8
12
|
before do
|
9
|
-
allow(G5AuthenticationClient::Client).to receive(:new)
|
13
|
+
allow(G5AuthenticationClient::Client).to receive(:new)
|
14
|
+
.and_return(auth_client)
|
10
15
|
end
|
11
16
|
|
12
17
|
let(:model) { create(:user, updated_by: updated_by) }
|
@@ -28,7 +33,6 @@ describe Devise::G5::AuthUserUpdater do
|
|
28
33
|
before { model.email = updated_email }
|
29
34
|
let(:updated_email) { 'updated.email@test.host' }
|
30
35
|
|
31
|
-
|
32
36
|
context 'when user has been updated by another user' do
|
33
37
|
let(:updated_by) { create(:user) }
|
34
38
|
|
@@ -36,13 +40,13 @@ describe Devise::G5::AuthUserUpdater do
|
|
36
40
|
before { update }
|
37
41
|
|
38
42
|
it 'should use the token for updated_by to call g5 auth' do
|
39
|
-
expect(G5AuthenticationClient::Client).to have_received(:new)
|
40
|
-
with(access_token: updated_by.g5_access_token)
|
43
|
+
expect(G5AuthenticationClient::Client).to have_received(:new)
|
44
|
+
.with(access_token: updated_by.g5_access_token)
|
41
45
|
end
|
42
46
|
|
43
47
|
it 'should update the email' do
|
44
|
-
expect(auth_client).to have_received(:update_user)
|
45
|
-
with(hash_including(email: updated_email))
|
48
|
+
expect(auth_client).to have_received(:update_user)
|
49
|
+
.with(hash_including(email: updated_email))
|
46
50
|
end
|
47
51
|
|
48
52
|
it 'should reset the password' do
|
@@ -64,7 +68,7 @@ describe Devise::G5::AuthUserUpdater do
|
|
64
68
|
end
|
65
69
|
|
66
70
|
it 'should raise an exception' do
|
67
|
-
expect { update }.to raise_error
|
71
|
+
expect { update }.to raise_error('Error!')
|
68
72
|
end
|
69
73
|
end
|
70
74
|
end
|
@@ -73,8 +77,8 @@ describe Devise::G5::AuthUserUpdater do
|
|
73
77
|
before { update }
|
74
78
|
|
75
79
|
it 'should use the user token to call g5 auth' do
|
76
|
-
expect(G5AuthenticationClient::Client).to have_received(:new)
|
77
|
-
with(access_token: model.g5_access_token)
|
80
|
+
expect(G5AuthenticationClient::Client).to have_received(:new)
|
81
|
+
.with(access_token: model.g5_access_token)
|
78
82
|
end
|
79
83
|
end
|
80
84
|
end
|
@@ -91,14 +95,17 @@ describe Devise::G5::AuthUserUpdater do
|
|
91
95
|
before { update }
|
92
96
|
|
93
97
|
it 'should update the password' do
|
94
|
-
expect(auth_client).to have_received(:update_user)
|
95
|
-
with(hash_including(password: updated_password))
|
98
|
+
expect(auth_client).to have_received(:update_user)
|
99
|
+
.with(hash_including(password: updated_password))
|
96
100
|
update
|
97
101
|
end
|
98
102
|
|
99
103
|
it 'should update the password_confirmation' do
|
100
|
-
|
101
|
-
|
104
|
+
updated_attribute = {
|
105
|
+
password_confirmation: updated_password_confirmation
|
106
|
+
}
|
107
|
+
expect(auth_client).to have_received(:update_user)
|
108
|
+
.with(hash_including(updated_attribute))
|
102
109
|
end
|
103
110
|
|
104
111
|
it 'should reset the password' do
|
@@ -1,14 +1,16 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require 'rails_helper'
|
4
|
+
|
5
|
+
RSpec.describe G5::UserExporter do
|
4
6
|
let(:exporter) { G5::UserExporter.new(options) }
|
5
7
|
|
6
8
|
let(:options) do
|
7
|
-
{client_id: 'my_client_id',
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
9
|
+
{ client_id: 'my_client_id',
|
10
|
+
client_secret: 'soopersekrit',
|
11
|
+
redirect_uri: 'https://app.host/my/callback',
|
12
|
+
endpoint: 'https://auth.host',
|
13
|
+
authorization_code: 'abc123' }
|
12
14
|
end
|
13
15
|
|
14
16
|
describe '#export' do
|
@@ -31,55 +33,56 @@ describe G5::UserExporter do
|
|
31
33
|
let(:auth_user) { double(:auth_user, id: uid, email: email) }
|
32
34
|
let(:auth_client) { double(:auth_client, create_user: auth_user) }
|
33
35
|
before do
|
34
|
-
allow(G5AuthenticationClient::Client).to receive(:new)
|
36
|
+
allow(G5AuthenticationClient::Client).to receive(:new)
|
37
|
+
.and_return(auth_client)
|
35
38
|
end
|
36
39
|
|
37
40
|
it 'should initialize the auth client with the correct client_id' do
|
38
|
-
expect(G5AuthenticationClient::Client).to receive(:new)
|
39
|
-
with(hash_including(client_id: options[:client_id]))
|
40
|
-
and_return(auth_client)
|
41
|
+
expect(G5AuthenticationClient::Client).to receive(:new)
|
42
|
+
.with(hash_including(client_id: options[:client_id]))
|
43
|
+
.and_return(auth_client)
|
41
44
|
export
|
42
45
|
end
|
43
46
|
|
44
47
|
it 'should initialize the auth client with the correct client_secret' do
|
45
|
-
expect(G5AuthenticationClient::Client).to receive(:new)
|
46
|
-
with(hash_including(client_secret: options[:client_secret]))
|
47
|
-
and_return(auth_client)
|
48
|
+
expect(G5AuthenticationClient::Client).to receive(:new)
|
49
|
+
.with(hash_including(client_secret: options[:client_secret]))
|
50
|
+
.and_return(auth_client)
|
48
51
|
export
|
49
52
|
end
|
50
53
|
|
51
54
|
it 'should initialize the auth client with the correct redirect_uri' do
|
52
|
-
expect(G5AuthenticationClient::Client).to receive(:new)
|
53
|
-
with(hash_including(redirect_uri: options[:redirect_uri]))
|
54
|
-
and_return(auth_client)
|
55
|
+
expect(G5AuthenticationClient::Client).to receive(:new)
|
56
|
+
.with(hash_including(redirect_uri: options[:redirect_uri]))
|
57
|
+
.and_return(auth_client)
|
55
58
|
export
|
56
59
|
end
|
57
60
|
|
58
61
|
it 'should initialize the auth client with the correct endpoint' do
|
59
|
-
expect(G5AuthenticationClient::Client).to receive(:new)
|
60
|
-
with(hash_including(endpoint: options[:endpoint]))
|
61
|
-
and_return(auth_client)
|
62
|
+
expect(G5AuthenticationClient::Client).to receive(:new)
|
63
|
+
.with(hash_including(endpoint: options[:endpoint]))
|
64
|
+
.and_return(auth_client)
|
62
65
|
export
|
63
66
|
end
|
64
67
|
|
65
|
-
it '
|
66
|
-
expect(G5AuthenticationClient::Client).to receive(:new)
|
67
|
-
with(hash_including(authorization_code: options[:authorization_code]))
|
68
|
-
and_return(auth_client)
|
68
|
+
it 'initializes the auth client with the correct authorization code' do
|
69
|
+
expect(G5AuthenticationClient::Client).to receive(:new)
|
70
|
+
.with(hash_including(authorization_code: options[:authorization_code]))
|
71
|
+
.and_return(auth_client)
|
69
72
|
export
|
70
73
|
end
|
71
74
|
|
72
75
|
it 'should create the auth user with the correct email' do
|
73
|
-
expect(auth_client).to receive(:create_user)
|
74
|
-
with(hash_including(email: email))
|
75
|
-
and_return(auth_user)
|
76
|
+
expect(auth_client).to receive(:create_user)
|
77
|
+
.with(hash_including(email: email))
|
78
|
+
.and_return(auth_user)
|
76
79
|
export
|
77
80
|
end
|
78
81
|
|
79
82
|
it 'should create the auth user with the correct default password' do
|
80
|
-
expect(auth_client).to receive(:create_user)
|
81
|
-
with(hash_including(password: encrypted_password))
|
82
|
-
and_return(auth_user)
|
83
|
+
expect(auth_client).to receive(:create_user)
|
84
|
+
.with(hash_including(password: encrypted_password))
|
85
|
+
.and_return(auth_user)
|
83
86
|
export
|
84
87
|
end
|
85
88
|
|
@@ -99,7 +102,9 @@ describe G5::UserExporter do
|
|
99
102
|
end
|
100
103
|
|
101
104
|
it 'should return the SQL update statement with the encrypted password' do
|
102
|
-
expect(export).to match(
|
105
|
+
expect(export).to match(
|
106
|
+
/update users set encrypted_password='#{encrypted_password}' where id=#{uid};/i
|
107
|
+
)
|
103
108
|
end
|
104
109
|
end
|
105
110
|
end
|
@@ -1,11 +1,13 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
3
|
+
require 'rails_helper'
|
4
|
+
|
5
|
+
RSpec.describe Devise::Models::G5Authenticatable do
|
4
6
|
subject { model }
|
5
7
|
|
6
8
|
let(:model_class) { User }
|
7
9
|
let(:model) { model_class.new(attributes) }
|
8
|
-
let(:attributes) {
|
10
|
+
let(:attributes) { {} }
|
9
11
|
|
10
12
|
describe '#save!' do
|
11
13
|
subject(:save) { model.save! }
|
@@ -34,7 +36,8 @@ describe Devise::Models::G5Authenticatable do
|
|
34
36
|
let(:auth_id) { 1 }
|
35
37
|
|
36
38
|
before do
|
37
|
-
allow(Devise::G5::AuthUserCreator).to receive(:new)
|
39
|
+
allow(Devise::G5::AuthUserCreator).to receive(:new)
|
40
|
+
.and_return(auth_user_creator)
|
38
41
|
end
|
39
42
|
|
40
43
|
context 'when model is valid' do
|
@@ -100,7 +103,8 @@ describe Devise::Models::G5Authenticatable do
|
|
100
103
|
let(:error_body) { 'problems' }
|
101
104
|
|
102
105
|
it 'should raise a RecordNotSaved error with the OAuth error code' do
|
103
|
-
expect { save }.
|
106
|
+
expect { save }.to raise_error(ActiveRecord::RecordNotSaved,
|
107
|
+
error_code)
|
104
108
|
end
|
105
109
|
end
|
106
110
|
|
@@ -109,7 +113,8 @@ describe Devise::Models::G5Authenticatable do
|
|
109
113
|
let(:error_message) { 'problems' }
|
110
114
|
|
111
115
|
it 'should raise a RecordNotSaved error' do
|
112
|
-
expect { save }.to raise_error(ActiveRecord::RecordNotSaved,
|
116
|
+
expect { save }.to raise_error(ActiveRecord::RecordNotSaved,
|
117
|
+
error_message)
|
113
118
|
end
|
114
119
|
end
|
115
120
|
end
|
@@ -122,7 +127,8 @@ describe Devise::Models::G5Authenticatable do
|
|
122
127
|
let(:auth_user) { double(:auth_user, id: auth_id) }
|
123
128
|
let(:auth_id) { 'remote-auth-id-42' }
|
124
129
|
before do
|
125
|
-
allow(Devise::G5::AuthUserUpdater).to receive(:new)
|
130
|
+
allow(Devise::G5::AuthUserUpdater).to receive(:new)
|
131
|
+
.and_return(auth_user_updater)
|
126
132
|
end
|
127
133
|
|
128
134
|
context 'with successful auth user update' do
|
@@ -144,7 +150,7 @@ describe Devise::Models::G5Authenticatable do
|
|
144
150
|
let(:error_message) { 'problems' }
|
145
151
|
|
146
152
|
it 'should raise an error' do
|
147
|
-
expect { save }.to raise_error
|
153
|
+
expect { save }.to raise_error(error_message)
|
148
154
|
end
|
149
155
|
end
|
150
156
|
end
|
@@ -168,7 +174,10 @@ describe Devise::Models::G5Authenticatable do
|
|
168
174
|
let(:updated_email) { 'update@email.com' }
|
169
175
|
|
170
176
|
let(:auth_updater) { double(:auth_user_updater, update: true) }
|
171
|
-
before
|
177
|
+
before do
|
178
|
+
allow(Devise::G5::AuthUserUpdater).to receive(:new)
|
179
|
+
.and_return(auth_updater)
|
180
|
+
end
|
172
181
|
|
173
182
|
let(:password_validator) { double(:auth_password_validator) }
|
174
183
|
before do
|
@@ -178,7 +187,9 @@ describe Devise::Models::G5Authenticatable do
|
|
178
187
|
end
|
179
188
|
|
180
189
|
context 'with valid current password' do
|
181
|
-
before
|
190
|
+
before do
|
191
|
+
allow(password_validator).to receive(:valid_password?).and_return(true)
|
192
|
+
end
|
182
193
|
|
183
194
|
before { update_with_password }
|
184
195
|
|
@@ -218,7 +229,9 @@ describe Devise::Models::G5Authenticatable do
|
|
218
229
|
end
|
219
230
|
|
220
231
|
context 'with invalid current password' do
|
221
|
-
before
|
232
|
+
before do
|
233
|
+
allow(password_validator).to receive(:valid_password?).and_return(false)
|
234
|
+
end
|
222
235
|
|
223
236
|
before { update_with_password }
|
224
237
|
|
@@ -284,9 +297,12 @@ describe Devise::Models::G5Authenticatable do
|
|
284
297
|
let(:model) { create(:user) }
|
285
298
|
let(:password) { 'foobarbaz' }
|
286
299
|
|
287
|
-
let(:password_validator)
|
300
|
+
let(:password_validator) do
|
301
|
+
double(:password_validator, valid_password?: valid)
|
302
|
+
end
|
288
303
|
before do
|
289
|
-
allow(Devise::G5::AuthPasswordValidator).to receive(:new)
|
304
|
+
allow(Devise::G5::AuthPasswordValidator).to receive(:new)
|
305
|
+
.and_return(password_validator)
|
290
306
|
end
|
291
307
|
|
292
308
|
before { valid_password? }
|
@@ -299,11 +315,13 @@ describe Devise::Models::G5Authenticatable do
|
|
299
315
|
end
|
300
316
|
|
301
317
|
it 'should initialize the validator with the model' do
|
302
|
-
expect(Devise::G5::AuthPasswordValidator).to have_received(:new)
|
318
|
+
expect(Devise::G5::AuthPasswordValidator).to have_received(:new)
|
319
|
+
.with(model)
|
303
320
|
end
|
304
321
|
|
305
322
|
it 'should check the password against the auth server' do
|
306
|
-
expect(password_validator).to have_received(:valid_password?)
|
323
|
+
expect(password_validator).to have_received(:valid_password?)
|
324
|
+
.with(password)
|
307
325
|
end
|
308
326
|
end
|
309
327
|
|
@@ -315,22 +333,27 @@ describe Devise::Models::G5Authenticatable do
|
|
315
333
|
end
|
316
334
|
|
317
335
|
it 'should initialize the validator with the model' do
|
318
|
-
expect(Devise::G5::AuthPasswordValidator).to have_received(:new)
|
336
|
+
expect(Devise::G5::AuthPasswordValidator).to have_received(:new)
|
337
|
+
.with(model)
|
319
338
|
end
|
320
339
|
|
321
340
|
it 'should check the password against the auth server' do
|
322
|
-
expect(password_validator).to have_received(:valid_password?)
|
341
|
+
expect(password_validator).to have_received(:valid_password?)
|
342
|
+
.with(password)
|
323
343
|
end
|
324
344
|
end
|
325
345
|
end
|
326
346
|
|
327
347
|
describe '.find_and_update_for_g5_oauth' do
|
328
|
-
subject(:find_and_update)
|
348
|
+
subject(:find_and_update) do
|
349
|
+
model_class.find_and_update_for_g5_oauth(auth_data)
|
350
|
+
end
|
329
351
|
|
330
352
|
let(:auth_data) do
|
331
353
|
OmniAuth::AuthHash.new(provider: 'g5',
|
332
354
|
uid: '123999',
|
333
|
-
info: { name: 'Foo Bar',
|
355
|
+
info: { name: 'Foo Bar',
|
356
|
+
email: 'foo@bar.com' },
|
334
357
|
credentials: { token: 'abc123' })
|
335
358
|
end
|
336
359
|
|
@@ -358,7 +381,8 @@ describe Devise::Models::G5Authenticatable do
|
|
358
381
|
end
|
359
382
|
|
360
383
|
it 'executes the callback to update role data' do
|
361
|
-
expect_any_instance_of(model_class).to receive(:update_roles_from_auth)
|
384
|
+
expect_any_instance_of(model_class).to receive(:update_roles_from_auth)
|
385
|
+
.with(auth_data)
|
362
386
|
find_and_update
|
363
387
|
end
|
364
388
|
end
|
@@ -369,7 +393,8 @@ describe Devise::Models::G5Authenticatable do
|
|
369
393
|
end
|
370
394
|
|
371
395
|
it 'does not execute the callback to update role data' do
|
372
|
-
expect_any_instance_of(model_class)
|
396
|
+
expect_any_instance_of(model_class)
|
397
|
+
.to_not receive(:update_roles_from_auth)
|
373
398
|
find_and_update
|
374
399
|
end
|
375
400
|
end
|
@@ -381,7 +406,8 @@ describe Devise::Models::G5Authenticatable do
|
|
381
406
|
let(:auth_data) do
|
382
407
|
OmniAuth::AuthHash.new(provider: 'g5',
|
383
408
|
uid: uid,
|
384
|
-
info: { name: 'Foo Bar',
|
409
|
+
info: { name: 'Foo Bar',
|
410
|
+
email: 'foo@bar.com' },
|
385
411
|
credentials: { token: 'abc123' })
|
386
412
|
end
|
387
413
|
|
@@ -464,7 +490,8 @@ describe Devise::Models::G5Authenticatable do
|
|
464
490
|
let(:auth_data) do
|
465
491
|
OmniAuth::AuthHash.new(provider: 'g5',
|
466
492
|
uid: '123999',
|
467
|
-
info: { name: 'Foo Bar',
|
493
|
+
info: { name: 'Foo Bar',
|
494
|
+
email: 'foo@bar.com' },
|
468
495
|
credentials: { token: 'abc123' })
|
469
496
|
end
|
470
497
|
|
@@ -475,7 +502,8 @@ describe Devise::Models::G5Authenticatable do
|
|
475
502
|
end
|
476
503
|
|
477
504
|
it 'should update the g5_access_token' do
|
478
|
-
expect { update_g5_credentials }.to change { model.g5_access_token }
|
505
|
+
expect { update_g5_credentials }.to change { model.g5_access_token }
|
506
|
+
.to(auth_data.credentials.token)
|
479
507
|
end
|
480
508
|
|
481
509
|
it 'should not save the changes' do
|
@@ -488,7 +516,10 @@ describe Devise::Models::G5Authenticatable do
|
|
488
516
|
subject(:revoke_g5_credentials!) { model.revoke_g5_credentials! }
|
489
517
|
|
490
518
|
let(:auth_updater) { double(:auth_user_updater, update: nil) }
|
491
|
-
before
|
519
|
+
before do
|
520
|
+
allow(Devise::G5::AuthUserUpdater).to receive(:new)
|
521
|
+
.and_return(auth_updater)
|
522
|
+
end
|
492
523
|
|
493
524
|
let(:model) { create(:user, g5_access_token: g5_token) }
|
494
525
|
before { model.password = model.password_confirmation = nil }
|
@@ -523,11 +554,14 @@ describe Devise::Models::G5Authenticatable do
|
|
523
554
|
let(:auth_data) do
|
524
555
|
OmniAuth::AuthHash.new(provider: 'g5',
|
525
556
|
uid: '123999',
|
526
|
-
info: { name: 'Foo Bar',
|
557
|
+
info: { name: 'Foo Bar',
|
558
|
+
email: 'foo@bar.com' },
|
527
559
|
credentials: { token: 'abc123' })
|
528
560
|
end
|
529
561
|
|
530
|
-
before
|
562
|
+
before do
|
563
|
+
allow_any_instance_of(model_class).to receive(:update_roles_from_auth)
|
564
|
+
end
|
531
565
|
|
532
566
|
context 'with params' do
|
533
567
|
let(:params) do
|
@@ -553,12 +587,13 @@ describe Devise::Models::G5Authenticatable do
|
|
553
587
|
end
|
554
588
|
|
555
589
|
it 'executes the callback to update role data' do
|
556
|
-
expect(new_with_session).to have_received(:update_roles_from_auth)
|
590
|
+
expect(new_with_session).to have_received(:update_roles_from_auth)
|
591
|
+
.with(auth_data)
|
557
592
|
end
|
558
593
|
end
|
559
594
|
|
560
595
|
context 'without session data' do
|
561
|
-
let(:session) {
|
596
|
+
let(:session) { {} }
|
562
597
|
|
563
598
|
it { is_expected.to be_new_record }
|
564
599
|
|
@@ -575,14 +610,15 @@ describe Devise::Models::G5Authenticatable do
|
|
575
610
|
end
|
576
611
|
|
577
612
|
it 'should not execute the callback to update role data' do
|
578
|
-
expect_any_instance_of(model_class)
|
613
|
+
expect_any_instance_of(model_class)
|
614
|
+
.not_to receive(:update_roles_from_auth)
|
579
615
|
new_with_session
|
580
616
|
end
|
581
617
|
end
|
582
618
|
end
|
583
619
|
|
584
620
|
context 'without params' do
|
585
|
-
let(:params) {
|
621
|
+
let(:params) { {} }
|
586
622
|
|
587
623
|
context 'with session data' do
|
588
624
|
let(:session) do
|
@@ -604,12 +640,13 @@ describe Devise::Models::G5Authenticatable do
|
|
604
640
|
end
|
605
641
|
|
606
642
|
it 'executes the callback to update role data' do
|
607
|
-
expect(new_with_session).to have_received(:update_roles_from_auth)
|
643
|
+
expect(new_with_session).to have_received(:update_roles_from_auth)
|
644
|
+
.with(auth_data)
|
608
645
|
end
|
609
646
|
end
|
610
647
|
|
611
648
|
context 'without session data' do
|
612
|
-
let(:session) {
|
649
|
+
let(:session) { {} }
|
613
650
|
|
614
651
|
it { is_expected.to be_new_record }
|
615
652
|
|
@@ -626,7 +663,8 @@ describe Devise::Models::G5Authenticatable do
|
|
626
663
|
end
|
627
664
|
|
628
665
|
it 'does not execute the callback to update role data' do
|
629
|
-
expect_any_instance_of(model_class)
|
666
|
+
expect_any_instance_of(model_class)
|
667
|
+
.not_to receive(:update_roles_from_auth)
|
630
668
|
new_with_session
|
631
669
|
end
|
632
670
|
end
|
@@ -642,10 +680,10 @@ describe Devise::Models::G5Authenticatable do
|
|
642
680
|
info: { first_name: 'Foo',
|
643
681
|
last_name: 'Bar',
|
644
682
|
email: 'foo@bar.com',
|
645
|
-
phone: '123-555-1212 x42'},
|
683
|
+
phone: '123-555-1212 x42' },
|
646
684
|
credentials: { token: 'abc123' },
|
647
685
|
extra: { title: 'Minister of Funny Walks',
|
648
|
-
organization_name: '
|
686
|
+
organization_name: 'Sales' })
|
649
687
|
end
|
650
688
|
|
651
689
|
it 'has the correct uid' do
|
@@ -668,8 +706,10 @@ describe Devise::Models::G5Authenticatable do
|
|
668
706
|
OmniAuth::AuthHash.new(provider: 'g5',
|
669
707
|
uid: '123456',
|
670
708
|
extra: { roles: [
|
671
|
-
{ name: 'Admin',
|
672
|
-
|
709
|
+
{ name: 'Admin',
|
710
|
+
type: 'GLOBAL',
|
711
|
+
urn: nil }
|
712
|
+
] })
|
673
713
|
end
|
674
714
|
|
675
715
|
it 'does not change anything on the model' do
|
@@ -1,25 +1,30 @@
|
|
1
|
-
|
1
|
+
# frozen_string_literal: true
|
2
2
|
|
3
|
-
|
4
|
-
before do
|
5
|
-
Dummy::Application.config.active_record.whitelist_attributes = true
|
6
|
-
end
|
3
|
+
require 'rails_helper'
|
7
4
|
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
# Protected attributes are not supported by rails 5
|
6
|
+
if Rails.version.starts_with?('4')
|
7
|
+
RSpec.describe DeviseG5Authenticatable::Models::ProtectedAttributes do
|
8
|
+
before do
|
9
|
+
Dummy::Application.config.active_record.whitelist_attributes = true
|
10
|
+
end
|
11
11
|
|
12
|
-
|
12
|
+
after do
|
13
|
+
Dummy::Application.config.active_record.whitelist_attributes = false
|
14
|
+
end
|
13
15
|
|
14
|
-
|
15
|
-
let(:model) { model_class.new }
|
16
|
+
subject { model }
|
16
17
|
|
17
|
-
|
18
|
-
|
19
|
-
|
20
|
-
|
21
|
-
|
22
|
-
|
23
|
-
|
24
|
-
|
18
|
+
let(:model_class) { User }
|
19
|
+
let(:model) { model_class.new }
|
20
|
+
|
21
|
+
it { is_expected.to allow_mass_assignment_of(:email) }
|
22
|
+
it { is_expected.to allow_mass_assignment_of(:password) }
|
23
|
+
it { is_expected.to allow_mass_assignment_of(:password_confirmation) }
|
24
|
+
it { is_expected.to allow_mass_assignment_of(:provider) }
|
25
|
+
it { is_expected.to allow_mass_assignment_of(:uid) }
|
26
|
+
it { is_expected.not_to allow_mass_assignment_of(:g5_access_token) }
|
27
|
+
it { is_expected.to allow_mass_assignment_of(:current_password) }
|
28
|
+
it { is_expected.to allow_mass_assignment_of(:updated_by) }
|
29
|
+
end
|
25
30
|
end
|
@@ -0,0 +1,46 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'spec_helper'
|
4
|
+
|
5
|
+
# Load rails dummy application
|
6
|
+
ENV['RAILS_ENV'] = 'test'
|
7
|
+
require File.expand_path('../dummy/config/environment.rb', __FILE__)
|
8
|
+
|
9
|
+
require 'rspec/rails'
|
10
|
+
require 'capybara/rspec'
|
11
|
+
require 'webmock/rspec'
|
12
|
+
require 'shoulda-matchers'
|
13
|
+
require 'factory_girl_rails'
|
14
|
+
|
15
|
+
# Load support files
|
16
|
+
Dir["#{File.dirname(__FILE__)}/support/**/*.rb"].each { |f| require f }
|
17
|
+
|
18
|
+
# Checks for pending migration and applies them before tests are run
|
19
|
+
ActiveRecord::Migration.maintain_test_schema!
|
20
|
+
|
21
|
+
RSpec.configure do |config|
|
22
|
+
config.include FactoryGirl::Syntax::Methods
|
23
|
+
|
24
|
+
config.use_transactional_fixtures = true
|
25
|
+
|
26
|
+
config.infer_spec_type_from_file_location!
|
27
|
+
|
28
|
+
# The integration tests can be run with:
|
29
|
+
# rspec -t type:feature
|
30
|
+
# config.filter_run_excluding type: 'feature'
|
31
|
+
|
32
|
+
# Filter lines from Rails gems in backtraces
|
33
|
+
# config.filter_rails_from_backtrace!
|
34
|
+
|
35
|
+
# arbitrary gems may also be filtered via:
|
36
|
+
# config.filter_gems_from_backtrace('gem name')
|
37
|
+
|
38
|
+
config.after(:suite) { WebMock.disable! }
|
39
|
+
end
|
40
|
+
|
41
|
+
Shoulda::Matchers.configure do |config|
|
42
|
+
config.integrate do |with|
|
43
|
+
with.test_framework :rspec
|
44
|
+
with.library :rails
|
45
|
+
end
|
46
|
+
end
|