devise 3.2.1 → 4.4.3

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of devise might be problematic. Click here for more details.

Files changed (254) hide show
  1. checksums.yaml +7 -0
  2. data/.travis.yml +58 -10
  3. data/CHANGELOG.md +199 -979
  4. data/CODE_OF_CONDUCT.md +22 -0
  5. data/CONTRIBUTING.md +73 -8
  6. data/Gemfile +19 -11
  7. data/Gemfile.lock +152 -119
  8. data/ISSUE_TEMPLATE.md +19 -0
  9. data/MIT-LICENSE +1 -1
  10. data/README.md +347 -93
  11. data/Rakefile +4 -2
  12. data/app/controllers/devise/confirmations_controller.rb +11 -5
  13. data/app/controllers/devise/omniauth_callbacks_controller.rb +12 -6
  14. data/app/controllers/devise/passwords_controller.rb +20 -8
  15. data/app/controllers/devise/registrations_controller.rb +34 -19
  16. data/app/controllers/devise/sessions_controller.rb +47 -17
  17. data/app/controllers/devise/unlocks_controller.rb +9 -4
  18. data/app/controllers/devise_controller.rb +67 -31
  19. data/app/helpers/devise_helper.rb +4 -2
  20. data/app/mailers/devise/mailer.rb +10 -0
  21. data/app/views/devise/confirmations/new.html.erb +8 -4
  22. data/app/views/devise/mailer/confirmation_instructions.html.erb +1 -1
  23. data/app/views/devise/mailer/email_changed.html.erb +7 -0
  24. data/app/views/devise/mailer/password_change.html.erb +3 -0
  25. data/app/views/devise/mailer/reset_password_instructions.html.erb +1 -1
  26. data/app/views/devise/mailer/unlock_instructions.html.erb +1 -1
  27. data/app/views/devise/passwords/edit.html.erb +15 -6
  28. data/app/views/devise/passwords/new.html.erb +8 -4
  29. data/app/views/devise/registrations/edit.html.erb +28 -14
  30. data/app/views/devise/registrations/new.html.erb +19 -8
  31. data/app/views/devise/sessions/new.html.erb +17 -8
  32. data/app/views/devise/shared/{_links.erb → _links.html.erb} +2 -2
  33. data/app/views/devise/unlocks/new.html.erb +8 -4
  34. data/bin/test +13 -0
  35. data/config/locales/en.yml +22 -17
  36. data/devise.gemspec +7 -6
  37. data/gemfiles/Gemfile.rails-4.1-stable +32 -0
  38. data/gemfiles/Gemfile.rails-4.1-stable.lock +171 -0
  39. data/gemfiles/Gemfile.rails-4.2-stable +32 -0
  40. data/gemfiles/Gemfile.rails-4.2-stable.lock +192 -0
  41. data/gemfiles/Gemfile.rails-5.0-stable +33 -0
  42. data/gemfiles/Gemfile.rails-5.0-stable.lock +192 -0
  43. data/gemfiles/Gemfile.rails-5.2-rc1 +26 -0
  44. data/gemfiles/Gemfile.rails-5.2-rc1.lock +201 -0
  45. data/guides/bug_report_templates/integration_test.rb +106 -0
  46. data/lib/devise.rb +107 -84
  47. data/lib/devise/controllers/helpers.rb +111 -31
  48. data/lib/devise/controllers/rememberable.rb +15 -6
  49. data/lib/devise/controllers/scoped_views.rb +3 -1
  50. data/lib/devise/controllers/sign_in_out.rb +39 -26
  51. data/lib/devise/controllers/store_location.rb +31 -2
  52. data/lib/devise/controllers/url_helpers.rb +9 -7
  53. data/lib/devise/delegator.rb +2 -0
  54. data/lib/devise/encryptor.rb +24 -0
  55. data/lib/devise/failure_app.rb +98 -39
  56. data/lib/devise/hooks/activatable.rb +7 -6
  57. data/lib/devise/hooks/csrf_cleaner.rb +5 -1
  58. data/lib/devise/hooks/forgetable.rb +2 -0
  59. data/lib/devise/hooks/lockable.rb +7 -2
  60. data/lib/devise/hooks/proxy.rb +4 -2
  61. data/lib/devise/hooks/rememberable.rb +4 -2
  62. data/lib/devise/hooks/timeoutable.rb +16 -9
  63. data/lib/devise/hooks/trackable.rb +3 -1
  64. data/lib/devise/mailers/helpers.rb +15 -12
  65. data/lib/devise/mapping.rb +8 -2
  66. data/lib/devise/models.rb +3 -1
  67. data/lib/devise/models/authenticatable.rb +63 -36
  68. data/lib/devise/models/confirmable.rb +121 -41
  69. data/lib/devise/models/database_authenticatable.rb +66 -23
  70. data/lib/devise/models/lockable.rb +30 -17
  71. data/lib/devise/models/omniauthable.rb +3 -1
  72. data/lib/devise/models/recoverable.rb +62 -26
  73. data/lib/devise/models/registerable.rb +2 -0
  74. data/lib/devise/models/rememberable.rb +62 -33
  75. data/lib/devise/models/timeoutable.rb +4 -8
  76. data/lib/devise/models/trackable.rb +12 -3
  77. data/lib/devise/models/validatable.rb +16 -9
  78. data/lib/devise/modules.rb +12 -10
  79. data/lib/devise/omniauth.rb +2 -0
  80. data/lib/devise/omniauth/config.rb +2 -0
  81. data/lib/devise/omniauth/url_helpers.rb +14 -5
  82. data/lib/devise/orm/active_record.rb +5 -1
  83. data/lib/devise/orm/mongoid.rb +6 -2
  84. data/lib/devise/parameter_filter.rb +2 -0
  85. data/lib/devise/parameter_sanitizer.rb +131 -69
  86. data/lib/devise/rails.rb +10 -13
  87. data/lib/devise/rails/routes.rb +147 -116
  88. data/lib/devise/rails/warden_compat.rb +3 -10
  89. data/lib/devise/secret_key_finder.rb +25 -0
  90. data/lib/devise/strategies/authenticatable.rb +20 -9
  91. data/lib/devise/strategies/base.rb +3 -1
  92. data/lib/devise/strategies/database_authenticatable.rb +8 -5
  93. data/lib/devise/strategies/rememberable.rb +15 -3
  94. data/lib/devise/test/controller_helpers.rb +165 -0
  95. data/lib/devise/test/integration_helpers.rb +63 -0
  96. data/lib/devise/test_helpers.rb +7 -124
  97. data/lib/devise/time_inflector.rb +4 -2
  98. data/lib/devise/token_generator.rb +3 -41
  99. data/lib/devise/version.rb +3 -1
  100. data/lib/generators/active_record/devise_generator.rb +47 -10
  101. data/lib/generators/active_record/templates/migration.rb +9 -7
  102. data/lib/generators/active_record/templates/migration_existing.rb +9 -7
  103. data/lib/generators/devise/controllers_generator.rb +46 -0
  104. data/lib/generators/devise/devise_generator.rb +9 -5
  105. data/lib/generators/devise/install_generator.rb +22 -0
  106. data/lib/generators/devise/orm_helpers.rb +8 -19
  107. data/lib/generators/devise/views_generator.rb +51 -28
  108. data/lib/generators/mongoid/devise_generator.rb +22 -19
  109. data/lib/generators/templates/README +5 -12
  110. data/lib/generators/templates/controllers/README +14 -0
  111. data/lib/generators/templates/controllers/confirmations_controller.rb +30 -0
  112. data/lib/generators/templates/controllers/omniauth_callbacks_controller.rb +30 -0
  113. data/lib/generators/templates/controllers/passwords_controller.rb +34 -0
  114. data/lib/generators/templates/controllers/registrations_controller.rb +62 -0
  115. data/lib/generators/templates/controllers/sessions_controller.rb +27 -0
  116. data/lib/generators/templates/controllers/unlocks_controller.rb +30 -0
  117. data/lib/generators/templates/devise.rb +64 -35
  118. data/lib/generators/templates/markerb/confirmation_instructions.markerb +1 -1
  119. data/lib/generators/templates/markerb/email_changed.markerb +7 -0
  120. data/lib/generators/templates/markerb/password_change.markerb +3 -0
  121. data/lib/generators/templates/markerb/reset_password_instructions.markerb +1 -1
  122. data/lib/generators/templates/markerb/unlock_instructions.markerb +1 -1
  123. data/lib/generators/templates/simple_form_for/confirmations/new.html.erb +2 -2
  124. data/lib/generators/templates/simple_form_for/passwords/edit.html.erb +4 -4
  125. data/lib/generators/templates/simple_form_for/passwords/new.html.erb +2 -2
  126. data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +6 -6
  127. data/lib/generators/templates/simple_form_for/registrations/new.html.erb +4 -4
  128. data/lib/generators/templates/simple_form_for/sessions/new.html.erb +6 -6
  129. data/lib/generators/templates/simple_form_for/unlocks/new.html.erb +2 -2
  130. data/test/controllers/custom_registrations_controller_test.rb +42 -0
  131. data/test/controllers/custom_strategy_test.rb +10 -6
  132. data/test/controllers/helper_methods_test.rb +24 -0
  133. data/test/controllers/helpers_test.rb +88 -40
  134. data/test/controllers/inherited_controller_i18n_messages_test.rb +53 -0
  135. data/test/controllers/internal_helpers_test.rb +31 -22
  136. data/test/controllers/load_hooks_controller_test.rb +21 -0
  137. data/test/controllers/passwords_controller_test.rb +8 -5
  138. data/test/controllers/sessions_controller_test.rb +42 -33
  139. data/test/controllers/url_helpers_test.rb +13 -5
  140. data/test/delegator_test.rb +3 -1
  141. data/test/devise_test.rb +34 -19
  142. data/test/failure_app_test.rb +150 -42
  143. data/test/generators/active_record_generator_test.rb +58 -31
  144. data/test/generators/controllers_generator_test.rb +50 -0
  145. data/test/generators/devise_generator_test.rb +4 -2
  146. data/test/generators/install_generator_test.rb +16 -3
  147. data/test/generators/mongoid_generator_test.rb +5 -3
  148. data/test/generators/views_generator_test.rb +40 -2
  149. data/test/helpers/devise_helper_test.rb +20 -20
  150. data/test/integration/authenticatable_test.rb +134 -141
  151. data/test/integration/confirmable_test.rb +109 -67
  152. data/test/integration/database_authenticatable_test.rb +36 -23
  153. data/test/integration/http_authenticatable_test.rb +29 -20
  154. data/test/integration/lockable_test.rb +52 -49
  155. data/test/integration/mounted_engine_test.rb +38 -0
  156. data/test/integration/omniauthable_test.rb +30 -15
  157. data/test/integration/recoverable_test.rb +76 -61
  158. data/test/integration/registerable_test.rb +107 -91
  159. data/test/integration/rememberable_test.rb +82 -30
  160. data/test/integration/timeoutable_test.rb +48 -40
  161. data/test/integration/trackable_test.rb +15 -8
  162. data/test/mailers/confirmation_instructions_test.rb +16 -14
  163. data/test/mailers/email_changed_test.rb +132 -0
  164. data/test/mailers/mailer_test.rb +20 -0
  165. data/test/mailers/reset_password_instructions_test.rb +13 -11
  166. data/test/mailers/unlock_instructions_test.rb +12 -10
  167. data/test/mapping_test.rb +15 -6
  168. data/test/models/authenticatable_test.rb +15 -3
  169. data/test/models/confirmable_test.rb +190 -95
  170. data/test/models/database_authenticatable_test.rb +75 -41
  171. data/test/models/lockable_test.rb +115 -61
  172. data/test/models/omniauthable_test.rb +3 -1
  173. data/test/models/recoverable_test.rb +116 -37
  174. data/test/models/registerable_test.rb +3 -1
  175. data/test/models/rememberable_test.rb +95 -94
  176. data/test/models/serializable_test.rb +19 -8
  177. data/test/models/timeoutable_test.rb +10 -8
  178. data/test/models/trackable_test.rb +50 -1
  179. data/test/models/validatable_test.rb +24 -30
  180. data/test/models_test.rb +19 -8
  181. data/test/omniauth/config_test.rb +15 -11
  182. data/test/omniauth/url_helpers_test.rb +8 -9
  183. data/test/orm/active_record.rb +16 -2
  184. data/test/orm/mongoid.rb +4 -2
  185. data/test/parameter_sanitizer_test.rb +53 -57
  186. data/test/rails_app/app/active_record/admin.rb +2 -0
  187. data/test/rails_app/app/active_record/shim.rb +3 -1
  188. data/test/rails_app/app/active_record/user.rb +14 -0
  189. data/test/rails_app/app/active_record/user_on_engine.rb +9 -0
  190. data/test/rails_app/app/active_record/user_on_main_app.rb +9 -0
  191. data/test/rails_app/app/active_record/user_with_validations.rb +12 -0
  192. data/test/rails_app/app/active_record/user_without_email.rb +10 -0
  193. data/test/rails_app/app/controllers/admins/sessions_controller.rb +3 -1
  194. data/test/rails_app/app/controllers/admins_controller.rb +3 -6
  195. data/test/rails_app/app/controllers/application_controller.rb +7 -3
  196. data/test/rails_app/app/controllers/application_with_fake_engine.rb +32 -0
  197. data/test/rails_app/app/controllers/custom/registrations_controller.rb +33 -0
  198. data/test/rails_app/app/controllers/home_controller.rb +7 -1
  199. data/test/rails_app/app/controllers/publisher/registrations_controller.rb +3 -1
  200. data/test/rails_app/app/controllers/publisher/sessions_controller.rb +3 -1
  201. data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +7 -5
  202. data/test/rails_app/app/controllers/users_controller.rb +8 -6
  203. data/test/rails_app/app/helpers/application_helper.rb +2 -0
  204. data/test/rails_app/app/mailers/users/from_proc_mailer.rb +5 -0
  205. data/test/rails_app/app/mailers/users/mailer.rb +3 -10
  206. data/test/rails_app/app/mailers/users/reply_to_mailer.rb +6 -0
  207. data/test/rails_app/app/mongoid/admin.rb +13 -11
  208. data/test/rails_app/app/mongoid/shim.rb +4 -2
  209. data/test/rails_app/app/mongoid/user.rb +30 -19
  210. data/test/rails_app/app/mongoid/user_on_engine.rb +41 -0
  211. data/test/rails_app/app/mongoid/user_on_main_app.rb +41 -0
  212. data/test/rails_app/app/mongoid/user_with_validations.rb +37 -0
  213. data/test/rails_app/app/mongoid/user_without_email.rb +35 -0
  214. data/test/rails_app/app/views/admins/sessions/new.html.erb +1 -1
  215. data/test/rails_app/app/views/home/admin_dashboard.html.erb +1 -1
  216. data/test/rails_app/app/views/home/index.html.erb +1 -1
  217. data/test/rails_app/app/views/home/join.html.erb +1 -1
  218. data/test/rails_app/app/views/home/user_dashboard.html.erb +1 -1
  219. data/test/rails_app/app/views/layouts/application.html.erb +1 -1
  220. data/test/rails_app/config/application.rb +13 -5
  221. data/test/rails_app/config/boot.rb +17 -4
  222. data/test/rails_app/config/environment.rb +2 -0
  223. data/test/rails_app/config/environments/development.rb +2 -0
  224. data/test/rails_app/config/environments/production.rb +10 -2
  225. data/test/rails_app/config/environments/test.rb +14 -3
  226. data/test/rails_app/config/initializers/backtrace_silencers.rb +2 -0
  227. data/test/rails_app/config/initializers/devise.rb +22 -21
  228. data/test/rails_app/config/initializers/inflections.rb +2 -0
  229. data/test/rails_app/config/initializers/secret_token.rb +3 -6
  230. data/test/rails_app/config/initializers/session_store.rb +2 -0
  231. data/test/rails_app/config/routes.rb +67 -43
  232. data/test/rails_app/db/migrate/20100401102949_create_tables.rb +16 -10
  233. data/test/rails_app/db/schema.rb +2 -0
  234. data/test/rails_app/lib/shared_admin.rb +10 -4
  235. data/test/rails_app/lib/shared_user.rb +4 -1
  236. data/test/rails_app/lib/shared_user_without_email.rb +28 -0
  237. data/test/rails_app/lib/shared_user_without_omniauth.rb +15 -0
  238. data/test/rails_test.rb +11 -0
  239. data/test/routes_test.rb +92 -61
  240. data/test/secret_key_finder_test.rb +97 -0
  241. data/test/support/action_controller/record_identifier.rb +12 -0
  242. data/test/support/assertions.rb +4 -14
  243. data/test/support/helpers.rb +23 -10
  244. data/test/support/http_method_compatibility.rb +53 -0
  245. data/test/support/integration.rb +19 -16
  246. data/test/support/mongoid.yml +6 -0
  247. data/test/support/webrat/integrations/rails.rb +11 -0
  248. data/test/{test_helpers_test.rb → test/controller_helpers_test.rb} +60 -40
  249. data/test/test/integration_helpers_test.rb +34 -0
  250. data/test/test_helper.rb +9 -0
  251. data/test/test_models.rb +8 -6
  252. metadata +123 -53
  253. data/gemfiles/Gemfile.rails-3.2.x +0 -31
  254. data/gemfiles/Gemfile.rails-3.2.x.lock +0 -159
@@ -1,10 +1,24 @@
1
+ # frozen_string_literal: true
2
+
1
3
  ActiveRecord::Migration.verbose = false
2
4
  ActiveRecord::Base.logger = Logger.new(nil)
3
5
  ActiveRecord::Base.include_root_in_json = true
4
6
 
5
- ActiveRecord::Migrator.migrate(File.expand_path("../../rails_app/db/migrate/", __FILE__))
7
+ migrate_path = File.expand_path("../../rails_app/db/migrate/", __FILE__)
8
+ if Devise::Test.rails52?
9
+ ActiveRecord::MigrationContext.new(migrate_path).migrate
10
+ else
11
+ ActiveRecord::Migrator.migrate(migrate_path)
12
+ end
6
13
 
7
14
  class ActiveSupport::TestCase
8
- self.use_transactional_fixtures = true
15
+ if Devise::Test.rails5?
16
+ self.use_transactional_tests = true
17
+ else
18
+ # Let `after_commit` work with transactional fixtures, however this is not needed for Rails 5.
19
+ require 'test_after_commit'
20
+ self.use_transactional_fixtures = true
21
+ end
22
+
9
23
  self.use_instantiated_fixtures = false
10
24
  end
@@ -1,13 +1,15 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'mongoid/version'
2
4
 
3
5
  Mongoid.configure do |config|
4
- config.connect_to("devise-test-suite")
6
+ config.load!('test/support/mongoid.yml')
5
7
  config.use_utc = true
6
8
  config.include_root_in_json = true
7
9
  end
8
10
 
9
11
  class ActiveSupport::TestCase
10
12
  setup do
11
- Mongoid.purge!
13
+ Mongoid.default_session.drop
12
14
  end
13
15
  end
@@ -1,81 +1,77 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
  require 'devise/parameter_sanitizer'
3
5
 
4
- class BaseSanitizerTest < ActiveSupport::TestCase
6
+ class ParameterSanitizerTest < ActiveSupport::TestCase
5
7
  def sanitizer(params)
6
- Devise::BaseSanitizer.new(User, :user, params)
8
+ params = ActionController::Parameters.new(params)
9
+ Devise::ParameterSanitizer.new(User, :user, params)
7
10
  end
8
11
 
9
- test 'returns chosen params' do
10
- sanitizer = sanitizer(user: { "email" => "jose" })
11
- assert_equal({ "email" => "jose" }, sanitizer.sanitize(:sign_in))
12
+ test 'permits the default parameters for sign in' do
13
+ sanitizer = sanitizer('user' => { 'email' => 'jose' })
14
+ sanitized = sanitizer.sanitize(:sign_in)
15
+
16
+ assert_equal({ 'email' => 'jose' }, sanitized)
12
17
  end
13
- end
14
18
 
15
- if defined?(ActionController::StrongParameters)
16
- require 'active_model/forbidden_attributes_protection'
19
+ test 'permits the default parameters for sign up' do
20
+ sanitizer = sanitizer('user' => { 'email' => 'jose', 'role' => 'invalid' })
21
+ sanitized = sanitizer.sanitize(:sign_up)
17
22
 
18
- class ParameterSanitizerTest < ActiveSupport::TestCase
19
- def sanitizer(params)
20
- params = ActionController::Parameters.new(params)
21
- Devise::ParameterSanitizer.new(User, :user, params)
22
- end
23
+ assert_equal({ 'email' => 'jose' }, sanitized)
24
+ end
23
25
 
24
- test 'filters some parameters on sign in by default' do
25
- sanitizer = sanitizer(user: { "email" => "jose", "password" => "invalid", "remember_me" => "1" })
26
- assert_equal({ "email" => "jose", "password" => "invalid", "remember_me" => "1" }, sanitizer.sanitize(:sign_in))
27
- end
26
+ test 'permits the default parameters for account update' do
27
+ sanitizer = sanitizer('user' => { 'email' => 'jose', 'role' => 'invalid' })
28
+ sanitized = sanitizer.sanitize(:account_update)
28
29
 
29
- test 'handles auth keys as a hash' do
30
- swap Devise, :authentication_keys => {:email => true} do
31
- sanitizer = sanitizer(user: { "email" => "jose", "password" => "invalid" })
32
- assert_equal({ "email" => "jose", "password" => "invalid" }, sanitizer.sanitize(:sign_in))
33
- end
34
- end
30
+ assert_equal({ 'email' => 'jose' }, sanitized)
31
+ end
35
32
 
36
- test 'filters some parameters on sign up by default' do
37
- sanitizer = sanitizer(user: { "email" => "jose", "role" => "invalid" })
38
- assert_equal({ "email" => "jose" }, sanitizer.sanitize(:sign_up))
39
- end
33
+ test 'permits news parameters for an existing action' do
34
+ sanitizer = sanitizer('user' => { 'username' => 'jose' })
35
+ sanitizer.permit(:sign_in, keys: [:username])
36
+ sanitized = sanitizer.sanitize(:sign_in)
40
37
 
41
- test 'filters some parameters on account update by default' do
42
- sanitizer = sanitizer(user: { "email" => "jose", "role" => "invalid" })
43
- assert_equal({ "email" => "jose" }, sanitizer.sanitize(:account_update))
44
- end
38
+ assert_equal({ 'username' => 'jose' }, sanitized)
39
+ end
45
40
 
46
- test 'allows custom hooks' do
47
- sanitizer = sanitizer(user: { "email" => "jose", "password" => "invalid" })
48
- sanitizer.for(:sign_in) { |user| user.permit(:email, :password) }
49
- assert_equal({ "email" => "jose", "password" => "invalid" }, sanitizer.sanitize(:sign_in))
41
+ test 'permits news parameters for an existing action with a block' do
42
+ sanitizer = sanitizer('user' => { 'username' => 'jose' })
43
+ sanitizer.permit(:sign_in) do |user|
44
+ user.permit(:username)
50
45
  end
51
46
 
52
- test 'adding multiple permitted parameters' do
53
- sanitizer = sanitizer(user: { "email" => "jose", "username" => "jose1", "role" => "valid" })
54
- sanitizer.for(:sign_in).concat([:username, :role])
55
- assert_equal({ "email" => "jose", "username" => "jose1", "role" => "valid" }, sanitizer.sanitize(:sign_in))
56
- end
47
+ sanitized = sanitizer.sanitize(:sign_in)
57
48
 
58
- test 'removing multiple default parameters' do
59
- sanitizer = sanitizer(user: { "email" => "jose", "password" => "invalid", "remember_me" => "1" })
60
- sanitizer.for(:sign_in).delete(:email)
61
- sanitizer.for(:sign_in).delete(:password)
62
- assert_equal({ "remember_me" => "1" }, sanitizer.sanitize(:sign_in))
63
- end
49
+ assert_equal({ 'username' => 'jose' }, sanitized)
50
+ end
64
51
 
65
- test 'raises on unknown hooks' do
66
- sanitizer = sanitizer(user: { "email" => "jose", "password" => "invalid" })
67
- assert_raise NotImplementedError do
68
- sanitizer.sanitize(:unknown)
69
- end
70
- end
52
+ test 'permit parameters for new actions' do
53
+ sanitizer = sanitizer('user' => { 'email' => 'jose@omglol', 'name' => 'Jose' })
54
+ sanitizer.permit(:invite_user, keys: [:email, :name])
55
+
56
+ sanitized = sanitizer.sanitize(:invite_user)
71
57
 
72
- test 'passes parameters to filter as arguments to sanitizer' do
73
- params = {user: stub}
74
- sanitizer = Devise::ParameterSanitizer.new(User, :user, params)
58
+ assert_equal({ 'email' => 'jose@omglol', 'name' => 'Jose' }, sanitized)
59
+ end
75
60
 
76
- params[:user].expects(:permit).with(kind_of(Symbol), kind_of(Symbol), kind_of(Symbol))
61
+ test 'fails when we do not have any permitted parameters for the action' do
62
+ sanitizer = sanitizer('user' => { 'email' => 'jose', 'password' => 'invalid' })
77
63
 
78
- sanitizer.sanitize(:sign_in)
64
+ assert_raise NotImplementedError do
65
+ sanitizer.sanitize(:unknown)
79
66
  end
80
67
  end
68
+
69
+ test 'removes permitted parameters' do
70
+ sanitizer = sanitizer('user' => { 'email' => 'jose@omglol', 'username' => 'jose' })
71
+
72
+ sanitizer.permit(:sign_in, keys: [:username], except: [:email])
73
+ sanitized = sanitizer.sanitize(:sign_in)
74
+
75
+ assert_equal({ 'username' => 'jose' }, sanitized)
76
+ end
81
77
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'shared_admin'
2
4
 
3
5
  class Admin < ActiveRecord::Base
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  module Shim
2
- end
4
+ end
@@ -1,6 +1,20 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'shared_user'
2
4
 
3
5
  class User < ActiveRecord::Base
4
6
  include Shim
5
7
  include SharedUser
8
+ include ActiveModel::Serializers::Xml if Devise::Test.rails5?
9
+
10
+ validates :sign_in_count, presence: true
11
+
12
+ cattr_accessor :validations_performed
13
+
14
+ after_validation :after_validation_callback
15
+
16
+ def after_validation_callback
17
+ # used to check in our test if the validations were called
18
+ @@validations_performed = true
19
+ end
6
20
  end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'shared_user_without_omniauth'
4
+
5
+ class UserOnEngine < ActiveRecord::Base
6
+ self.table_name = 'users'
7
+ include Shim
8
+ include SharedUserWithoutOmniauth
9
+ end
@@ -0,0 +1,9 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'shared_user_without_omniauth'
4
+
5
+ class UserOnMainApp < ActiveRecord::Base
6
+ self.table_name = 'users'
7
+ include Shim
8
+ include SharedUserWithoutOmniauth
9
+ end
@@ -0,0 +1,12 @@
1
+ # frozen_string_literal: true
2
+
3
+ require 'shared_user'
4
+
5
+ class UserWithValidations < ActiveRecord::Base
6
+ self.table_name = 'users'
7
+ include Shim
8
+ include SharedUser
9
+
10
+ validates :email, presence: true
11
+ end
12
+
@@ -0,0 +1,10 @@
1
+ # frozen_string_literal: true
2
+
3
+ require "shared_user_without_email"
4
+
5
+ class UserWithoutEmail < ActiveRecord::Base
6
+ self.table_name = 'users'
7
+ include Shim
8
+ include SharedUserWithoutEmail
9
+ end
10
+
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Admins::SessionsController < Devise::SessionsController
2
4
  def new
3
5
  flash[:special] = "Welcome to #{controller_path.inspect} controller!"
4
6
  super
5
7
  end
6
- end
8
+ end
@@ -1,11 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class AdminsController < ApplicationController
2
- before_filter :authenticate_admin!
4
+ before_action :authenticate_admin!
3
5
 
4
6
  def index
5
7
  end
6
-
7
- def expire
8
- admin_session['last_request_at'] = 31.minutes.ago.utc
9
- render :text => 'Admin will be expired on next request'
10
- end
11
8
  end
@@ -1,9 +1,13 @@
1
+ # frozen_string_literal: true
2
+
1
3
  # Filters added to this controller apply to all controllers in the application.
2
4
  # Likewise, all the methods added will be available for all controllers.
3
5
 
4
6
  class ApplicationController < ActionController::Base
5
7
  protect_from_forgery
6
- before_filter :current_user, :unless => :devise_controller?
7
- before_filter :authenticate_user!, :if => :devise_controller?
8
- respond_to *Mime::SET.map(&:to_sym)
8
+ before_action :current_user, unless: :devise_controller?
9
+ before_action :authenticate_user!, if: :devise_controller?
10
+ respond_to(*Mime::SET.map(&:to_sym))
11
+
12
+ devise_group :commenter, contains: [:user, :admin]
9
13
  end
@@ -0,0 +1,32 @@
1
+ # frozen_string_literal: true
2
+
3
+ class ApplicationWithFakeEngine < ApplicationController
4
+ private
5
+
6
+ helper_method :fake_engine
7
+ def fake_engine
8
+ @fake_engine ||= FakeEngine.new
9
+ end
10
+ end
11
+
12
+ class FakeEngine
13
+ def user_on_engine_confirmation_path
14
+ '/user_on_engine/confirmation'
15
+ end
16
+
17
+ def new_user_on_engine_session_path
18
+ '/user_on_engine/confirmation/new'
19
+ end
20
+
21
+ def new_user_on_engine_registration_path
22
+ '/user_on_engine/registration/new'
23
+ end
24
+
25
+ def new_user_on_engine_password_path
26
+ '/user_on_engine/password/new'
27
+ end
28
+
29
+ def new_user_on_engine_unlock_path
30
+ '/user_on_engine/unlock/new'
31
+ end
32
+ end
@@ -0,0 +1,33 @@
1
+ # frozen_string_literal: true
2
+
3
+ class Custom::RegistrationsController < Devise::RegistrationsController
4
+ def new
5
+ super do |resource|
6
+ @new_block_called = true
7
+ end
8
+ end
9
+
10
+ def create
11
+ super do |resource|
12
+ @create_block_called = true
13
+ end
14
+ end
15
+
16
+ def update
17
+ super do |resource|
18
+ @update_block_called = true
19
+ end
20
+ end
21
+
22
+ def create_block_called?
23
+ @create_block_called == true
24
+ end
25
+
26
+ def update_block_called?
27
+ @update_block_called == true
28
+ end
29
+
30
+ def new_block_called?
31
+ @new_block_called == true
32
+ end
33
+ end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class HomeController < ApplicationController
2
4
  def index
3
5
  end
@@ -20,6 +22,10 @@ class HomeController < ApplicationController
20
22
  end
21
23
 
22
24
  def unauthenticated
23
- render :text => "unauthenticated", :status => :unauthorized
25
+ if Devise::Test.rails5?
26
+ render body: "unauthenticated", status: :unauthorized
27
+ else
28
+ render text: "unauthenticated", status: :unauthorized
29
+ end
24
30
  end
25
31
  end
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Publisher::RegistrationsController < ApplicationController
2
- end
4
+ end
@@ -1,2 +1,4 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Publisher::SessionsController < ApplicationController
2
- end
4
+ end
@@ -1,14 +1,16 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class Users::OmniauthCallbacksController < Devise::OmniauthCallbacksController
2
4
  def facebook
3
- data = env["omniauth.auth"]
5
+ data = request.respond_to?(:get_header) ? request.get_header("omniauth.auth") : request.env["omniauth.auth"]
4
6
  session["devise.facebook_data"] = data["extra"]["user_hash"]
5
- render :json => data
7
+ render json: data
6
8
  end
7
9
 
8
10
  def sign_in_facebook
9
- user = User.find_by_email('user@test.com')
11
+ user = User.to_adapter.find_first(email: 'user@test.com')
10
12
  user.remember_me = true
11
13
  sign_in user
12
- render :text => ""
14
+ render (Devise::Test.rails5? ? :body : :text) => ""
13
15
  end
14
- end
16
+ end
@@ -1,6 +1,8 @@
1
+ # frozen_string_literal: true
2
+
1
3
  class UsersController < ApplicationController
2
- prepend_before_filter :current_user, :only => :exhibit
3
- before_filter :authenticate_user!, :except => [:accept, :exhibit]
4
+ prepend_before_action :current_user, only: :exhibit
5
+ before_action :authenticate_user!, except: [:accept, :exhibit]
4
6
  respond_to :html, :xml
5
7
 
6
8
  def index
@@ -9,11 +11,11 @@ class UsersController < ApplicationController
9
11
  end
10
12
 
11
13
  def edit_form
12
- user_session['last_request_at'] = 31.minutes.ago.utc
14
+ user_session['last_request_at'] = params.fetch(:last_request_at, 31.minutes.ago.utc)
13
15
  end
14
16
 
15
17
  def update_form
16
- render :text => 'Update'
18
+ render (Devise::Test.rails5? ? :body : :text) => 'Update'
17
19
  end
18
20
 
19
21
  def accept
@@ -21,11 +23,11 @@ class UsersController < ApplicationController
21
23
  end
22
24
 
23
25
  def exhibit
24
- render :text => current_user ? "User is authenticated" : "User is not authenticated"
26
+ render (Devise::Test.rails5? ? :body : :text) => current_user ? "User is authenticated" : "User is not authenticated"
25
27
  end
26
28
 
27
29
  def expire
28
30
  user_session['last_request_at'] = 31.minutes.ago.utc
29
- render :text => 'User will be expired on next request'
31
+ render (Devise::Test.rails5? ? :body : :text) => 'User will be expired on next request'
30
32
  end
31
33
  end