devise_g5_authenticatable 0.3.0 → 1.0.0.pre.1

Sign up to get free protection for your applications and to get access to all the features.
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