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,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class SerializableTest < ActiveSupport::TestCase
@@ -11,13 +13,13 @@ class SerializableTest < ActiveSupport::TestCase
11
13
  end
12
14
 
13
15
  test 'should not include unsafe keys on XML even if a new except is provided' do
14
- assert_no_match(/email/, @user.to_xml(:except => :email))
15
- assert_no_match(/confirmation-token/, @user.to_xml(:except => :email))
16
+ assert_no_match(/email/, @user.to_xml(except: :email))
17
+ assert_no_match(/confirmation-token/, @user.to_xml(except: :email))
16
18
  end
17
19
 
18
20
  test 'should include unsafe keys on XML if a force_except is provided' do
19
- assert_no_match(/<email/, @user.to_xml(:force_except => :email))
20
- assert_match(/confirmation-token/, @user.to_xml(:force_except => :email))
21
+ assert_no_match(/<email/, @user.to_xml(force_except: :email))
22
+ assert_match(/confirmation-token/, @user.to_xml(force_except: :email))
21
23
  end
22
24
 
23
25
  test 'should not include unsafe keys on JSON' do
@@ -26,13 +28,22 @@ class SerializableTest < ActiveSupport::TestCase
26
28
  end
27
29
 
28
30
  test 'should not include unsafe keys on JSON even if a new except is provided' do
29
- assert_no_key "email", from_json(:except => :email)
30
- assert_no_key "confirmation_token", from_json(:except => :email)
31
+ assert_no_key "email", from_json(except: :email)
32
+ assert_no_key "confirmation_token", from_json(except: :email)
31
33
  end
32
34
 
33
35
  test 'should include unsafe keys on JSON if a force_except is provided' do
34
- assert_no_key "email", from_json(:force_except => :email)
35
- assert_key "confirmation_token", from_json(:force_except => :email)
36
+ assert_no_key "email", from_json(force_except: :email)
37
+ assert_key "confirmation_token", from_json(force_except: :email)
38
+ end
39
+
40
+ test 'should not include unsafe keys in inspect' do
41
+ assert_match(/email/, @user.inspect)
42
+ assert_no_match(/confirmation_token/, @user.inspect)
43
+ end
44
+
45
+ test 'should accept frozen options' do
46
+ assert_key "username", @user.as_json({only: :username}.freeze)["user"]
36
47
  end
37
48
 
38
49
  def assert_key(key, subject)
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class TimeoutableTest < ActiveSupport::TestCase
@@ -7,11 +9,11 @@ class TimeoutableTest < ActiveSupport::TestCase
7
9
  end
8
10
 
9
11
  test 'should not be expired' do
10
- assert_not new_user.timedout?(29.minutes.ago)
12
+ refute new_user.timedout?(29.minutes.ago)
11
13
  end
12
14
 
13
15
  test 'should not be expired when params is nil' do
14
- assert_not new_user.timedout?(nil)
16
+ refute new_user.timedout?(nil)
15
17
  end
16
18
 
17
19
  test 'should use timeout_in method' do
@@ -19,29 +21,29 @@ class TimeoutableTest < ActiveSupport::TestCase
19
21
  user.instance_eval { def timeout_in; 10.minutes end }
20
22
 
21
23
  assert user.timedout?(12.minutes.ago)
22
- assert_not user.timedout?(8.minutes.ago)
24
+ refute user.timedout?(8.minutes.ago)
23
25
  end
24
26
 
25
27
  test 'should not be expired when timeout_in method returns nil' do
26
28
  user = new_user
27
29
  user.instance_eval { def timeout_in; nil end }
28
- assert_not user.timedout?(10.hours.ago)
30
+ refute user.timedout?(10.hours.ago)
29
31
  end
30
32
 
31
33
  test 'fallback to Devise config option' do
32
- swap Devise, :timeout_in => 1.minute do
34
+ swap Devise, timeout_in: 1.minute do
33
35
  user = new_user
34
36
  assert user.timedout?(2.minutes.ago)
35
- assert_not user.timedout?(30.seconds.ago)
37
+ refute user.timedout?(30.seconds.ago)
36
38
 
37
39
  Devise.timeout_in = 5.minutes
38
- assert_not user.timedout?(2.minutes.ago)
40
+ refute user.timedout?(2.minutes.ago)
39
41
  assert user.timedout?(6.minutes.ago)
40
42
  end
41
43
  end
42
44
 
43
45
  test 'required_fields should contain the fields that Devise uses' do
44
- assert_same_content Devise::Models::Timeoutable.required_fields(User), []
46
+ assert_equal Devise::Models::Timeoutable.required_fields(User), []
45
47
  end
46
48
 
47
49
  test 'should not raise error if remember_created_at is not empty and rememberable is disabled' do
@@ -1,8 +1,10 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class TrackableTest < ActiveSupport::TestCase
4
6
  test 'required_fields should contain the fields that Devise uses' do
5
- assert_same_content Devise::Models::Trackable.required_fields(User), [
7
+ assert_equal Devise::Models::Trackable.required_fields(User), [
6
8
  :current_sign_in_at,
7
9
  :current_sign_in_ip,
8
10
  :last_sign_in_at,
@@ -10,4 +12,51 @@ class TrackableTest < ActiveSupport::TestCase
10
12
  :sign_in_count
11
13
  ]
12
14
  end
15
+
16
+ test 'update_tracked_fields should only set attributes but not save the record' do
17
+ user = create_user
18
+ request = mock
19
+ request.stubs(:remote_ip).returns("127.0.0.1")
20
+
21
+ assert_nil user.current_sign_in_ip
22
+ assert_nil user.last_sign_in_ip
23
+ assert_nil user.current_sign_in_at
24
+ assert_nil user.last_sign_in_at
25
+ assert_equal 0, user.sign_in_count
26
+
27
+ user.update_tracked_fields(request)
28
+
29
+ assert_equal "127.0.0.1", user.current_sign_in_ip
30
+ assert_equal "127.0.0.1", user.last_sign_in_ip
31
+ assert_not_nil user.current_sign_in_at
32
+ assert_not_nil user.last_sign_in_at
33
+ assert_equal 1, user.sign_in_count
34
+
35
+ user.reload
36
+
37
+ assert_nil user.current_sign_in_ip
38
+ assert_nil user.last_sign_in_ip
39
+ assert_nil user.current_sign_in_at
40
+ assert_nil user.last_sign_in_at
41
+ assert_equal 0, user.sign_in_count
42
+ end
43
+
44
+ test "update_tracked_fields! should not persist invalid records" do
45
+ user = UserWithValidations.new
46
+ request = mock
47
+ request.stubs(:remote_ip).returns("127.0.0.1")
48
+
49
+ assert_not user.update_tracked_fields!(request)
50
+ assert_not user.persisted?
51
+ end
52
+
53
+ test "update_tracked_fields! should not run model validations" do
54
+ user = User.new
55
+ request = mock
56
+ request.stubs(:remote_ip).returns("127.0.0.1")
57
+
58
+ user.expects(:after_validation_callback).never
59
+
60
+ assert_not user.update_tracked_fields!(request)
61
+ end
13
62
  end
@@ -1,9 +1,11 @@
1
1
  # encoding: UTF-8
2
+ # frozen_string_literal: true
3
+
2
4
  require 'test_helper'
3
5
 
4
6
  class ValidatableTest < ActiveSupport::TestCase
5
7
  test 'should require email to be set' do
6
- user = new_user(:email => nil)
8
+ user = new_user(email: nil)
7
9
  assert user.invalid?
8
10
  assert user.errors[:email]
9
11
  assert_equal 'can\'t be blank', user.errors[:email].join
@@ -12,7 +14,7 @@ class ValidatableTest < ActiveSupport::TestCase
12
14
  test 'should require uniqueness of email if email has changed, allowing blank' do
13
15
  existing_user = create_user
14
16
 
15
- user = new_user(:email => '')
17
+ user = new_user(email: '')
16
18
  assert user.invalid?
17
19
  assert_no_match(/taken/, user.errors[:email].join)
18
20
 
@@ -20,48 +22,44 @@ class ValidatableTest < ActiveSupport::TestCase
20
22
  assert user.invalid?
21
23
  assert_match(/taken/, user.errors[:email].join)
22
24
 
23
- user.save(:validate => false)
25
+ user.save(validate: false)
24
26
  assert user.valid?
25
27
  end
26
28
 
27
29
  test 'should require correct email format if email has changed, allowing blank' do
28
- user = new_user(:email => '')
30
+ user = new_user(email: '')
29
31
  assert user.invalid?
30
32
  assert_not_equal 'is invalid', user.errors[:email].join
31
33
 
32
- %w{invalid_email_format 123 $$$ () ☃ bla@bla.}.each do |email|
34
+ %w{invalid_email_format 123 $$$ () ☃}.each do |email|
33
35
  user.email = email
34
- assert user.invalid?, 'should be invalid with email ' << email
36
+ assert user.invalid?, "should be invalid with email #{email}"
35
37
  assert_equal 'is invalid', user.errors[:email].join
36
38
  end
37
39
 
38
- user.save(:validate => false)
40
+ user.save(validate: false)
39
41
  assert user.valid?
40
42
  end
41
43
 
42
44
  test 'should accept valid emails' do
43
45
  %w(a.b.c@example.com test_mail@gmail.com any@any.net email@test.br 123@mail.test 1☃3@mail.test).each do |email|
44
- user = new_user(:email => email)
45
- assert user.valid?, 'should be valid with email ' << email
46
+ user = new_user(email: email)
47
+ assert user.valid?, "should be valid with email #{email}"
46
48
  assert_blank user.errors[:email]
47
49
  end
48
50
  end
49
51
 
50
52
  test 'should require password to be set when creating a new record' do
51
- user = new_user(:password => '', :password_confirmation => '')
53
+ user = new_user(password: '', password_confirmation: '')
52
54
  assert user.invalid?
53
55
  assert_equal 'can\'t be blank', user.errors[:password].join
54
56
  end
55
57
 
56
58
  test 'should require confirmation to be set when creating a new record' do
57
- user = new_user(:password => 'new_password', :password_confirmation => 'blabla')
59
+ user = new_user(password: 'new_password', password_confirmation: 'blabla')
58
60
  assert user.invalid?
59
61
 
60
- if Devise.rails4?
61
- assert_equal 'doesn\'t match Password', user.errors[:password_confirmation].join
62
- else
63
- assert_equal 'doesn\'t match confirmation', user.errors[:password].join
64
- end
62
+ assert_equal 'doesn\'t match Password', user.errors[:password_confirmation].join
65
63
  end
66
64
 
67
65
  test 'should require password when updating/resetting password' do
@@ -79,23 +77,19 @@ class ValidatableTest < ActiveSupport::TestCase
79
77
  user.password_confirmation = 'another_password'
80
78
  assert user.invalid?
81
79
 
82
- if Devise.rails4?
83
- assert_equal 'doesn\'t match Password', user.errors[:password_confirmation].join
84
- else
85
- assert_equal 'doesn\'t match confirmation', user.errors[:password].join
86
- end
80
+ assert_equal 'doesn\'t match Password', user.errors[:password_confirmation].join
87
81
  end
88
82
 
89
- test 'should require a password with minimum of 6 characters' do
90
- user = new_user(:password => '12345', :password_confirmation => '12345')
83
+ test 'should require a password with minimum of 7 characters' do
84
+ user = new_user(password: '12345', password_confirmation: '12345')
91
85
  assert user.invalid?
92
- assert_equal 'is too short (minimum is 6 characters)', user.errors[:password].join
86
+ assert_equal 'is too short (minimum is 7 characters)', user.errors[:password].join
93
87
  end
94
88
 
95
- test 'should require a password with maximum of 128 characters long' do
96
- user = new_user(:password => 'x'*129, :password_confirmation => 'x'*129)
89
+ test 'should require a password with maximum of 72 characters long' do
90
+ user = new_user(password: 'x'*73, password_confirmation: 'x'*73)
97
91
  assert user.invalid?
98
- assert_equal 'is too long (maximum is 128 characters)', user.errors[:password].join
92
+ assert_equal 'is too long (maximum is 72 characters)', user.errors[:password].join
99
93
  end
100
94
 
101
95
  test 'should not require password length when it\'s not changed' do
@@ -105,14 +99,14 @@ class ValidatableTest < ActiveSupport::TestCase
105
99
 
106
100
  user.password_confirmation = 'confirmation'
107
101
  assert user.invalid?
108
- assert_not (user.errors[:password].join =~ /is too long/)
102
+ refute (user.errors[:password].join =~ /is too long/)
109
103
  end
110
104
 
111
105
  test 'should complain about length even if password is not required' do
112
- user = new_user(:password => 'x'*129, :password_confirmation => 'x'*129)
106
+ user = new_user(password: 'x'*73, password_confirmation: 'x'*73)
113
107
  user.stubs(:password_required?).returns(false)
114
108
  assert user.invalid?
115
- assert_equal 'is too long (maximum is 128 characters)', user.errors[:password].join
109
+ assert_equal 'is too long (maximum is 72 characters)', user.errors[:password].join
116
110
  end
117
111
 
118
112
  test 'should not be included in objects with invalid API' do
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
  require 'test_models'
3
5
 
@@ -13,7 +15,7 @@ class ActiveRecordTest < ActiveSupport::TestCase
13
15
  end
14
16
 
15
17
  (Devise::ALL - modules).each do |mod|
16
- assert_not include_module?(klass, mod)
18
+ refute include_module?(klass, mod)
17
19
  end
18
20
  end
19
21
 
@@ -92,20 +94,27 @@ class ActiveRecordTest < ActiveSupport::TestCase
92
94
  end
93
95
  end
94
96
 
97
+ module StubModelFilters
98
+ def stub_filter(name)
99
+ define_singleton_method(name) { |*| nil }
100
+ end
101
+ end
102
+
95
103
  class CheckFieldsTest < ActiveSupport::TestCase
96
104
  test 'checks if the class respond_to the required fields' do
97
105
  Player = Class.new do
98
106
  extend Devise::Models
107
+ extend StubModelFilters
99
108
 
100
- def self.before_validation(instance)
101
- end
109
+ stub_filter :before_validation
110
+ stub_filter :after_update
102
111
 
103
112
  devise :database_authenticatable
104
113
 
105
114
  attr_accessor :encrypted_password, :email
106
115
  end
107
116
 
108
- assert_nothing_raised Devise::Models::MissingAttribute do
117
+ assert_nothing_raised do
109
118
  Devise::Models.check_fields!(Player)
110
119
  end
111
120
  end
@@ -113,9 +122,10 @@ class CheckFieldsTest < ActiveSupport::TestCase
113
122
  test 'raises Devise::Models::MissingAtrribute and shows the missing attribute if the class doesn\'t respond_to one of the attributes' do
114
123
  Clown = Class.new do
115
124
  extend Devise::Models
125
+ extend StubModelFilters
116
126
 
117
- def self.before_validation(instance)
118
- end
127
+ stub_filter :before_validation
128
+ stub_filter :after_update
119
129
 
120
130
  devise :database_authenticatable
121
131
 
@@ -130,9 +140,10 @@ class CheckFieldsTest < ActiveSupport::TestCase
130
140
  test 'raises Devise::Models::MissingAtrribute with all the missing attributes if there is more than one' do
131
141
  Magician = Class.new do
132
142
  extend Devise::Models
143
+ extend StubModelFilters
133
144
 
134
- def self.before_validation(instance)
135
- end
145
+ stub_filter :before_validation
146
+ stub_filter :after_update
136
147
 
137
148
  devise :database_authenticatable
138
149
  end
@@ -1,3 +1,5 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class OmniAuthConfigTest < ActiveSupport::TestCase
@@ -11,12 +13,12 @@ class OmniAuthConfigTest < ActiveSupport::TestCase
11
13
  end
12
14
 
13
15
  test 'strategy_name returns provider if no name option are given' do
14
- config = Devise::OmniAuth::Config.new :facebook, [{ :other => :option }]
16
+ config = Devise::OmniAuth::Config.new :facebook, [{ other: :option }]
15
17
  assert_equal :facebook, config.strategy_name
16
18
  end
17
19
 
18
20
  test 'returns name option when have a name' do
19
- config = Devise::OmniAuth::Config.new :facebook, [{ :name => :github }]
21
+ config = Devise::OmniAuth::Config.new :facebook, [{ name: :github }]
20
22
  assert_equal :github, config.strategy_name
21
23
  end
22
24
 
@@ -25,19 +27,21 @@ class OmniAuthConfigTest < ActiveSupport::TestCase
25
27
  assert_equal OmniAuth::Strategies::Facebook, config.strategy_class
26
28
  end
27
29
 
28
- test "finds the strategy in OmniAuth's list by name" do
29
- NamedTestStrategy = Class.new
30
- NamedTestStrategy.send :include, OmniAuth::Strategy
31
- NamedTestStrategy.option :name, :the_one
30
+ class NamedTestStrategy
31
+ include OmniAuth::Strategy
32
+ option :name, :the_one
33
+ end
32
34
 
35
+ test "finds the strategy in OmniAuth's list by name" do
33
36
  config = Devise::OmniAuth::Config.new :the_one, [{}]
34
37
  assert_equal NamedTestStrategy, config.strategy_class
35
38
  end
36
39
 
37
- test "finds the strategy in OmniAuth's list by class name" do
38
- UnNamedTestStrategy = Class.new
39
- UnNamedTestStrategy.send :include, OmniAuth::Strategy
40
+ class UnNamedTestStrategy
41
+ include OmniAuth::Strategy
42
+ end
40
43
 
44
+ test "finds the strategy in OmniAuth's list by class name" do
41
45
  config = Devise::OmniAuth::Config.new :un_named_test_strategy, [{}]
42
46
  assert_equal UnNamedTestStrategy, config.strategy_class
43
47
  end
@@ -50,8 +54,8 @@ class OmniAuthConfigTest < ActiveSupport::TestCase
50
54
  end
51
55
 
52
56
  test 'allows the user to define a custom require path' do
53
- config = Devise::OmniAuth::Config.new :my_strategy, [{:strategy_class => MyStrategy}]
57
+ config = Devise::OmniAuth::Config.new :my_strategy, [{strategy_class: MyStrategy}]
54
58
  config_class = config.strategy_class
55
59
  assert_equal MyStrategy, config_class
56
60
  end
57
- end
61
+ end
@@ -1,24 +1,23 @@
1
+ # frozen_string_literal: true
2
+
1
3
  require 'test_helper'
2
4
 
3
5
  class OmniAuthRoutesTest < ActionController::TestCase
4
- ExpectedUrlGeneratiorError = Devise.rails4? ?
5
- ActionController::UrlGenerationError : ActionController::RoutingError
6
-
7
6
  tests ApplicationController
8
7
 
9
8
  def assert_path(action, provider, with_param=true)
10
9
  # Resource param
11
10
  assert_equal @controller.send(action, :user, provider),
12
- @controller.send("user_#{action}", provider)
11
+ @controller.send("user_#{provider}_#{action}")
13
12
 
14
13
  # With an object
15
14
  assert_equal @controller.send(action, User.new, provider),
16
- @controller.send("user_#{action}", provider)
15
+ @controller.send("user_#{provider}_#{action}")
17
16
 
18
17
  if with_param
19
18
  # Default url params
20
- assert_equal @controller.send(action, :user, provider, :param => 123),
21
- @controller.send("user_#{action}", provider, :param => 123)
19
+ assert_equal @controller.send(action, :user, provider, param: 123),
20
+ @controller.send("user_#{provider}_#{action}", param: 123)
22
21
  end
23
22
  end
24
23
 
@@ -33,7 +32,7 @@ class OmniAuthRoutesTest < ActionController::TestCase
33
32
  test 'should generate authorization path' do
34
33
  assert_match "/users/auth/facebook", @controller.omniauth_authorize_path(:user, :facebook)
35
34
 
36
- assert_raise ExpectedUrlGeneratiorError do
35
+ assert_raise NoMethodError do
37
36
  @controller.omniauth_authorize_path(:user, :github)
38
37
  end
39
38
  end
@@ -44,7 +43,7 @@ class OmniAuthRoutesTest < ActionController::TestCase
44
43
 
45
44
  test 'should generate authorization path with params' do
46
45
  assert_match "/users/auth/openid?openid_url=http%3A%2F%2Fyahoo.com",
47
- @controller.omniauth_authorize_path(:user, :openid, :openid_url => "http://yahoo.com")
46
+ @controller.omniauth_authorize_path(:user, :openid, openid_url: "http://yahoo.com")
48
47
  end
49
48
 
50
49
  test 'should not add a "?" if no param was sent' do