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.
Files changed (77) hide show
  1. checksums.yaml +4 -4
  2. data/.gitignore +1 -0
  3. data/.rspec +1 -0
  4. data/.ruby-version +1 -1
  5. data/.travis.yml +29 -7
  6. data/Appraisals +21 -0
  7. data/CHANGELOG.md +24 -0
  8. data/Gemfile +11 -7
  9. data/README.md +6 -6
  10. data/Rakefile +6 -5
  11. data/app/controllers/devise_g5_authenticatable/registrations_controller.rb +3 -0
  12. data/app/controllers/devise_g5_authenticatable/sessions_controller.rb +9 -5
  13. data/config/initializers/devise_g5_authenticatable.rb +2 -0
  14. data/devise_g5_authenticatable.gemspec +6 -5
  15. data/gemfiles/rails_4.1.gemfile +26 -0
  16. data/gemfiles/rails_4.2.gemfile +26 -0
  17. data/gemfiles/rails_5.0.gemfile +26 -0
  18. data/gemfiles/rails_5.1.gemfile +26 -0
  19. data/lib/devise_g5_authenticatable/controllers/helpers.rb +5 -0
  20. data/lib/devise_g5_authenticatable/controllers/url_helpers.rb +3 -0
  21. data/lib/devise_g5_authenticatable/engine.rb +4 -1
  22. data/lib/devise_g5_authenticatable/g5/auth_password_validator.rb +6 -1
  23. data/lib/devise_g5_authenticatable/g5/auth_user_creator.rb +16 -15
  24. data/lib/devise_g5_authenticatable/g5/auth_user_updater.rb +11 -5
  25. data/lib/devise_g5_authenticatable/g5/user_exporter.rb +11 -6
  26. data/lib/devise_g5_authenticatable/g5.rb +2 -0
  27. data/lib/devise_g5_authenticatable/hooks/g5_authenticatable.rb +8 -3
  28. data/lib/devise_g5_authenticatable/models/g5_authenticatable.rb +38 -26
  29. data/lib/devise_g5_authenticatable/models/protected_attributes.rb +11 -2
  30. data/lib/devise_g5_authenticatable/omniauth.rb +8 -2
  31. data/lib/devise_g5_authenticatable/routes.rb +48 -35
  32. data/lib/devise_g5_authenticatable/version.rb +3 -1
  33. data/lib/devise_g5_authenticatable.rb +4 -1
  34. data/spec/controllers/helpers_spec.rb +54 -49
  35. data/spec/controllers/sessions_controller_spec.rb +67 -39
  36. data/spec/controllers/url_helpers_spec.rb +78 -78
  37. data/spec/dummy/app/views/{anonymous → devise}/new.html.erb +0 -0
  38. data/spec/dummy/config/environments/test.rb +20 -4
  39. data/spec/dummy/config/initializers/devise.rb +5 -1
  40. data/spec/dummy/config/initializers/rails_compatibility.rb +10 -0
  41. data/spec/dummy/db/migrate/20131230235849_devise_create_users.rb +3 -1
  42. data/spec/dummy/db/migrate/20140102213131_drop_database_authenticatable.rb +3 -1
  43. data/spec/dummy/db/migrate/20140103032308_drop_recoverable.rb +3 -1
  44. data/spec/dummy/db/migrate/20140103042329_drop_rememberable.rb +3 -1
  45. data/spec/dummy/db/migrate/20140103174810_add_omniauth_columns_to_users.rb +3 -1
  46. data/spec/dummy/db/migrate/20140103191601_add_email_back_to_user.rb +3 -1
  47. data/spec/dummy/db/migrate/20140113202948_devise_create_admins.rb +3 -1
  48. data/spec/dummy/db/migrate/20140113233821_add_provider_and_uid_to_admins.rb +3 -1
  49. data/spec/dummy/db/schema.rb +29 -29
  50. data/spec/factories/admin.rb +2 -0
  51. data/spec/factories/user.rb +2 -0
  52. data/spec/features/edit_registration_spec.rb +22 -13
  53. data/spec/features/registration_spec.rb +13 -8
  54. data/spec/features/sign_in_spec.rb +4 -2
  55. data/spec/features/sign_out_spec.rb +4 -2
  56. data/spec/features/token_validation_spec.rb +24 -14
  57. data/spec/g5/auth_password_validator_spec.rb +28 -15
  58. data/spec/g5/auth_user_creator_spec.rb +29 -22
  59. data/spec/g5/auth_user_updater_spec.rb +23 -16
  60. data/spec/g5/user_exporter_spec.rb +36 -31
  61. data/spec/models/g5_authenticatable_spec.rb +78 -38
  62. data/spec/models/protected_attributes_spec.rb +24 -19
  63. data/spec/rails_helper.rb +46 -0
  64. data/spec/routing/registrations_routing_spec.rb +43 -27
  65. data/spec/routing/sessions_routing_spec.rb +46 -29
  66. data/spec/spec_helper.rb +93 -27
  67. data/spec/support/controller_test_helpers.rb +15 -0
  68. data/spec/support/devise.rb +9 -1
  69. data/spec/support/shared_contexts/custom_router.rb +16 -0
  70. data/spec/support/shared_contexts/oauth_error.rb +4 -2
  71. data/spec/support/shared_contexts/rake.rb +10 -4
  72. data/spec/support/shared_examples/registration_error.rb +3 -1
  73. data/spec/support/{user_feature_methods.rb → user_omniauth_methods.rb} +9 -5
  74. data/spec/tasks/export_users_spec.rb +5 -3
  75. metadata +30 -26
  76. data/circle.yml +0 -4
  77. data/spec/support/omniauth.rb +0 -3
@@ -1,11 +1,13 @@
1
- require 'spec_helper'
1
+ # frozen_string_literal: true
2
2
 
3
- describe DeviseG5Authenticatable::SessionsController do
3
+ require 'rails_helper'
4
+
5
+ RSpec.describe DeviseG5Authenticatable::SessionsController do
4
6
  before { request.env['devise.mapping'] = Devise.mappings[scope] }
5
7
  let(:scope) { :user }
6
8
 
7
9
  describe '#new' do
8
- subject(:new_session) { get :new }
10
+ subject(:new_session) { get(:new) }
9
11
 
10
12
  context 'with user scope' do
11
13
  it 'should redirect to the scoped authorize path' do
@@ -23,7 +25,7 @@ describe DeviseG5Authenticatable::SessionsController do
23
25
  end
24
26
 
25
27
  describe '#omniauth_passthru' do
26
- subject(:passthru) { get :omniauth_passthru }
28
+ subject(:passthru) { get(:omniauth_passthru) }
27
29
 
28
30
  it 'should return a 404' do
29
31
  expect(passthru).to be_not_found
@@ -31,38 +33,43 @@ describe DeviseG5Authenticatable::SessionsController do
31
33
  end
32
34
 
33
35
  describe '#create' do
34
- subject(:create_session) { post :create }
36
+ subject(:create_session) { post(:create) }
35
37
 
36
38
  let(:auth_hash) do
37
- OmniAuth::AuthHash.new({
39
+ OmniAuth::AuthHash.new(
38
40
  provider: 'g5',
39
41
  uid: '45',
40
- info: {name: 'Foo Bar',
41
- email: 'foo@bar.com'},
42
- credentials: {token: 'abc123'}
43
- })
42
+ info: { name: 'Foo Bar',
43
+ email: 'foo@bar.com' },
44
+ credentials: { token: 'abc123' }
45
+ )
44
46
  end
45
47
  before { request.env['omniauth.auth'] = auth_hash }
46
48
 
47
49
  context 'when local model exists' do
48
50
  let(:model) do
49
- stub_model(model_class, provider: auth_hash.provider,
50
- uid: auth_hash.uid,
51
- email: auth_hash.email,
52
- g5_access_token: auth_hash.credentials.token,
53
- save!: true,
54
- update_g5_credentials: true,
55
- email_changed?: false)
51
+ stub_model(model_class,
52
+ provider: auth_hash.provider,
53
+ uid: auth_hash.uid,
54
+ email: auth_hash.email,
55
+ g5_access_token: auth_hash.credentials.token,
56
+ save!: true,
57
+ update_g5_credentials: true,
58
+ email_changed?: false)
59
+ end
60
+ before do
61
+ allow(model_class).to receive(:find_and_update_for_g5_oauth)
62
+ .and_return(model)
56
63
  end
57
- before { model_class.stub(find_and_update_for_g5_oauth: model) }
58
64
 
59
65
  context 'with user scope' do
60
66
  let(:model_class) { User }
61
67
  let(:scope) { :user }
62
68
 
63
69
  it 'should find the user and update the oauth credentials' do
64
- User.should_receive(:find_and_update_for_g5_oauth).with(auth_hash).and_return(model)
65
70
  create_session
71
+ expect(User).to have_received(:find_and_update_for_g5_oauth)
72
+ .with(auth_hash)
66
73
  end
67
74
 
68
75
  it 'should set the flash message' do
@@ -71,7 +78,8 @@ describe DeviseG5Authenticatable::SessionsController do
71
78
  end
72
79
 
73
80
  it 'should sign in the user' do
74
- expect { create_session }.to change { controller.current_user }.from(nil).to(model)
81
+ expect { create_session }.to change { controller.current_user }
82
+ .from(nil).to(model)
75
83
  end
76
84
 
77
85
  it 'should redirect the user' do
@@ -85,18 +93,23 @@ describe DeviseG5Authenticatable::SessionsController do
85
93
  let(:scope) { :admin }
86
94
 
87
95
  it 'should find the admin and update the oauth credentials' do
88
- Admin.should_receive(:find_and_update_for_g5_oauth).with(auth_hash).and_return(model)
89
96
  create_session
97
+ expect(Admin).to have_received(:find_and_update_for_g5_oauth)
98
+ .with(auth_hash)
90
99
  end
91
100
 
92
101
  it 'should sign in the admin' do
93
- expect { create_session }.to change { controller.current_admin }.from(nil).to(model)
102
+ expect { create_session }.to change { controller.current_admin }
103
+ .from(nil).to(model)
94
104
  end
95
105
  end
96
106
  end
97
107
 
98
108
  context 'when local model does not exist' do
99
- before { model_class.stub(find_and_update_for_g5_oauth: nil) }
109
+ before do
110
+ allow(model_class).to receive(:find_and_update_for_g5_oauth)
111
+ .and_return(nil)
112
+ end
100
113
 
101
114
  context 'with user scope' do
102
115
  let(:scope) { :user }
@@ -116,7 +129,8 @@ describe DeviseG5Authenticatable::SessionsController do
116
129
  end
117
130
 
118
131
  it 'should set the auth data on the session' do
119
- expect { create_session }.to change { session['omniauth.auth'] }.to(auth_hash)
132
+ expect { create_session }.to change { session['omniauth.auth'] }
133
+ .to(auth_hash)
120
134
  end
121
135
  end
122
136
 
@@ -129,19 +143,23 @@ describe DeviseG5Authenticatable::SessionsController do
129
143
  end
130
144
 
131
145
  it 'should set the auth data on the session' do
132
- expect { create_session }.to change { session['omniauth.auth'] }.to(auth_hash)
146
+ expect { create_session }.to change { session['omniauth.auth'] }
147
+ .to(auth_hash)
133
148
  end
134
149
  end
135
150
  end
136
151
  end
137
152
 
138
153
  describe '#destroy' do
139
- subject(:destroy_session) { delete :destroy }
154
+ subject(:destroy_session) { delete(:destroy) }
140
155
 
141
156
  let(:auth_client) { double(:auth_client, sign_out_url: auth_sign_out_url) }
142
- let(:auth_sign_out_url) { 'https://auth.test.host/sign_out?redirect_url=http%3A%2F%2Ftest.host%2F' }
157
+ let(:auth_sign_out_url) do
158
+ 'https://auth.test.host/sign_out?redirect_url=http%3A%2F%2Ftest.host%2F'
159
+ end
143
160
  before do
144
- allow(G5AuthenticationClient::Client).to receive(:new).and_return(auth_client)
161
+ allow(G5AuthenticationClient::Client).to receive(:new)
162
+ .and_return(auth_client)
145
163
  end
146
164
 
147
165
  let(:model) { create(scope) }
@@ -151,16 +169,17 @@ describe DeviseG5Authenticatable::SessionsController do
151
169
  let(:scope) { :user }
152
170
 
153
171
  context 'when there is a current user' do
154
- before { sign_in(scope, model) }
172
+ before { sign_in(model, scope: scope) }
155
173
 
156
174
  it 'should sign out the user locally' do
157
- expect { destroy_session }.to change { controller.current_user }.to(nil)
175
+ expect { destroy_session }.to change { controller.current_user }
176
+ .to(nil)
158
177
  end
159
178
 
160
179
  it 'should construct the sign out URL with the correct redirect URL' do
161
- expect(auth_client).to receive(:sign_out_url).
162
- with(root_url).
163
- and_return(auth_sign_out_url)
180
+ expect(auth_client).to receive(:sign_out_url)
181
+ .with(root_url)
182
+ .and_return(auth_sign_out_url)
164
183
  destroy_session
165
184
  end
166
185
 
@@ -184,10 +203,11 @@ describe DeviseG5Authenticatable::SessionsController do
184
203
  context 'with admin scope' do
185
204
  let(:scope) { :admin }
186
205
 
187
- before { sign_in(scope, model) }
206
+ before { sign_in(model, scope: scope) }
188
207
 
189
208
  it 'should sign out the admin locally' do
190
- expect { destroy_session }.to change { controller.current_admin }.to(nil)
209
+ expect { destroy_session }.to change { controller.current_admin }
210
+ .to(nil)
191
211
  end
192
212
 
193
213
  it 'should revoke the g5 access token' do
@@ -202,7 +222,9 @@ describe DeviseG5Authenticatable::SessionsController do
202
222
  # We need some trickery here because the failure action is actually rack
203
223
  # rather than rails
204
224
  rack_response = described_class.action(:failure).call(request.env)
205
- @response = ActionDispatch::TestResponse.from_response(rack_response.last)
225
+ @response = ActionDispatch::TestResponse.new(rack_response[0],
226
+ rack_response[1],
227
+ rack_response[2].body)
206
228
  end
207
229
 
208
230
  before do
@@ -218,7 +240,9 @@ describe DeviseG5Authenticatable::SessionsController do
218
240
 
219
241
  it 'should set the flash message' do
220
242
  failure
221
- expect(flash[:alert]).to eq("Could not authenticate you from G5 because \"#{reason}\".")
243
+ expect(flash[:alert]).to eq(
244
+ "Could not authenticate you from G5 because \"#{reason}\"."
245
+ )
222
246
  end
223
247
 
224
248
  it 'should be a redirect' do
@@ -238,7 +262,9 @@ describe DeviseG5Authenticatable::SessionsController do
238
262
 
239
263
  it 'should set the flash message' do
240
264
  failure
241
- expect(flash[:alert]).to eq("Could not authenticate you from G5 because \"#{message}\".")
265
+ expect(flash[:alert]).to eq(
266
+ "Could not authenticate you from G5 because \"#{message}\"."
267
+ )
242
268
  end
243
269
 
244
270
  it 'should redirect to the root path' do
@@ -253,7 +279,9 @@ describe DeviseG5Authenticatable::SessionsController do
253
279
 
254
280
  it 'should set the flash message' do
255
281
  failure
256
- expect(flash[:alert]).to eq("Could not authenticate you from G5 because \"#{humanized_type}\".")
282
+ expect(flash[:alert]).to eq(
283
+ "Could not authenticate you from G5 because \"#{humanized_type}\"."
284
+ )
257
285
  end
258
286
 
259
287
  it 'should redirect to the root path' do
@@ -1,6 +1,8 @@
1
- require 'spec_helper'
1
+ # frozen_string_literal: true
2
2
 
3
- describe DeviseG5Authenticatable::UrlHelpers do
3
+ require 'rails_helper'
4
+
5
+ RSpec.describe DeviseG5Authenticatable::UrlHelpers do
4
6
  controller(ActionController::Base) do
5
7
  include DeviseG5Authenticatable::UrlHelpers
6
8
  end
@@ -12,60 +14,59 @@ describe DeviseG5Authenticatable::UrlHelpers do
12
14
  context 'with user resource' do
13
15
  let(:resource_or_scope) { build_stubbed(:user) }
14
16
 
15
- it { should == user_g5_authorize_path }
17
+ it { is_expected.to eq(user_g5_authorize_path) }
16
18
  end
17
19
 
18
20
  context 'with admin resource' do
19
21
  let(:resource_or_scope) { build_stubbed(:admin) }
20
22
 
21
- it { should == admin_g5_authorize_path }
23
+ it { is_expected.to eq(admin_g5_authorize_path) }
22
24
  end
23
25
 
24
26
  context 'with user scope' do
25
27
  let(:resource_or_scope) { :user }
26
28
 
27
- it { should == user_g5_authorize_path }
29
+ it { is_expected.to eq(user_g5_authorize_path) }
28
30
  end
29
31
 
30
32
  context 'with admin scope' do
31
33
  let(:resource_or_scope) { :admin }
32
34
 
33
- it { should == admin_g5_authorize_path}
35
+ it { is_expected.to eq(admin_g5_authorize_path) }
34
36
  end
35
37
  end
36
38
 
37
39
  context 'with custom router' do
38
- before { Devise.router_name = :my_engine }
39
- after { Devise.router_name = nil }
40
-
41
- let(:custom_router) do
42
- double(:my_engine_router, user_g5_authorize_path: 'foo',
43
- admin_g5_authorize_path: 'bar')
40
+ include_context 'custom router'
41
+ before do
42
+ allow(custom_router).to receive(:user_g5_authorize_path)
43
+ .and_return('foo')
44
+ allow(custom_router).to receive(:admin_g5_authorize_path)
45
+ .and_return('bar')
44
46
  end
45
- before { controller.stub(my_engine: custom_router) }
46
47
 
47
48
  context 'with user resource' do
48
49
  let(:resource_or_scope) { build_stubbed(:user) }
49
50
 
50
- it { should == custom_router.user_g5_authorize_path }
51
+ it { is_expected.to eq(custom_router.user_g5_authorize_path) }
51
52
  end
52
53
 
53
54
  context 'with admin resource' do
54
55
  let(:resource_or_scope) { build_stubbed(:admin) }
55
56
 
56
- it { should == custom_router.admin_g5_authorize_path }
57
+ it { is_expected.to eq(custom_router.admin_g5_authorize_path) }
57
58
  end
58
59
 
59
60
  context 'with user scope' do
60
61
  let(:resource_or_scope) { :user }
61
62
 
62
- it { should == custom_router.user_g5_authorize_path }
63
+ it { is_expected.to eq(custom_router.user_g5_authorize_path) }
63
64
  end
64
65
 
65
66
  context 'with admin scope' do
66
67
  let(:resource_or_scope) { :admin }
67
68
 
68
- it { should == custom_router.admin_g5_authorize_path}
69
+ it { is_expected.to eq(custom_router.admin_g5_authorize_path) }
69
70
  end
70
71
  end
71
72
  end
@@ -77,190 +78,191 @@ describe DeviseG5Authenticatable::UrlHelpers do
77
78
  context 'with user resource' do
78
79
  let(:resource_or_scope) { build_stubbed(:user) }
79
80
 
80
- it { should == user_g5_callback_path }
81
+ it { is_expected.to eq(user_g5_callback_path) }
81
82
  end
82
83
 
83
84
  context 'with admin resource' do
84
85
  let(:resource_or_scope) { build_stubbed(:admin) }
85
86
 
86
- it { should == admin_g5_callback_path }
87
+ it { is_expected.to eq(admin_g5_callback_path) }
87
88
  end
88
89
 
89
90
  context 'with user scope' do
90
91
  let(:resource_or_scope) { :user }
91
92
 
92
- it { should == user_g5_callback_path }
93
+ it { is_expected.to eq(user_g5_callback_path) }
93
94
  end
94
95
 
95
96
  context 'with admin scope' do
96
97
  let(:resource_or_scope) { :admin }
97
98
 
98
- it { should == admin_g5_callback_path }
99
+ it { is_expected.to eq(admin_g5_callback_path) }
99
100
  end
100
101
  end
101
102
 
102
103
  context 'with custom router' do
103
- before { Devise.router_name = :my_engine }
104
- after { Devise.router_name = nil }
105
-
106
- let(:custom_router) do
107
- double(:my_engine_router, user_g5_callback_path: 'foo_callback',
108
- admin_g5_callback_path: 'bar_callback')
104
+ include_context 'custom router'
105
+ before do
106
+ allow(custom_router).to receive(:user_g5_callback_path)
107
+ .and_return('foo_callback')
108
+ allow(custom_router).to receive(:admin_g5_callback_path)
109
+ .and_return('bar_callback')
109
110
  end
110
- before { controller.stub(my_engine: custom_router) }
111
111
 
112
112
  context 'with user resource' do
113
113
  let(:resource_or_scope) { build_stubbed(:user) }
114
114
 
115
- it { should == custom_router.user_g5_callback_path }
115
+ it { is_expected.to eq(custom_router.user_g5_callback_path) }
116
116
  end
117
117
 
118
118
  context 'with admin resource' do
119
119
  let(:resource_or_scope) { build_stubbed(:admin) }
120
120
 
121
- it { should == custom_router.admin_g5_callback_path }
121
+ it { is_expected.to eq(custom_router.admin_g5_callback_path) }
122
122
  end
123
123
 
124
124
  context 'with user scope' do
125
125
  let(:resource_or_scope) { :user }
126
126
 
127
- it { should == custom_router.user_g5_callback_path }
127
+ it { is_expected.to eq(custom_router.user_g5_callback_path) }
128
128
  end
129
129
 
130
130
  context 'with admin scope' do
131
131
  let(:resource_or_scope) { :admin }
132
132
 
133
- it { should == custom_router.admin_g5_callback_path}
133
+ it { is_expected.to eq(custom_router.admin_g5_callback_path) }
134
134
  end
135
135
  end
136
136
  end
137
137
 
138
138
  describe '#new_session_path' do
139
- subject(:new_session_path) { controller.new_session_path(resource_or_scope) }
139
+ subject(:new_session_path) do
140
+ controller.new_session_path(resource_or_scope)
141
+ end
140
142
 
141
143
  context 'with main_app router' do
142
144
  context 'with user resource' do
143
145
  let(:resource_or_scope) { build_stubbed(:user) }
144
146
 
145
- it { should == new_user_session_path }
147
+ it { is_expected.to eq(new_user_session_path) }
146
148
  end
147
149
 
148
150
  context 'with admin resource' do
149
151
  let(:resource_or_scope) { build_stubbed(:admin) }
150
152
 
151
- it { should == new_admin_session_path }
153
+ it { is_expected.to eq(new_admin_session_path) }
152
154
  end
153
155
 
154
156
  context 'with user scope' do
155
157
  let(:resource_or_scope) { :user }
156
158
 
157
- it { should == new_user_session_path }
159
+ it { is_expected.to eq(new_user_session_path) }
158
160
  end
159
161
 
160
162
  context 'with admin scope' do
161
163
  let(:resource_or_scope) { :admin }
162
164
 
163
- it { should == new_admin_session_path }
165
+ it { is_expected.to eq(new_admin_session_path) }
164
166
  end
165
167
  end
166
168
 
167
169
  context 'with custom router' do
168
- before { Devise.router_name = :my_engine }
169
- after { Devise.router_name = nil }
170
-
171
- let(:custom_router) do
172
- double(:my_engine_router, new_user_session_path: 'foo',
173
- new_admin_session_path: 'bar')
170
+ include_context 'custom router'
171
+ before do
172
+ allow(custom_router).to receive(:new_user_session_path)
173
+ .and_return('foo')
174
+ allow(custom_router).to receive(:new_admin_session_path)
175
+ .and_return('bar')
174
176
  end
175
- before { controller.stub(my_engine: custom_router) }
176
177
 
177
178
  context 'with user resource' do
178
179
  let(:resource_or_scope) { build_stubbed(:user) }
179
180
 
180
- it { should == custom_router.new_user_session_path }
181
+ it { is_expected.to eq(custom_router.new_user_session_path) }
181
182
  end
182
183
 
183
184
  context 'with admin resource' do
184
185
  let(:resource_or_scope) { build_stubbed(:admin) }
185
186
 
186
- it { should == custom_router.new_admin_session_path }
187
+ it { is_expected.to eq(custom_router.new_admin_session_path) }
187
188
  end
188
189
 
189
190
  context 'with user scope' do
190
191
  let(:resource_or_scope) { :user }
191
192
 
192
- it { should == custom_router.new_user_session_path }
193
+ it { is_expected.to eq(custom_router.new_user_session_path) }
193
194
  end
194
195
 
195
196
  context 'with admin scope' do
196
197
  let(:resource_or_scope) { :admin }
197
198
 
198
- it { should == custom_router.new_admin_session_path}
199
+ it { is_expected.to eq(custom_router.new_admin_session_path) }
199
200
  end
200
201
  end
201
202
  end
202
203
 
203
204
  describe '#destroy_session_path' do
204
- subject(:destroy_session_path) { controller.destroy_session_path(resource_or_scope) }
205
+ subject(:destroy_session_path) do
206
+ controller.destroy_session_path(resource_or_scope)
207
+ end
205
208
 
206
209
  context 'with main_app router' do
207
210
  context 'with user resource' do
208
211
  let(:resource_or_scope) { build_stubbed(:user) }
209
212
 
210
- it { should == destroy_user_session_path }
213
+ it { is_expected.to eq(destroy_user_session_path) }
211
214
  end
212
215
 
213
216
  context 'with admin resource' do
214
217
  let(:resource_or_scope) { build_stubbed(:admin) }
215
218
 
216
- it { should == destroy_admin_session_path }
219
+ it { is_expected.to eq(destroy_admin_session_path) }
217
220
  end
218
221
 
219
222
  context 'with user scope' do
220
223
  let(:resource_or_scope) { :user }
221
224
 
222
- it { should == destroy_user_session_path }
225
+ it { is_expected.to eq(destroy_user_session_path) }
223
226
  end
224
227
 
225
228
  context 'with admin scope' do
226
229
  let(:resource_or_scope) { :admin }
227
230
 
228
- it { should == destroy_admin_session_path }
231
+ it { is_expected.to eq(destroy_admin_session_path) }
229
232
  end
230
233
  end
231
234
 
232
235
  context 'with custom router' do
233
- before { Devise.router_name = :my_engine }
234
- after { Devise.router_name = nil }
235
-
236
- let(:custom_router) do
237
- double(:my_engine_router, destroy_user_session_path: 'foo',
238
- destroy_admin_session_path: 'bar')
236
+ include_context 'custom router'
237
+ before do
238
+ allow(custom_router).to receive(:destroy_user_session_path)
239
+ .and_return('foo')
240
+ allow(custom_router).to receive(:destroy_admin_session_path)
241
+ .and_return('bar')
239
242
  end
240
- before { controller.stub(my_engine: custom_router) }
241
243
 
242
244
  context 'with user resource' do
243
245
  let(:resource_or_scope) { build_stubbed(:user) }
244
246
 
245
- it { should == custom_router.destroy_user_session_path }
247
+ it { is_expected.to eq(custom_router.destroy_user_session_path) }
246
248
  end
247
249
 
248
250
  context 'with admin resource' do
249
251
  let(:resource_or_scope) { build_stubbed(:admin) }
250
252
 
251
- it { should == custom_router.destroy_admin_session_path }
253
+ it { is_expected.to eq(custom_router.destroy_admin_session_path) }
252
254
  end
253
255
 
254
256
  context 'with user scope' do
255
257
  let(:resource_or_scope) { :user }
256
258
 
257
- it { should == custom_router.destroy_user_session_path }
259
+ it { is_expected.to eq(custom_router.destroy_user_session_path) }
258
260
  end
259
261
 
260
262
  context 'with admin scope' do
261
263
  let(:resource_or_scope) { :admin }
262
264
 
263
- it { should == custom_router.destroy_admin_session_path}
265
+ it { is_expected.to eq(custom_router.destroy_admin_session_path) }
264
266
  end
265
267
  end
266
268
  end
@@ -272,60 +274,58 @@ describe DeviseG5Authenticatable::UrlHelpers do
272
274
  context 'with user resource' do
273
275
  let(:resource_or_scope) { build_stubbed(:user) }
274
276
 
275
- it { should == user_session_path }
277
+ it { is_expected.to eq(user_session_path) }
276
278
  end
277
279
 
278
280
  context 'with admin resource' do
279
281
  let(:resource_or_scope) { build_stubbed(:admin) }
280
282
 
281
- it { should == admin_session_path }
283
+ it { is_expected.to eq(admin_session_path) }
282
284
  end
283
285
 
284
286
  context 'with user scope' do
285
287
  let(:resource_or_scope) { :user }
286
288
 
287
- it { should == user_session_path }
289
+ it { is_expected.to eq(user_session_path) }
288
290
  end
289
291
 
290
292
  context 'with admin scope' do
291
293
  let(:resource_or_scope) { :admin }
292
294
 
293
- it { should == admin_session_path }
295
+ it { is_expected.to eq(admin_session_path) }
294
296
  end
295
297
  end
296
298
 
297
299
  context 'with custom router' do
298
- before { Devise.router_name = :my_engine }
299
- after { Devise.router_name = nil }
300
+ include_context 'custom router'
300
301
 
301
- let(:custom_router) do
302
- double(:my_engine_router, user_session_path: 'foo',
303
- admin_session_path: 'bar')
302
+ before do
303
+ allow(custom_router).to receive(:user_session_path).and_return('foo')
304
+ allow(custom_router).to receive(:admin_session_path).and_return('bar')
304
305
  end
305
- before { controller.stub(my_engine: custom_router) }
306
306
 
307
307
  context 'with user resource' do
308
308
  let(:resource_or_scope) { build_stubbed(:user) }
309
309
 
310
- it { should == custom_router.user_session_path }
310
+ it { is_expected.to eq(custom_router.user_session_path) }
311
311
  end
312
312
 
313
313
  context 'with admin resource' do
314
314
  let(:resource_or_scope) { build_stubbed(:admin) }
315
315
 
316
- it { should == custom_router.admin_session_path }
316
+ it { is_expected.to eq(custom_router.admin_session_path) }
317
317
  end
318
318
 
319
319
  context 'with user scope' do
320
320
  let(:resource_or_scope) { :user }
321
321
 
322
- it { should == custom_router.user_session_path }
322
+ it { is_expected.to eq(custom_router.user_session_path) }
323
323
  end
324
324
 
325
325
  context 'with admin scope' do
326
326
  let(:resource_or_scope) { :admin }
327
327
 
328
- it { should == custom_router.admin_session_path}
328
+ it { is_expected.to eq(custom_router.admin_session_path) }
329
329
  end
330
330
  end
331
331
  end
@@ -1,5 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  Dummy::Application.configure do
2
- # Settings specified here will take precedence over those in config/application.rb
4
+ # Settings specified here will take precedence over those in
5
+ # config/application.rb
3
6
 
4
7
  # The test environment is used exclusively to run your application's
5
8
  # test suite. You never need to work with it otherwise. Remember that
@@ -8,8 +11,21 @@ Dummy::Application.configure do
8
11
  config.cache_classes = true
9
12
 
10
13
  # Configure static asset server for tests with Cache-Control for performance
11
- config.serve_static_assets = true
12
- config.static_cache_control = "public, max-age=3600"
14
+ cache_header_value = 'public, max-age=3600'
15
+ if config.respond_to?(:public_file_server=)
16
+ config.public_file_server.enabled = true
17
+ config.public_file_server.headers = {
18
+ 'Cache-Control' => cache_header_value
19
+ }
20
+ else
21
+ config.static_cache_controller = cache_header_value
22
+
23
+ if config.respond_to?(:serve_static_files=)
24
+ config.serve_static_files = true
25
+ else
26
+ config.serve_static_assets = true
27
+ end
28
+ end
13
29
 
14
30
  # Show full error reports and disable caching
15
31
  config.consider_all_requests_local = true
@@ -19,7 +35,7 @@ Dummy::Application.configure do
19
35
  config.action_dispatch.show_exceptions = false
20
36
 
21
37
  # Disable request forgery protection in test environment
22
- config.action_controller.allow_forgery_protection = false
38
+ config.action_controller.allow_forgery_protection = false
23
39
 
24
40
  # Tell Action Mailer not to deliver emails to the real world.
25
41
  # The :test delivery method accumulates sent emails in the