loyal_devise 2.1.2 → 2.1.3

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 (188) hide show
  1. data/.gitignore +2 -0
  2. data/.travis.yml +14 -9
  3. data/.yardopts +9 -0
  4. data/CHANGELOG.rdoc +60 -5
  5. data/CONTRIBUTING.md +4 -2
  6. data/Gemfile +7 -7
  7. data/Gemfile.lock +107 -101
  8. data/MIT-LICENSE +1 -1
  9. data/README.md +110 -48
  10. data/Rakefile +1 -0
  11. data/app/controllers/devise/confirmations_controller.rb +2 -4
  12. data/app/controllers/devise/omniauth_callbacks_controller.rb +0 -1
  13. data/app/controllers/devise/passwords_controller.rb +16 -5
  14. data/app/controllers/devise/registrations_controller.rb +13 -7
  15. data/app/controllers/devise/sessions_controller.rb +6 -6
  16. data/app/controllers/devise/unlocks_controller.rb +3 -4
  17. data/app/controllers/devise_controller.rb +12 -33
  18. data/app/helpers/devise_helper.rb +0 -1
  19. data/app/mailers/devise/mailer.rb +7 -8
  20. data/app/views/devise/mailer/confirmation_instructions.html.erb +1 -1
  21. data/app/views/devise/mailer/reset_password_instructions.html.erb +1 -1
  22. data/app/views/devise/registrations/edit.html.erb +5 -1
  23. data/config/locales/en.yml +48 -48
  24. data/devise.gemspec +6 -6
  25. data/devise.png +0 -0
  26. data/gemfiles/{Gemfile.rails-3.1.x → Gemfile.rails-3.2.x} +8 -12
  27. data/gemfiles/Gemfile.rails-3.2.x.lock +156 -0
  28. data/lib/devise.rb +34 -11
  29. data/lib/devise/controllers/helpers.rb +33 -7
  30. data/lib/devise/controllers/rememberable.rb +6 -3
  31. data/lib/devise/controllers/scoped_views.rb +1 -2
  32. data/lib/devise/controllers/url_helpers.rb +0 -1
  33. data/lib/devise/delegator.rb +0 -1
  34. data/lib/devise/failure_app.rb +8 -2
  35. data/lib/devise/hooks/activatable.rb +1 -2
  36. data/lib/devise/hooks/forgetable.rb +0 -1
  37. data/lib/devise/hooks/lockable.rb +1 -2
  38. data/lib/devise/hooks/rememberable.rb +1 -2
  39. data/lib/devise/hooks/timeoutable.rb +0 -1
  40. data/lib/devise/hooks/trackable.rb +0 -1
  41. data/lib/devise/mailers/helpers.rb +18 -14
  42. data/lib/devise/mapping.rb +6 -7
  43. data/lib/devise/models.rb +0 -1
  44. data/lib/devise/models/authenticatable.rb +50 -27
  45. data/lib/devise/models/confirmable.rb +37 -16
  46. data/lib/devise/models/database_authenticatable.rb +17 -3
  47. data/lib/devise/models/lockable.rb +1 -2
  48. data/lib/devise/models/omniauthable.rb +1 -2
  49. data/lib/devise/models/recoverable.rb +10 -6
  50. data/lib/devise/models/registerable.rb +0 -1
  51. data/lib/devise/models/rememberable.rb +1 -2
  52. data/lib/devise/models/timeoutable.rb +1 -2
  53. data/lib/devise/models/token_authenticatable.rb +0 -1
  54. data/lib/devise/models/trackable.rb +0 -1
  55. data/lib/devise/models/validatable.rb +0 -1
  56. data/lib/devise/modules.rb +1 -2
  57. data/lib/devise/omniauth.rb +0 -1
  58. data/lib/devise/omniauth/config.rb +0 -1
  59. data/lib/devise/omniauth/url_helpers.rb +0 -1
  60. data/lib/devise/orm/active_record.rb +1 -2
  61. data/lib/devise/orm/mongoid.rb +1 -2
  62. data/lib/devise/{param_filter.rb → parameter_filter.rb} +10 -12
  63. data/lib/devise/parameter_sanitizer.rb +59 -0
  64. data/lib/devise/rails.rb +0 -1
  65. data/lib/devise/rails/routes.rb +22 -18
  66. data/lib/devise/rails/warden_compat.rb +0 -30
  67. data/lib/devise/strategies/authenticatable.rb +8 -6
  68. data/lib/devise/strategies/base.rb +1 -2
  69. data/lib/devise/strategies/database_authenticatable.rb +1 -2
  70. data/lib/devise/strategies/rememberable.rb +1 -2
  71. data/lib/devise/strategies/token_authenticatable.rb +38 -4
  72. data/lib/devise/test_helpers.rb +0 -1
  73. data/lib/devise/time_inflector.rb +1 -2
  74. data/lib/devise/version.rb +1 -2
  75. data/lib/generators/active_record/devise_generator.rb +1 -5
  76. data/lib/generators/active_record/templates/migration.rb +0 -1
  77. data/lib/generators/active_record/templates/migration_existing.rb +0 -1
  78. data/lib/generators/devise/devise_generator.rb +0 -1
  79. data/lib/generators/devise/install_generator.rb +0 -1
  80. data/lib/generators/devise/orm_helpers.rb +1 -2
  81. data/lib/generators/devise/views_generator.rb +8 -3
  82. data/lib/generators/mongoid/devise_generator.rb +1 -2
  83. data/lib/generators/templates/README +1 -1
  84. data/lib/generators/templates/devise.rb +10 -5
  85. data/lib/generators/templates/markerb/confirmation_instructions.markerb +1 -1
  86. data/lib/generators/templates/simple_form_for/confirmations/new.html.erb +1 -0
  87. data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +6 -1
  88. data/lib/generators/templates/simple_form_for/unlocks/new.html.erb +1 -0
  89. data/loyal_devise.gemspec +27 -0
  90. data/test/controllers/custom_strategy_test.rb +0 -1
  91. data/test/controllers/helpers_test.rb +0 -1
  92. data/test/controllers/internal_helpers_test.rb +13 -4
  93. data/test/controllers/passwords_controller_test.rb +32 -0
  94. data/test/controllers/sessions_controller_test.rb +28 -1
  95. data/test/controllers/url_helpers_test.rb +0 -1
  96. data/test/delegator_test.rb +0 -1
  97. data/test/devise_test.rb +12 -2
  98. data/test/failure_app_test.rb +3 -4
  99. data/test/generators/active_record_generator_test.rb +1 -4
  100. data/test/generators/devise_generator_test.rb +0 -1
  101. data/test/generators/install_generator_test.rb +0 -1
  102. data/test/generators/mongoid_generator_test.rb +0 -1
  103. data/test/generators/views_generator_test.rb +16 -2
  104. data/test/helpers/devise_helper_test.rb +1 -2
  105. data/test/integration/authenticatable_test.rb +92 -27
  106. data/test/integration/confirmable_test.rb +7 -7
  107. data/test/integration/database_authenticatable_test.rb +8 -7
  108. data/test/integration/http_authenticatable_test.rb +19 -2
  109. data/test/integration/lockable_test.rb +1 -2
  110. data/test/integration/omniauthable_test.rb +2 -3
  111. data/test/integration/recoverable_test.rb +40 -12
  112. data/test/integration/registerable_test.rb +17 -14
  113. data/test/integration/rememberable_test.rb +16 -10
  114. data/test/integration/timeoutable_test.rb +11 -2
  115. data/test/integration/token_authenticatable_test.rb +45 -2
  116. data/test/integration/trackable_test.rb +1 -2
  117. data/test/mailers/confirmation_instructions_test.rb +11 -3
  118. data/test/mailers/reset_password_instructions_test.rb +11 -3
  119. data/test/mailers/unlock_instructions_test.rb +11 -2
  120. data/test/mapping_test.rb +0 -1
  121. data/test/models/authenticatable_test.rb +6 -1
  122. data/test/models/confirmable_test.rb +53 -2
  123. data/test/models/database_authenticatable_test.rb +57 -21
  124. data/test/models/lockable_test.rb +1 -2
  125. data/test/models/omniauthable_test.rb +0 -1
  126. data/test/models/recoverable_test.rb +21 -5
  127. data/test/models/registerable_test.rb +0 -1
  128. data/test/models/rememberable_test.rb +4 -4
  129. data/test/models/serializable_test.rb +8 -8
  130. data/test/models/timeoutable_test.rb +0 -1
  131. data/test/models/token_authenticatable_test.rb +0 -1
  132. data/test/models/trackable_test.rb +0 -1
  133. data/test/models/validatable_test.rb +16 -6
  134. data/test/models_test.rb +7 -24
  135. data/test/omniauth/config_test.rb +1 -2
  136. data/test/omniauth/url_helpers_test.rb +4 -2
  137. data/test/orm/active_record.rb +1 -1
  138. data/test/orm/mongoid.rb +2 -4
  139. data/test/parameter_sanitizer_test.rb +51 -0
  140. data/test/rails_app/Rakefile +0 -4
  141. data/test/rails_app/app/active_record/admin.rb +0 -1
  142. data/test/rails_app/app/active_record/shim.rb +1 -2
  143. data/test/rails_app/app/active_record/user.rb +0 -1
  144. data/test/rails_app/app/controllers/admins/sessions_controller.rb +1 -2
  145. data/test/rails_app/app/controllers/admins_controller.rb +0 -1
  146. data/test/rails_app/app/controllers/application_controller.rb +1 -1
  147. data/test/rails_app/app/controllers/home_controller.rb +0 -1
  148. data/test/rails_app/app/controllers/publisher/registrations_controller.rb +1 -2
  149. data/test/rails_app/app/controllers/publisher/sessions_controller.rb +1 -2
  150. data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +1 -2
  151. data/test/rails_app/app/controllers/users_controller.rb +8 -1
  152. data/test/rails_app/app/helpers/application_helper.rb +0 -1
  153. data/test/rails_app/app/mailers/users/mailer.rb +4 -1
  154. data/test/rails_app/app/mongoid/admin.rb +4 -3
  155. data/test/rails_app/app/mongoid/shim.rb +3 -5
  156. data/test/rails_app/app/mongoid/user.rb +2 -3
  157. data/test/rails_app/app/views/users/edit_form.html.erb +1 -0
  158. data/test/rails_app/bin/bundle +3 -0
  159. data/test/rails_app/bin/rails +4 -0
  160. data/test/rails_app/bin/rake +4 -0
  161. data/test/rails_app/config/application.rb +1 -3
  162. data/test/rails_app/config/boot.rb +3 -4
  163. data/test/rails_app/config/environment.rb +2 -3
  164. data/test/rails_app/config/environments/development.rb +23 -8
  165. data/test/rails_app/config/environments/production.rb +68 -18
  166. data/test/rails_app/config/environments/test.rb +18 -16
  167. data/test/rails_app/config/initializers/backtrace_silencers.rb +0 -1
  168. data/test/rails_app/config/initializers/devise.rb +0 -1
  169. data/test/rails_app/config/initializers/inflections.rb +0 -1
  170. data/test/rails_app/config/initializers/secret_token.rb +8 -3
  171. data/test/rails_app/config/initializers/session_store.rb +1 -0
  172. data/test/rails_app/config/routes.rb +20 -17
  173. data/test/rails_app/db/migrate/20100401102949_create_tables.rb +0 -1
  174. data/test/rails_app/db/schema.rb +0 -1
  175. data/test/rails_app/lib/shared_admin.rb +0 -1
  176. data/test/rails_app/lib/shared_user.rb +0 -2
  177. data/test/routes_test.rb +22 -21
  178. data/test/support/assertions.rb +0 -1
  179. data/test/support/helpers.rb +1 -2
  180. data/test/support/integration.rb +0 -1
  181. data/test/support/webrat/integrations/rails.rb +0 -1
  182. data/test/test_helper.rb +8 -2
  183. data/test/test_helpers_test.rb +0 -1
  184. data/test/test_models.rb +26 -0
  185. metadata +65 -27
  186. data/gemfiles/Gemfile.rails-3.1.x.lock +0 -167
  187. data/test/indifferent_hash.rb +0 -34
  188. data/test/rails_app/script/rails +0 -10
@@ -1,7 +1,6 @@
1
- # -*- encoding : utf-8 -*-
2
1
  require 'test_helper'
3
2
 
4
- class HttpAuthenticationTest < ActionController::IntegrationTest
3
+ class HttpAuthenticationTest < ActionDispatch::IntegrationTest
5
4
  test 'handles unverified requests gets rid of caches but continues signed in' do
6
5
  swap UsersController, :allow_forgery_protection => true do
7
6
  create_user
@@ -63,6 +62,24 @@ class HttpAuthenticationTest < ActionController::IntegrationTest
63
62
  end
64
63
  end
65
64
 
65
+ test 'it uses appropriate authentication_keys when configured with hash' do
66
+ swap Devise, :authentication_keys => ActiveSupport::OrderedHash[:username, false, :email, false] do
67
+ sign_in_as_new_user_with_http("usertest")
68
+ assert_response :success
69
+ assert_match '<email>user@test.com</email>', response.body
70
+ assert warden.authenticated?(:user)
71
+ end
72
+ end
73
+
74
+ test 'it uses the appropriate key when configured explicitly' do
75
+ swap Devise, :authentication_keys => ActiveSupport::OrderedHash[:email, false, :username, false], :http_authentication_key => :username do
76
+ sign_in_as_new_user_with_http("usertest")
77
+ assert_response :success
78
+ assert_match '<email>user@test.com</email>', response.body
79
+ assert warden.authenticated?(:user)
80
+ end
81
+ end
82
+
66
83
  test 'test request with oauth2 header doesnt get mistaken for basic authentication' do
67
84
  swap Devise, :http_authenticatable => true do
68
85
  add_oauth2_header
@@ -1,7 +1,6 @@
1
- # -*- encoding : utf-8 -*-
2
1
  require 'test_helper'
3
2
 
4
- class LockTest < ActionController::IntegrationTest
3
+ class LockTest < ActionDispatch::IntegrationTest
5
4
 
6
5
  def visit_user_unlock_with_token(unlock_token)
7
6
  visit user_unlock_path(:unlock_token => unlock_token)
@@ -1,8 +1,7 @@
1
- # -*- encoding : utf-8 -*-
2
1
  require 'test_helper'
3
2
 
4
3
 
5
- class OmniauthableIntegrationTest < ActionController::IntegrationTest
4
+ class OmniauthableIntegrationTest < ActionDispatch::IntegrationTest
6
5
  FACEBOOK_INFO = {
7
6
  "id" => '12345',
8
7
  "link" => 'http://facebook.com/josevalim',
@@ -91,7 +90,7 @@ class OmniauthableIntegrationTest < ActionController::IntegrationTest
91
90
  end
92
91
 
93
92
  assert session["devise.facebook_data"]
94
- user = sign_in_as_user
93
+ sign_in_as_user
95
94
  assert !session["devise.facebook_data"]
96
95
  end
97
96
 
@@ -1,7 +1,6 @@
1
- # -*- encoding : utf-8 -*-
2
1
  require 'test_helper'
3
2
 
4
- class PasswordTest < ActionController::IntegrationTest
3
+ class PasswordTest < ActionDispatch::IntegrationTest
5
4
 
6
5
  def visit_new_password_path
7
6
  visit new_user_session_path
@@ -154,7 +153,8 @@ class PasswordTest < ActionController::IntegrationTest
154
153
  assert_response :success
155
154
  assert_current_url '/users/password'
156
155
  assert_have_selector '#error_explanation'
157
- assert_contain 'Password doesn\'t match confirmation'
156
+ assert_contain Devise.rails4? ?
157
+ "Password confirmation doesn't match Password" : "Password doesn't match confirmation"
158
158
  assert_not user.reload.valid_password?('987654321')
159
159
  end
160
160
 
@@ -191,15 +191,43 @@ class PasswordTest < ActionController::IntegrationTest
191
191
  assert warden.authenticated?(:user)
192
192
  end
193
193
 
194
- test 'does not sign in user automatically after changing its password if it\'s locked' do
195
- user = create_user(:locked => true)
196
- request_forgot_password
197
- reset_password :reset_password_token => user.reload.reset_password_token
194
+ test 'does not sign in user automatically after changing its password if it\'s locked and unlock strategy is :none or :time' do
195
+ [:none, :time].each do |strategy|
196
+ swap Devise, :unlock_strategy => strategy do
197
+ user = create_user(:locked => true)
198
+ request_forgot_password
199
+ reset_password :reset_password_token => user.reload.reset_password_token
200
+
201
+ assert_contain 'Your password was changed successfully.'
202
+ assert_not_contain 'You are now signed in.'
203
+ assert_equal new_user_session_path, @request.path
204
+ assert !warden.authenticated?(:user)
205
+ end
206
+ end
207
+ end
198
208
 
199
- assert_contain 'Your password was changed successfully.'
200
- assert_not_contain 'You are now signed in.'
201
- assert_equal new_user_session_path, @request.path
202
- assert !warden.authenticated?(:user)
209
+ test 'unlocks and signs in locked user automatically after changing it\'s password if unlock strategy is :email' do
210
+ swap Devise, :unlock_strategy => :email do
211
+ user = create_user(:locked => true)
212
+ request_forgot_password
213
+ reset_password :reset_password_token => user.reload.reset_password_token
214
+
215
+ assert_contain 'Your password was changed successfully.'
216
+ assert !user.reload.access_locked?
217
+ assert warden.authenticated?(:user)
218
+ end
219
+ end
220
+
221
+ test 'unlocks and signs in locked user automatically after changing it\'s password if unlock strategy is :both' do
222
+ swap Devise, :unlock_strategy => :both do
223
+ user = create_user(:locked => true)
224
+ request_forgot_password
225
+ reset_password :reset_password_token => user.reload.reset_password_token
226
+
227
+ assert_contain 'Your password was changed successfully.'
228
+ assert !user.reload.access_locked?
229
+ assert warden.authenticated?(:user)
230
+ end
203
231
  end
204
232
 
205
233
  test 'sign in user automatically and confirm after changing its password if it\'s not confirmed' do
@@ -243,7 +271,7 @@ class PasswordTest < ActionController::IntegrationTest
243
271
  end
244
272
 
245
273
  test 'change password with invalid token in XML format should return invalid response' do
246
- user = create_user
274
+ create_user
247
275
  request_forgot_password
248
276
  put user_password_path(:format => 'xml'), :user => {:reset_password_token => 'invalid.token', :password => '987654321', :password_confirmation => '987654321'}
249
277
  assert_response :unprocessable_entity
@@ -1,7 +1,6 @@
1
- # -*- encoding : utf-8 -*-
2
1
  require 'test_helper'
3
2
 
4
- class RegistrationTest < ActionController::IntegrationTest
3
+ class RegistrationTest < ActionDispatch::IntegrationTest
5
4
 
6
5
  test 'a guest admin should be able to sign in successfully' do
7
6
  get new_admin_session_path
@@ -18,7 +17,7 @@ class RegistrationTest < ActionController::IntegrationTest
18
17
  assert warden.authenticated?(:admin)
19
18
  assert_current_url "/admin_area/home"
20
19
 
21
- admin = Admin.last :order => "id"
20
+ admin = Admin.order(:id).last
22
21
  assert_equal admin.email, 'new_user@test.com'
23
22
  end
24
23
 
@@ -57,7 +56,7 @@ class RegistrationTest < ActionController::IntegrationTest
57
56
 
58
57
  assert_not warden.authenticated?(:user)
59
58
 
60
- user = User.last :order => "id"
59
+ user = User.order(:id).last
61
60
  assert_equal user.email, 'new_user@test.com'
62
61
  assert_not user.confirmed?
63
62
  end
@@ -101,7 +100,8 @@ class RegistrationTest < ActionController::IntegrationTest
101
100
  assert_template 'registrations/new'
102
101
  assert_have_selector '#error_explanation'
103
102
  assert_contain "Email is invalid"
104
- assert_contain "Password doesn't match confirmation"
103
+ assert_contain Devise.rails4? ?
104
+ "Password confirmation doesn't match Password" : "Password doesn't match confirmation"
105
105
  assert_contain "2 errors prohibited"
106
106
  assert_nil User.first
107
107
 
@@ -113,7 +113,7 @@ class RegistrationTest < ActionController::IntegrationTest
113
113
  # https://github.com/mongoid/mongoid/issues/756
114
114
  (pending "Fails on Mongoid < 2.1"; break) if defined?(Mongoid) && Mongoid::VERSION.to_f < 2.1
115
115
 
116
- user = create_user
116
+ create_user
117
117
  get new_user_registration_path
118
118
 
119
119
  fill_in 'email', :with => 'user@test.com'
@@ -204,10 +204,11 @@ class RegistrationTest < ActionController::IntegrationTest
204
204
 
205
205
  fill_in 'password', :with => 'pas123'
206
206
  fill_in 'password confirmation', :with => ''
207
- fill_in 'current password', :with => '123456'
207
+ fill_in 'current password', :with => '12345678'
208
208
  click_button 'Update'
209
209
 
210
- assert_contain "Password doesn't match confirmation"
210
+ assert_contain Devise.rails4? ?
211
+ "Password confirmation doesn't match Password" : "Password doesn't match confirmation"
211
212
  assert_not User.first.valid_password?('pas123')
212
213
  end
213
214
 
@@ -215,7 +216,7 @@ class RegistrationTest < ActionController::IntegrationTest
215
216
  sign_in_as_user
216
217
  get edit_user_registration_path
217
218
 
218
- click_link "Cancel my account", :method => :delete
219
+ click_button "Cancel my account"
219
220
  assert_contain "Bye! Your account was successfully cancelled. We hope to see you again soon."
220
221
 
221
222
  assert User.all.empty?
@@ -252,7 +253,7 @@ class RegistrationTest < ActionController::IntegrationTest
252
253
  assert_response :success
253
254
  assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<admin>)
254
255
 
255
- admin = Admin.last :order => "id"
256
+ admin = Admin.order(:id).last
256
257
  assert_equal admin.email, 'new_user@test.com'
257
258
  end
258
259
 
@@ -261,7 +262,7 @@ class RegistrationTest < ActionController::IntegrationTest
261
262
  assert_response :success
262
263
  assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<user>)
263
264
 
264
- user = User.last :order => "id"
265
+ user = User.order(:id).last
265
266
  assert_equal user.email, 'new_user@test.com'
266
267
  end
267
268
 
@@ -286,14 +287,14 @@ class RegistrationTest < ActionController::IntegrationTest
286
287
  end
287
288
 
288
289
  test 'a user cancel his account in XML format should return valid response' do
289
- user = sign_in_as_user
290
+ sign_in_as_user
290
291
  delete user_registration_path(:format => 'xml')
291
292
  assert_response :success
292
293
  assert_equal User.count, 0
293
294
  end
294
295
  end
295
296
 
296
- class ReconfirmableRegistrationTest < ActionController::IntegrationTest
297
+ class ReconfirmableRegistrationTest < ActionDispatch::IntegrationTest
297
298
  test 'a signed in admin should see a more appropriate flash message when editing his account if reconfirmable is enabled' do
298
299
  sign_in_as_admin
299
300
  get edit_admin_registration_path
@@ -304,8 +305,10 @@ class ReconfirmableRegistrationTest < ActionController::IntegrationTest
304
305
 
305
306
  assert_current_url '/admin_area/home'
306
307
  assert_contain 'but we need to verify your new email address'
308
+ assert_equal 'admin.new@example.com', Admin.first.unconfirmed_email
307
309
 
308
- assert_equal "admin.new@example.com", Admin.first.unconfirmed_email
310
+ get edit_admin_registration_path
311
+ assert_contain 'Currently waiting confirmation for: admin.new@example.com'
309
312
  end
310
313
 
311
314
  test 'a signed in admin should not see a reconfirmation message if they did not change their password' do
@@ -1,7 +1,6 @@
1
- # -*- encoding : utf-8 -*-
2
1
  require 'test_helper'
3
2
 
4
- class RememberMeTest < ActionController::IntegrationTest
3
+ class RememberMeTest < ActionDispatch::IntegrationTest
5
4
  def create_user_and_remember(add_to_token='')
6
5
  user = create_user
7
6
  user.remember_me!
@@ -27,7 +26,7 @@ class RememberMeTest < ActionController::IntegrationTest
27
26
  end
28
27
 
29
28
  test 'do not remember the user if he has not checked remember me option' do
30
- user = sign_in_as_user
29
+ sign_in_as_user
31
30
  assert_nil request.cookies["remember_user_cookie"]
32
31
  end
33
32
 
@@ -44,7 +43,7 @@ class RememberMeTest < ActionController::IntegrationTest
44
43
  end
45
44
 
46
45
  test 'generate remember token after sign in' do
47
- user = sign_in_as_user :remember_me => true
46
+ sign_in_as_user :remember_me => true
48
47
  assert request.cookies["remember_user_token"]
49
48
  end
50
49
 
@@ -58,6 +57,13 @@ class RememberMeTest < ActionController::IntegrationTest
58
57
  end
59
58
  end
60
59
 
60
+ test 'generate remember token with a custom key' do
61
+ swap Devise, :rememberable_options => { :key => "v1lat_token" } do
62
+ user = sign_in_as_user :remember_me => true
63
+ assert request.cookies["v1lat_token"]
64
+ end
65
+ end
66
+
61
67
  test 'generate remember token after sign in setting session options' do
62
68
  begin
63
69
  Rails.configuration.session_options[:domain] = "omg.somewhere.com"
@@ -78,7 +84,7 @@ class RememberMeTest < ActionController::IntegrationTest
78
84
  end
79
85
 
80
86
  test 'remember the user before sign up and redirect him to his home' do
81
- user = create_user_and_remember
87
+ create_user_and_remember
82
88
  get new_user_registration_path
83
89
  assert warden.authenticated?(:user)
84
90
  assert_redirected_to root_path
@@ -86,7 +92,7 @@ class RememberMeTest < ActionController::IntegrationTest
86
92
 
87
93
  test 'cookies are destroyed on unverified requests' do
88
94
  swap ApplicationController, :allow_forgery_protection => true do
89
- user = create_user_and_remember
95
+ create_user_and_remember
90
96
  get users_path
91
97
  assert warden.authenticated?(:user)
92
98
  post root_path, :authenticity_token => 'INVALID'
@@ -111,7 +117,7 @@ class RememberMeTest < ActionController::IntegrationTest
111
117
  end
112
118
 
113
119
  test 'do not remember other scopes' do
114
- user = create_user_and_remember
120
+ create_user_and_remember
115
121
  get root_path
116
122
  assert_response :success
117
123
  assert warden.authenticated?(:user)
@@ -119,14 +125,14 @@ class RememberMeTest < ActionController::IntegrationTest
119
125
  end
120
126
 
121
127
  test 'do not remember with invalid token' do
122
- user = create_user_and_remember('add')
128
+ create_user_and_remember('add')
123
129
  get users_path
124
130
  assert_not warden.authenticated?(:user)
125
131
  assert_redirected_to new_user_session_path
126
132
  end
127
133
 
128
134
  test 'do not remember with expired token' do
129
- user = create_user_and_remember
135
+ create_user_and_remember
130
136
  swap Devise, :remember_for => 0 do
131
137
  get users_path
132
138
  assert_not warden.authenticated?(:user)
@@ -135,7 +141,7 @@ class RememberMeTest < ActionController::IntegrationTest
135
141
  end
136
142
 
137
143
  test 'do not remember the user anymore after forget' do
138
- user = create_user_and_remember
144
+ create_user_and_remember
139
145
  get users_path
140
146
  assert warden.authenticated?(:user)
141
147
 
@@ -1,7 +1,6 @@
1
- # -*- encoding : utf-8 -*-
2
1
  require 'test_helper'
3
2
 
4
- class SessionTimeoutTest < ActionController::IntegrationTest
3
+ class SessionTimeoutTest < ActionDispatch::IntegrationTest
5
4
 
6
5
  def last_request_at
7
6
  @controller.user_session['last_request_at']
@@ -46,6 +45,16 @@ class SessionTimeoutTest < ActionController::IntegrationTest
46
45
  assert_not warden.authenticated?(:user)
47
46
  end
48
47
 
48
+ test 'time out user session after deault limit time and redirect to latest get request' do
49
+ user = sign_in_as_user
50
+ visit edit_form_user_path(user)
51
+
52
+ click_button 'Update'
53
+ sign_in_as_user
54
+
55
+ assert_equal edit_form_user_url(user), current_url
56
+ end
57
+
49
58
  test 'time out is not triggered on sign out' do
50
59
  user = sign_in_as_user
51
60
  get expire_user_path(user)
@@ -1,7 +1,6 @@
1
- # -*- encoding : utf-8 -*-
2
1
  require 'test_helper'
3
2
 
4
- class TokenAuthenticationTest < ActionController::IntegrationTest
3
+ class TokenAuthenticationTest < ActionDispatch::IntegrationTest
5
4
 
6
5
  test 'authenticate with valid authentication token key and value through params' do
7
6
  swap Devise, :token_authentication_key => :secret_token do
@@ -130,6 +129,46 @@ class TokenAuthenticationTest < ActionController::IntegrationTest
130
129
  end
131
130
  end
132
131
 
132
+ test 'authenticate with valid authentication token key and value through http header' do
133
+ swap Devise, :token_authentication_key => :secret_token do
134
+ sign_in_as_new_user_with_token(:token_auth => true)
135
+
136
+ assert_response :success
137
+ assert_match '<email>user@test.com</email>', response.body
138
+ assert_equal request.env['devise.token_options'], {}
139
+ assert warden.authenticated?(:user)
140
+ end
141
+ end
142
+
143
+ test 'authenticate with valid authentication token key and value through http header, with options' do
144
+ swap Devise, :token_authentication_key => :secret_token, :http_authenticatable => [:token_options] do
145
+ signature = "**TESTSIGNATURE**"
146
+ sign_in_as_new_user_with_token(:token_auth => true, :token_options => {:signature => signature, :nonce => 'def'})
147
+
148
+ assert_response :success
149
+ assert_match '<email>user@test.com</email>', response.body
150
+ assert_equal request.env['devise.token_options'][:signature], signature
151
+ assert_equal request.env['devise.token_options'][:nonce], 'def'
152
+ assert warden.authenticated?(:user)
153
+ end
154
+ end
155
+
156
+ test 'authenticate with valid authentication token key and value through http header without allowing token authorization setting is denied' do
157
+ swap Devise, :token_authentication_key => :secret_token, :http_authenticatable => false do
158
+ sign_in_as_new_user_with_token(:token_auth => true)
159
+
160
+ assert_response :unauthorized
161
+ assert_nil warden.user(:user)
162
+ end
163
+ end
164
+
165
+ test 'does not authenticate with improper authentication token value in header' do
166
+ sign_in_as_new_user_with_token(:token_auth => true, :auth_token => '*** INVALID TOKEN ***')
167
+
168
+ assert_response :unauthorized
169
+ assert_nil warden.user(:user)
170
+ end
171
+
133
172
  private
134
173
 
135
174
  def sign_in_as_new_user_with_token(options = {})
@@ -141,6 +180,10 @@ class TokenAuthenticationTest < ActionController::IntegrationTest
141
180
  if options[:http_auth]
142
181
  header = "Basic #{Base64.encode64("#{VALID_AUTHENTICATION_TOKEN}:X")}"
143
182
  get users_path(:format => :xml), {}, "HTTP_AUTHORIZATION" => header
183
+ elsif options[:token_auth]
184
+ token_options = options[:token_options] || {}
185
+ header = ActionController::HttpAuthentication::Token.encode_credentials(options[:auth_token], token_options)
186
+ get users_path(:format => :xml), {}, "HTTP_AUTHORIZATION" => header
144
187
  else
145
188
  visit users_path(options[:auth_token_key].to_sym => options[:auth_token])
146
189
  end
@@ -1,7 +1,6 @@
1
- # -*- encoding : utf-8 -*-
2
1
  require 'test_helper'
3
2
 
4
- class TrackableHooksTest < ActionController::IntegrationTest
3
+ class TrackableHooksTest < ActionDispatch::IntegrationTest
5
4
 
6
5
  test "current and last sign in timestamps are updated on each sign in" do
7
6
  user = create_user
@@ -1,4 +1,3 @@
1
- # -*- encoding : utf-8 -*-
2
1
  require 'test_helper'
3
2
 
4
3
  class ConfirmationInstructionsTest < ActionMailer::TestCase
@@ -47,6 +46,16 @@ class ConfirmationInstructionsTest < ActionMailer::TestCase
47
46
  assert_equal ['custom@example.com'], mail.from
48
47
  end
49
48
 
49
+ test 'setup sender from custom mailer defaults with proc' do
50
+ Devise.mailer = 'Users::FromProcMailer'
51
+ assert_equal ['custom@example.com'], mail.from
52
+ end
53
+
54
+ test 'custom mailer renders parent mailer template' do
55
+ Devise.mailer = 'Users::Mailer'
56
+ assert_not_blank mail.body.encoded
57
+ end
58
+
50
59
  test 'setup reply to as copy from sender' do
51
60
  assert_equal ['test@example.com'], mail.reply_to
52
61
  end
@@ -57,7 +66,6 @@ class ConfirmationInstructionsTest < ActionMailer::TestCase
57
66
  assert_equal ['custom_reply_to@example.com'], mail.reply_to
58
67
  end
59
68
 
60
-
61
69
  test 'setup subject from I18n' do
62
70
  store_translations :en, :devise => { :mailer => { :confirmation_instructions => { :subject => 'Account Confirmation' } } } do
63
71
  assert_equal 'Account Confirmation', mail.subject
@@ -71,7 +79,7 @@ class ConfirmationInstructionsTest < ActionMailer::TestCase
71
79
  end
72
80
 
73
81
  test 'body should have user info' do
74
- assert_match /#{user.email}/, mail.body.encoded
82
+ assert_match user.email, mail.body.encoded
75
83
  end
76
84
 
77
85
  test 'body should have link to confirm the account' do