devise 3.5.10 → 4.6.0

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 (257) hide show
  1. checksums.yaml +4 -4
  2. data/CHANGELOG.md +240 -1147
  3. data/MIT-LICENSE +1 -1
  4. data/README.md +240 -65
  5. data/app/controllers/devise/confirmations_controller.rb +3 -1
  6. data/app/controllers/devise/omniauth_callbacks_controller.rb +8 -6
  7. data/app/controllers/devise/passwords_controller.rb +7 -4
  8. data/app/controllers/devise/registrations_controller.rb +39 -18
  9. data/app/controllers/devise/sessions_controller.rb +9 -7
  10. data/app/controllers/devise/unlocks_controller.rb +4 -2
  11. data/app/controllers/devise_controller.rb +23 -10
  12. data/app/helpers/devise_helper.rb +12 -19
  13. data/app/mailers/devise/mailer.rb +6 -0
  14. data/app/views/devise/confirmations/new.html.erb +2 -2
  15. data/app/views/devise/mailer/email_changed.html.erb +7 -0
  16. data/app/views/devise/passwords/edit.html.erb +2 -2
  17. data/app/views/devise/passwords/new.html.erb +2 -2
  18. data/app/views/devise/registrations/edit.html.erb +9 -5
  19. data/app/views/devise/registrations/new.html.erb +4 -4
  20. data/app/views/devise/sessions/new.html.erb +4 -4
  21. data/app/views/devise/shared/_error_messages.html.erb +15 -0
  22. data/app/views/devise/shared/_links.html.erb +7 -7
  23. data/app/views/devise/unlocks/new.html.erb +2 -2
  24. data/config/locales/en.yml +3 -0
  25. data/lib/devise/controllers/helpers.rb +23 -20
  26. data/lib/devise/controllers/rememberable.rb +3 -1
  27. data/lib/devise/controllers/scoped_views.rb +2 -0
  28. data/lib/devise/controllers/sign_in_out.rb +34 -11
  29. data/lib/devise/controllers/store_location.rb +25 -7
  30. data/lib/devise/controllers/url_helpers.rb +2 -0
  31. data/lib/devise/delegator.rb +2 -0
  32. data/lib/devise/encryptor.rb +6 -4
  33. data/lib/devise/failure_app.rb +81 -37
  34. data/lib/devise/hooks/activatable.rb +2 -0
  35. data/lib/devise/hooks/csrf_cleaner.rb +2 -0
  36. data/lib/devise/hooks/forgetable.rb +2 -0
  37. data/lib/devise/hooks/lockable.rb +6 -1
  38. data/lib/devise/hooks/proxy.rb +3 -1
  39. data/lib/devise/hooks/rememberable.rb +2 -0
  40. data/lib/devise/hooks/timeoutable.rb +2 -0
  41. data/lib/devise/hooks/trackable.rb +2 -0
  42. data/lib/devise/mailers/helpers.rb +7 -4
  43. data/lib/devise/mapping.rb +2 -0
  44. data/lib/devise/models/authenticatable.rb +51 -25
  45. data/lib/devise/models/confirmable.rb +76 -27
  46. data/lib/devise/models/database_authenticatable.rb +91 -23
  47. data/lib/devise/models/lockable.rb +10 -4
  48. data/lib/devise/models/omniauthable.rb +2 -0
  49. data/lib/devise/models/recoverable.rb +31 -19
  50. data/lib/devise/models/registerable.rb +4 -0
  51. data/lib/devise/models/rememberable.rb +5 -10
  52. data/lib/devise/models/timeoutable.rb +2 -0
  53. data/lib/devise/models/trackable.rb +15 -1
  54. data/lib/devise/models/validatable.rb +10 -3
  55. data/lib/devise/models.rb +3 -1
  56. data/lib/devise/modules.rb +2 -0
  57. data/lib/devise/omniauth/config.rb +2 -0
  58. data/lib/devise/omniauth/url_helpers.rb +14 -5
  59. data/lib/devise/omniauth.rb +2 -0
  60. data/lib/devise/orm/active_record.rb +5 -1
  61. data/lib/devise/orm/mongoid.rb +6 -2
  62. data/lib/devise/parameter_filter.rb +4 -0
  63. data/lib/devise/parameter_sanitizer.rb +139 -65
  64. data/lib/devise/rails/routes.rb +42 -31
  65. data/lib/devise/rails/warden_compat.rb +3 -10
  66. data/lib/devise/rails.rb +7 -16
  67. data/lib/devise/secret_key_finder.rb +27 -0
  68. data/lib/devise/strategies/authenticatable.rb +2 -0
  69. data/lib/devise/strategies/base.rb +2 -0
  70. data/lib/devise/strategies/database_authenticatable.rb +11 -4
  71. data/lib/devise/strategies/rememberable.rb +2 -0
  72. data/lib/devise/test/controller_helpers.rb +165 -0
  73. data/lib/devise/test/integration_helpers.rb +63 -0
  74. data/lib/devise/test_helpers.rb +7 -124
  75. data/lib/devise/time_inflector.rb +2 -0
  76. data/lib/devise/token_generator.rb +3 -41
  77. data/lib/devise/version.rb +3 -1
  78. data/lib/devise.rb +61 -40
  79. data/lib/generators/active_record/devise_generator.rb +29 -10
  80. data/lib/generators/active_record/templates/migration.rb +4 -2
  81. data/lib/generators/active_record/templates/migration_existing.rb +4 -2
  82. data/lib/generators/devise/controllers_generator.rb +3 -1
  83. data/lib/generators/devise/devise_generator.rb +4 -2
  84. data/lib/generators/devise/install_generator.rb +17 -0
  85. data/lib/generators/devise/orm_helpers.rb +10 -21
  86. data/lib/generators/devise/views_generator.rb +7 -8
  87. data/lib/generators/mongoid/devise_generator.rb +7 -5
  88. data/lib/generators/templates/README +1 -8
  89. data/lib/generators/templates/controllers/confirmations_controller.rb +2 -0
  90. data/lib/generators/templates/controllers/omniauth_callbacks_controller.rb +2 -0
  91. data/lib/generators/templates/controllers/passwords_controller.rb +2 -0
  92. data/lib/generators/templates/controllers/registrations_controller.rb +6 -4
  93. data/lib/generators/templates/controllers/sessions_controller.rb +4 -2
  94. data/lib/generators/templates/controllers/unlocks_controller.rb +2 -0
  95. data/lib/generators/templates/devise.rb +50 -20
  96. data/lib/generators/templates/markerb/email_changed.markerb +7 -0
  97. data/lib/generators/templates/markerb/password_change.markerb +2 -2
  98. data/lib/generators/templates/simple_form_for/confirmations/new.html.erb +5 -1
  99. data/lib/generators/templates/simple_form_for/passwords/edit.html.erb +6 -1
  100. data/lib/generators/templates/simple_form_for/passwords/new.html.erb +4 -1
  101. data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +11 -3
  102. data/lib/generators/templates/simple_form_for/registrations/new.html.erb +11 -3
  103. data/lib/generators/templates/simple_form_for/sessions/new.html.erb +7 -2
  104. data/lib/generators/templates/simple_form_for/unlocks/new.html.erb +4 -1
  105. metadata +15 -307
  106. data/.gitignore +0 -10
  107. data/.travis.yml +0 -44
  108. data/.yardopts +0 -9
  109. data/CODE_OF_CONDUCT.md +0 -22
  110. data/CONTRIBUTING.md +0 -16
  111. data/Gemfile +0 -30
  112. data/Gemfile.lock +0 -187
  113. data/Rakefile +0 -36
  114. data/devise.gemspec +0 -27
  115. data/devise.png +0 -0
  116. data/gemfiles/Gemfile.rails-3.2-stable +0 -29
  117. data/gemfiles/Gemfile.rails-3.2-stable.lock +0 -172
  118. data/gemfiles/Gemfile.rails-4.0-stable +0 -30
  119. data/gemfiles/Gemfile.rails-4.0-stable.lock +0 -166
  120. data/gemfiles/Gemfile.rails-4.1-stable +0 -30
  121. data/gemfiles/Gemfile.rails-4.1-stable.lock +0 -171
  122. data/gemfiles/Gemfile.rails-4.2-stable +0 -30
  123. data/gemfiles/Gemfile.rails-4.2-stable.lock +0 -193
  124. data/script/cached-bundle +0 -49
  125. data/script/s3-put +0 -71
  126. data/test/controllers/custom_registrations_controller_test.rb +0 -40
  127. data/test/controllers/custom_strategy_test.rb +0 -62
  128. data/test/controllers/helper_methods_test.rb +0 -21
  129. data/test/controllers/helpers_test.rb +0 -316
  130. data/test/controllers/inherited_controller_i18n_messages_test.rb +0 -51
  131. data/test/controllers/internal_helpers_test.rb +0 -129
  132. data/test/controllers/load_hooks_controller_test.rb +0 -19
  133. data/test/controllers/passwords_controller_test.rb +0 -31
  134. data/test/controllers/sessions_controller_test.rb +0 -103
  135. data/test/controllers/url_helpers_test.rb +0 -65
  136. data/test/delegator_test.rb +0 -19
  137. data/test/devise_test.rb +0 -107
  138. data/test/failure_app_test.rb +0 -315
  139. data/test/generators/active_record_generator_test.rb +0 -109
  140. data/test/generators/controllers_generator_test.rb +0 -48
  141. data/test/generators/devise_generator_test.rb +0 -39
  142. data/test/generators/install_generator_test.rb +0 -13
  143. data/test/generators/mongoid_generator_test.rb +0 -23
  144. data/test/generators/views_generator_test.rb +0 -103
  145. data/test/helpers/devise_helper_test.rb +0 -49
  146. data/test/integration/authenticatable_test.rb +0 -729
  147. data/test/integration/confirmable_test.rb +0 -324
  148. data/test/integration/database_authenticatable_test.rb +0 -95
  149. data/test/integration/http_authenticatable_test.rb +0 -105
  150. data/test/integration/lockable_test.rb +0 -239
  151. data/test/integration/omniauthable_test.rb +0 -135
  152. data/test/integration/recoverable_test.rb +0 -347
  153. data/test/integration/registerable_test.rb +0 -359
  154. data/test/integration/rememberable_test.rb +0 -214
  155. data/test/integration/timeoutable_test.rb +0 -184
  156. data/test/integration/trackable_test.rb +0 -92
  157. data/test/mailers/confirmation_instructions_test.rb +0 -115
  158. data/test/mailers/reset_password_instructions_test.rb +0 -96
  159. data/test/mailers/unlock_instructions_test.rb +0 -91
  160. data/test/mapping_test.rb +0 -134
  161. data/test/models/authenticatable_test.rb +0 -23
  162. data/test/models/confirmable_test.rb +0 -511
  163. data/test/models/database_authenticatable_test.rb +0 -269
  164. data/test/models/lockable_test.rb +0 -350
  165. data/test/models/omniauthable_test.rb +0 -7
  166. data/test/models/recoverable_test.rb +0 -251
  167. data/test/models/registerable_test.rb +0 -7
  168. data/test/models/rememberable_test.rb +0 -169
  169. data/test/models/serializable_test.rb +0 -49
  170. data/test/models/timeoutable_test.rb +0 -51
  171. data/test/models/trackable_test.rb +0 -41
  172. data/test/models/validatable_test.rb +0 -127
  173. data/test/models_test.rb +0 -153
  174. data/test/omniauth/config_test.rb +0 -57
  175. data/test/omniauth/url_helpers_test.rb +0 -54
  176. data/test/orm/active_record.rb +0 -10
  177. data/test/orm/mongoid.rb +0 -13
  178. data/test/parameter_sanitizer_test.rb +0 -81
  179. data/test/rails_app/Rakefile +0 -6
  180. data/test/rails_app/app/active_record/admin.rb +0 -6
  181. data/test/rails_app/app/active_record/shim.rb +0 -2
  182. data/test/rails_app/app/active_record/user.rb +0 -6
  183. data/test/rails_app/app/active_record/user_on_engine.rb +0 -7
  184. data/test/rails_app/app/active_record/user_on_main_app.rb +0 -7
  185. data/test/rails_app/app/active_record/user_without_email.rb +0 -8
  186. data/test/rails_app/app/controllers/admins/sessions_controller.rb +0 -6
  187. data/test/rails_app/app/controllers/admins_controller.rb +0 -6
  188. data/test/rails_app/app/controllers/application_controller.rb +0 -12
  189. data/test/rails_app/app/controllers/application_with_fake_engine.rb +0 -30
  190. data/test/rails_app/app/controllers/custom/registrations_controller.rb +0 -31
  191. data/test/rails_app/app/controllers/home_controller.rb +0 -25
  192. data/test/rails_app/app/controllers/publisher/registrations_controller.rb +0 -2
  193. data/test/rails_app/app/controllers/publisher/sessions_controller.rb +0 -2
  194. data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +0 -14
  195. data/test/rails_app/app/controllers/users_controller.rb +0 -31
  196. data/test/rails_app/app/helpers/application_helper.rb +0 -3
  197. data/test/rails_app/app/mailers/users/from_proc_mailer.rb +0 -3
  198. data/test/rails_app/app/mailers/users/mailer.rb +0 -3
  199. data/test/rails_app/app/mailers/users/reply_to_mailer.rb +0 -4
  200. data/test/rails_app/app/mongoid/admin.rb +0 -29
  201. data/test/rails_app/app/mongoid/shim.rb +0 -23
  202. data/test/rails_app/app/mongoid/user.rb +0 -39
  203. data/test/rails_app/app/mongoid/user_on_engine.rb +0 -39
  204. data/test/rails_app/app/mongoid/user_on_main_app.rb +0 -39
  205. data/test/rails_app/app/mongoid/user_without_email.rb +0 -33
  206. data/test/rails_app/app/views/admins/index.html.erb +0 -1
  207. data/test/rails_app/app/views/admins/sessions/new.html.erb +0 -2
  208. data/test/rails_app/app/views/home/admin_dashboard.html.erb +0 -1
  209. data/test/rails_app/app/views/home/index.html.erb +0 -1
  210. data/test/rails_app/app/views/home/join.html.erb +0 -1
  211. data/test/rails_app/app/views/home/private.html.erb +0 -1
  212. data/test/rails_app/app/views/home/user_dashboard.html.erb +0 -1
  213. data/test/rails_app/app/views/layouts/application.html.erb +0 -24
  214. data/test/rails_app/app/views/users/edit_form.html.erb +0 -1
  215. data/test/rails_app/app/views/users/index.html.erb +0 -1
  216. data/test/rails_app/app/views/users/mailer/confirmation_instructions.erb +0 -1
  217. data/test/rails_app/app/views/users/sessions/new.html.erb +0 -1
  218. data/test/rails_app/bin/bundle +0 -3
  219. data/test/rails_app/bin/rails +0 -4
  220. data/test/rails_app/bin/rake +0 -4
  221. data/test/rails_app/config/application.rb +0 -40
  222. data/test/rails_app/config/boot.rb +0 -14
  223. data/test/rails_app/config/database.yml +0 -18
  224. data/test/rails_app/config/environment.rb +0 -5
  225. data/test/rails_app/config/environments/development.rb +0 -30
  226. data/test/rails_app/config/environments/production.rb +0 -84
  227. data/test/rails_app/config/environments/test.rb +0 -41
  228. data/test/rails_app/config/initializers/backtrace_silencers.rb +0 -7
  229. data/test/rails_app/config/initializers/devise.rb +0 -180
  230. data/test/rails_app/config/initializers/inflections.rb +0 -2
  231. data/test/rails_app/config/initializers/secret_token.rb +0 -8
  232. data/test/rails_app/config/initializers/session_store.rb +0 -1
  233. data/test/rails_app/config/routes.rb +0 -125
  234. data/test/rails_app/config.ru +0 -4
  235. data/test/rails_app/db/migrate/20100401102949_create_tables.rb +0 -71
  236. data/test/rails_app/db/schema.rb +0 -55
  237. data/test/rails_app/lib/shared_admin.rb +0 -17
  238. data/test/rails_app/lib/shared_user.rb +0 -29
  239. data/test/rails_app/lib/shared_user_without_email.rb +0 -26
  240. data/test/rails_app/lib/shared_user_without_omniauth.rb +0 -13
  241. data/test/rails_app/public/404.html +0 -26
  242. data/test/rails_app/public/422.html +0 -26
  243. data/test/rails_app/public/500.html +0 -26
  244. data/test/rails_app/public/favicon.ico +0 -0
  245. data/test/rails_test.rb +0 -9
  246. data/test/routes_test.rb +0 -264
  247. data/test/support/action_controller/record_identifier.rb +0 -10
  248. data/test/support/assertions.rb +0 -39
  249. data/test/support/helpers.rb +0 -77
  250. data/test/support/integration.rb +0 -92
  251. data/test/support/locale/en.yml +0 -8
  252. data/test/support/mongoid.yml +0 -6
  253. data/test/support/webrat/integrations/rails.rb +0 -24
  254. data/test/test_helper.rb +0 -34
  255. data/test/test_helpers_test.rb +0 -178
  256. data/test/test_models.rb +0 -33
  257. data/test/time_helpers.rb +0 -137
@@ -1,269 +0,0 @@
1
- require 'test_helper'
2
- require 'test_models'
3
- require 'digest/sha1'
4
-
5
- class DatabaseAuthenticatableTest < ActiveSupport::TestCase
6
- def setup
7
- setup_mailer
8
- end
9
-
10
- test 'should downcase case insensitive keys when saving' do
11
- # case_insensitive_keys is set to :email by default.
12
- email = 'Foo@Bar.com'
13
- user = new_user(email: email)
14
-
15
- assert_equal email, user.email
16
- user.save!
17
- assert_equal email.downcase, user.email
18
- end
19
-
20
- test 'should downcase case insensitive keys that refer to virtual attributes when saving' do
21
- email = 'Foo@Bar1.com'
22
- confirmation = 'Foo@Bar1.com'
23
- attributes = valid_attributes(email: email, email_confirmation: confirmation)
24
- user = UserWithVirtualAttributes.new(attributes)
25
-
26
- assert_equal confirmation, user.email_confirmation
27
- user.save!
28
- assert_equal confirmation.downcase, user.email_confirmation
29
- end
30
-
31
- test 'should not mutate value assigned to case insensitive key' do
32
- email = 'Foo@Bar.com'
33
- original_email = email.dup
34
- user = new_user(email: email)
35
-
36
- user.save!
37
- assert_equal original_email, email
38
- end
39
-
40
- test 'should remove whitespace from strip whitespace keys when saving' do
41
- # strip_whitespace_keys is set to :email by default.
42
- email = ' foo@bar.com '
43
- user = new_user(email: email)
44
-
45
- assert_equal email, user.email
46
- user.save!
47
- assert_equal email.strip, user.email
48
- end
49
-
50
- test 'should not mutate value assigned to string whitespace key' do
51
- email = ' foo@bar.com '
52
- original_email = email.dup
53
- user = new_user(email: email)
54
-
55
- user.save!
56
- assert_equal original_email, email
57
- end
58
-
59
- test "doesn't throw exception when globally configured strip_whitespace_keys are not present on a model" do
60
- swap Devise, strip_whitespace_keys: [:fake_key] do
61
- assert_nothing_raised { create_user }
62
- end
63
- end
64
-
65
- test "doesn't throw exception when globally configured case_insensitive_keys are not present on a model" do
66
- swap Devise, case_insensitive_keys: [:fake_key] do
67
- assert_nothing_raised { create_user }
68
- end
69
- end
70
-
71
- test "param filter should not convert booleans and integer to strings" do
72
- conditions = { "login" => "foo@bar.com", "bool1" => true, "bool2" => false, "fixnum" => 123, "will_be_converted" => (1..10) }
73
- conditions = Devise::ParameterFilter.new([], []).filter(conditions)
74
- assert_equal( { "login" => "foo@bar.com", "bool1" => "true", "bool2" => "false", "fixnum" => "123", "will_be_converted" => "1..10" }, conditions)
75
- end
76
-
77
- test 'param filter should filter case_insensitive_keys as insensitive' do
78
- conditions = {'insensitive' => 'insensitive_VAL', 'sensitive' => 'sensitive_VAL'}
79
- conditions = Devise::ParameterFilter.new(['insensitive'], []).filter(conditions)
80
- assert_equal( {'insensitive' => 'insensitive_val', 'sensitive' => 'sensitive_VAL'}, conditions )
81
- end
82
-
83
- test 'param filter should filter strip_whitespace_keys stripping whitespaces' do
84
- conditions = {'strip_whitespace' => ' strip_whitespace_val ', 'do_not_strip_whitespace' => ' do_not_strip_whitespace_val '}
85
- conditions = Devise::ParameterFilter.new([], ['strip_whitespace']).filter(conditions)
86
- assert_equal( {'strip_whitespace' => 'strip_whitespace_val', 'do_not_strip_whitespace' => ' do_not_strip_whitespace_val '}, conditions )
87
- end
88
-
89
- test 'should respond to password and password confirmation' do
90
- user = new_user
91
- assert user.respond_to?(:password)
92
- assert user.respond_to?(:password_confirmation)
93
- end
94
-
95
- test 'should generate encrypted password while setting password' do
96
- user = new_user
97
- assert_present user.encrypted_password
98
- end
99
-
100
- test 'should support custom encryption methods' do
101
- user = UserWithCustomEncryption.new(password: '654321')
102
- assert_equal user.encrypted_password, '123456'
103
- end
104
-
105
- test 'allow authenticatable_salt to work even with nil encrypted password' do
106
- user = User.new
107
- user.encrypted_password = nil
108
- assert_nil user.authenticatable_salt
109
- end
110
-
111
- test 'should not generate encrypted password if password is blank' do
112
- assert_blank new_user(password: nil).encrypted_password
113
- assert_blank new_user(password: '').encrypted_password
114
- end
115
-
116
- test 'should encrypt password again if password has changed' do
117
- user = create_user
118
- encrypted_password = user.encrypted_password
119
- user.password = user.password_confirmation = 'new_password'
120
- user.save!
121
- assert_not_equal encrypted_password, user.encrypted_password
122
- end
123
-
124
- test 'should test for a valid password' do
125
- user = create_user
126
- assert user.valid_password?('12345678')
127
- assert_not user.valid_password?('654321')
128
- end
129
-
130
- test 'should not raise error with an empty password' do
131
- user = create_user
132
- user.encrypted_password = ''
133
- assert_nothing_raised { user.valid_password?('12345678') }
134
- end
135
-
136
- test 'should be an invalid password if the user has an empty password' do
137
- user = create_user
138
- user.encrypted_password = ''
139
- assert_not user.valid_password?('654321')
140
- end
141
-
142
- test 'should respond to current password' do
143
- assert new_user.respond_to?(:current_password)
144
- end
145
-
146
- test 'should update password with valid current password' do
147
- user = create_user
148
- assert user.update_with_password(current_password: '12345678',
149
- password: 'pass4321', password_confirmation: 'pass4321')
150
- assert user.reload.valid_password?('pass4321')
151
- end
152
-
153
- test 'should add an error to current password when it is invalid' do
154
- user = create_user
155
- assert_not user.update_with_password(current_password: 'other',
156
- password: 'pass4321', password_confirmation: 'pass4321')
157
- assert user.reload.valid_password?('12345678')
158
- assert_match "is invalid", user.errors[:current_password].join
159
- end
160
-
161
- test 'should add an error to current password when it is blank' do
162
- user = create_user
163
- assert_not user.update_with_password(password: 'pass4321',
164
- password_confirmation: 'pass4321')
165
- assert user.reload.valid_password?('12345678')
166
- assert_match "can't be blank", user.errors[:current_password].join
167
- end
168
-
169
- test 'should run validations even when current password is invalid or blank' do
170
- user = UserWithValidation.create!(valid_attributes)
171
- user.save
172
- assert user.persisted?
173
- assert_not user.update_with_password(username: "")
174
- assert_match "usertest", user.reload.username
175
- assert_match "can't be blank", user.errors[:username].join
176
- end
177
-
178
- test 'should ignore password and its confirmation if they are blank' do
179
- user = create_user
180
- assert user.update_with_password(current_password: '12345678', email: "new@example.com")
181
- assert_equal "new@example.com", user.email
182
- end
183
-
184
- test 'should not update password with invalid confirmation' do
185
- user = create_user
186
- assert_not user.update_with_password(current_password: '12345678',
187
- password: 'pass4321', password_confirmation: 'other')
188
- assert user.reload.valid_password?('12345678')
189
- end
190
-
191
- test 'should clean up password fields on failure' do
192
- user = create_user
193
- assert_not user.update_with_password(current_password: '12345678',
194
- password: 'pass4321', password_confirmation: 'other')
195
- assert user.password.blank?
196
- assert user.password_confirmation.blank?
197
- end
198
-
199
- test 'should update the user without password' do
200
- user = create_user
201
- user.update_without_password(email: 'new@example.com')
202
- assert_equal 'new@example.com', user.email
203
- end
204
-
205
- test 'should not update password without password' do
206
- user = create_user
207
- user.update_without_password(password: 'pass4321', password_confirmation: 'pass4321')
208
- assert !user.reload.valid_password?('pass4321')
209
- assert user.valid_password?('12345678')
210
- end
211
-
212
- test 'should destroy user if current password is valid' do
213
- user = create_user
214
- assert user.destroy_with_password('12345678')
215
- assert !user.persisted?
216
- end
217
-
218
- test 'should not destroy user with invalid password' do
219
- user = create_user
220
- assert_not user.destroy_with_password('other')
221
- assert user.persisted?
222
- assert_match "is invalid", user.errors[:current_password].join
223
- end
224
-
225
- test 'should not destroy user with blank password' do
226
- user = create_user
227
- assert_not user.destroy_with_password(nil)
228
- assert user.persisted?
229
- assert_match "can't be blank", user.errors[:current_password].join
230
- end
231
-
232
- test 'should not email on password change' do
233
- user = create_user
234
- assert_email_not_sent do
235
- assert user.update_attributes(password: 'newpass', password_confirmation: 'newpass')
236
- end
237
- end
238
-
239
- test 'should email on password change when configured' do
240
- swap Devise, send_password_change_notification: true do
241
- user = create_user
242
- assert_email_sent user.email do
243
- assert user.update_attributes(password: 'newpass', password_confirmation: 'newpass')
244
- end
245
- end
246
- end
247
-
248
- test 'downcase_keys with validation' do
249
- User.create(email: "HEllO@example.com", password: "123456")
250
- user = User.create(email: "HEllO@example.com", password: "123456")
251
- assert !user.valid?
252
- end
253
-
254
- test 'required_fields should be encryptable_password and the email field by default' do
255
- assert_same_content Devise::Models::DatabaseAuthenticatable.required_fields(User), [
256
- :email,
257
- :encrypted_password
258
- ]
259
- end
260
-
261
- test 'required_fields should be encryptable_password and the login when the login is on authentication_keys' do
262
- swap Devise, authentication_keys: [:login] do
263
- assert_same_content Devise::Models::DatabaseAuthenticatable.required_fields(User), [
264
- :encrypted_password,
265
- :login
266
- ]
267
- end
268
- end
269
- end
@@ -1,350 +0,0 @@
1
- require 'test_helper'
2
-
3
- class LockableTest < ActiveSupport::TestCase
4
- def setup
5
- setup_mailer
6
- end
7
-
8
- test "should respect maximum attempts configuration" do
9
- user = create_user
10
- user.confirm
11
- swap Devise, maximum_attempts: 2 do
12
- 2.times { user.valid_for_authentication?{ false } }
13
- assert user.reload.access_locked?
14
- end
15
- end
16
-
17
- test "should increment failed_attempts on successful validation if the user is already locked" do
18
- user = create_user
19
- user.confirm
20
-
21
- swap Devise, maximum_attempts: 2 do
22
- 2.times { user.valid_for_authentication?{ false } }
23
- assert user.reload.access_locked?
24
- end
25
-
26
- user.valid_for_authentication?{ true }
27
- assert_equal 3, user.reload.failed_attempts
28
- end
29
-
30
- test "should not touch failed_attempts if lock_strategy is none" do
31
- user = create_user
32
- user.confirm
33
- swap Devise, lock_strategy: :none, maximum_attempts: 2 do
34
- 3.times { user.valid_for_authentication?{ false } }
35
- assert !user.access_locked?
36
- assert_equal 0, user.failed_attempts
37
- end
38
- end
39
-
40
- test 'should be valid for authentication with a unlocked user' do
41
- user = create_user
42
- user.lock_access!
43
- user.unlock_access!
44
- assert user.valid_for_authentication?{ true }
45
- end
46
-
47
- test "should verify whether a user is locked or not" do
48
- user = create_user
49
- assert_not user.access_locked?
50
- user.lock_access!
51
- assert user.access_locked?
52
- end
53
-
54
- test "active_for_authentication? should be the opposite of locked?" do
55
- user = create_user
56
- user.confirm
57
- assert user.active_for_authentication?
58
- user.lock_access!
59
- assert_not user.active_for_authentication?
60
- end
61
-
62
- test "should unlock a user by cleaning locked_at, failed_attempts and unlock_token" do
63
- user = create_user
64
- user.lock_access!
65
- assert_not_nil user.reload.locked_at
66
- assert_not_nil user.reload.unlock_token
67
-
68
- user.unlock_access!
69
- assert_nil user.reload.locked_at
70
- assert_nil user.reload.unlock_token
71
- assert_equal 0, user.reload.failed_attempts
72
- end
73
-
74
- test "new user should not be locked and should have zero failed_attempts" do
75
- assert_not new_user.access_locked?
76
- assert_equal 0, create_user.failed_attempts
77
- end
78
-
79
- test "should unlock user after unlock_in period" do
80
- swap Devise, unlock_in: 3.hours do
81
- user = new_user
82
- user.locked_at = 2.hours.ago
83
- assert user.access_locked?
84
-
85
- Devise.unlock_in = 1.hour
86
- assert_not user.access_locked?
87
- end
88
- end
89
-
90
- test "should not unlock in 'unlock_in' if :time unlock strategy is not set" do
91
- swap Devise, unlock_strategy: :email do
92
- user = new_user
93
- user.locked_at = 2.hours.ago
94
- assert user.access_locked?
95
- end
96
- end
97
-
98
- test "should set unlock_token when locking" do
99
- user = create_user
100
- assert_nil user.unlock_token
101
- user.lock_access!
102
- assert_not_nil user.unlock_token
103
- end
104
-
105
- test "should never generate the same unlock token for different users" do
106
- unlock_tokens = []
107
- 3.times do
108
- user = create_user
109
- user.lock_access!
110
- token = user.unlock_token
111
- assert !unlock_tokens.include?(token)
112
- unlock_tokens << token
113
- end
114
- end
115
-
116
- test "should not generate unlock_token when :email is not an unlock strategy" do
117
- swap Devise, unlock_strategy: :time do
118
- user = create_user
119
- user.lock_access!
120
- assert_nil user.unlock_token
121
- end
122
- end
123
-
124
- test "should send email with unlock instructions when :email is an unlock strategy" do
125
- swap Devise, unlock_strategy: :email do
126
- user = create_user
127
- assert_email_sent do
128
- user.lock_access!
129
- end
130
- end
131
- end
132
-
133
- test "doesn't send email when you pass option send_instructions to false" do
134
- swap Devise, unlock_strategy: :email do
135
- user = create_user
136
- assert_email_not_sent do
137
- user.lock_access! send_instructions: false
138
- end
139
- end
140
- end
141
-
142
- test "sends email when you pass options other than send_instructions" do
143
- swap Devise, unlock_strategy: :email do
144
- user = create_user
145
- assert_email_sent do
146
- user.lock_access! foo: :bar, bar: :foo
147
- end
148
- end
149
- end
150
-
151
- test "should not send email with unlock instructions when :email is not an unlock strategy" do
152
- swap Devise, unlock_strategy: :time do
153
- user = create_user
154
- assert_email_not_sent do
155
- user.lock_access!
156
- end
157
- end
158
- end
159
-
160
- test 'should find and unlock a user automatically based on raw token' do
161
- user = create_user
162
- raw = user.send_unlock_instructions
163
- locked_user = User.unlock_access_by_token(raw)
164
- assert_equal locked_user, user
165
- assert_not user.reload.access_locked?
166
- end
167
-
168
- test 'should return a new record with errors when a invalid token is given' do
169
- locked_user = User.unlock_access_by_token('invalid_token')
170
- assert_not locked_user.persisted?
171
- assert_equal "is invalid", locked_user.errors[:unlock_token].join
172
- end
173
-
174
- test 'should return a new record with errors when a blank token is given' do
175
- locked_user = User.unlock_access_by_token('')
176
- assert_not locked_user.persisted?
177
- assert_equal "can't be blank", locked_user.errors[:unlock_token].join
178
- end
179
-
180
- test 'should find a user to send unlock instructions' do
181
- user = create_user
182
- user.lock_access!
183
- unlock_user = User.send_unlock_instructions(email: user.email)
184
- assert_equal unlock_user, user
185
- end
186
-
187
- test 'should return a new user if no email was found' do
188
- unlock_user = User.send_unlock_instructions(email: "invalid@example.com")
189
- assert_not unlock_user.persisted?
190
- end
191
-
192
- test 'should add error to new user email if no email was found' do
193
- unlock_user = User.send_unlock_instructions(email: "invalid@example.com")
194
- assert_equal 'not found', unlock_user.errors[:email].join
195
- end
196
-
197
- test 'should find a user to send unlock instructions by authentication_keys' do
198
- swap Devise, authentication_keys: [:username, :email] do
199
- user = create_user
200
- unlock_user = User.send_unlock_instructions(email: user.email, username: user.username)
201
- assert_equal unlock_user, user
202
- end
203
- end
204
-
205
- test 'should require all unlock_keys' do
206
- swap Devise, unlock_keys: [:username, :email] do
207
- user = create_user
208
- unlock_user = User.send_unlock_instructions(email: user.email)
209
- assert_not unlock_user.persisted?
210
- assert_equal "can't be blank", unlock_user.errors[:username].join
211
- end
212
- end
213
-
214
- test 'should not be able to send instructions if the user is not locked' do
215
- user = create_user
216
- assert_not user.resend_unlock_instructions
217
- assert_not user.access_locked?
218
- assert_equal 'was not locked', user.errors[:email].join
219
- end
220
-
221
- test 'should not be able to send instructions if the user if not locked and have username as unlock key' do
222
- swap Devise, unlock_keys: [:username] do
223
- user = create_user
224
- assert_not user.resend_unlock_instructions
225
- assert_not user.access_locked?
226
- assert_equal 'was not locked', user.errors[:username].join
227
- end
228
- end
229
-
230
- test 'should unlock account if lock has expired and increase attempts on failure' do
231
- swap Devise, unlock_in: 1.minute do
232
- user = create_user
233
- user.confirm
234
-
235
- user.failed_attempts = 2
236
- user.locked_at = 2.minutes.ago
237
-
238
- user.valid_for_authentication? { false }
239
- assert_equal 1, user.failed_attempts
240
- end
241
- end
242
-
243
- test 'should unlock account if lock has expired on success' do
244
- swap Devise, unlock_in: 1.minute do
245
- user = create_user
246
- user.confirm
247
-
248
- user.failed_attempts = 2
249
- user.locked_at = 2.minutes.ago
250
-
251
- user.valid_for_authentication? { true }
252
- assert_equal 0, user.failed_attempts
253
- assert_nil user.locked_at
254
- end
255
- end
256
-
257
- test 'required_fields should contain the all the fields when all the strategies are enabled' do
258
- swap Devise, unlock_strategy: :both do
259
- swap Devise, lock_strategy: :failed_attempts do
260
- assert_same_content Devise::Models::Lockable.required_fields(User), [
261
- :failed_attempts,
262
- :locked_at,
263
- :unlock_token
264
- ]
265
- end
266
- end
267
- end
268
-
269
- test 'required_fields should contain only failed_attempts and locked_at when the strategies are time and failed_attempts are enabled' do
270
- swap Devise, unlock_strategy: :time do
271
- swap Devise, lock_strategy: :failed_attempts do
272
- assert_same_content Devise::Models::Lockable.required_fields(User), [
273
- :failed_attempts,
274
- :locked_at
275
- ]
276
- end
277
- end
278
- end
279
-
280
- test 'required_fields should contain only failed_attempts and unlock_token when the strategies are token and failed_attempts are enabled' do
281
- swap Devise, unlock_strategy: :email do
282
- swap Devise, lock_strategy: :failed_attempts do
283
- assert_same_content Devise::Models::Lockable.required_fields(User), [
284
- :failed_attempts,
285
- :unlock_token
286
- ]
287
- end
288
- end
289
- end
290
-
291
- test 'should not return a locked unauthenticated message if in paranoid mode' do
292
- swap Devise, paranoid: :true do
293
- user = create_user
294
- user.failed_attempts = Devise.maximum_attempts + 1
295
- user.lock_access!
296
-
297
- assert_equal :invalid, user.unauthenticated_message
298
- end
299
- end
300
-
301
- test 'should return last attempt message if user made next-to-last attempt of password entering' do
302
- swap Devise, last_attempt_warning: true, lock_strategy: :failed_attempts do
303
- user = create_user
304
- user.failed_attempts = Devise.maximum_attempts - 2
305
- assert_equal :invalid, user.unauthenticated_message
306
-
307
- user.failed_attempts = Devise.maximum_attempts - 1
308
- assert_equal :last_attempt, user.unauthenticated_message
309
-
310
- user.failed_attempts = Devise.maximum_attempts
311
- assert_equal :locked, user.unauthenticated_message
312
- end
313
- end
314
-
315
- test 'should not return last attempt message if last_attempt_warning is disabled' do
316
- swap Devise, last_attempt_warning: false, lock_strategy: :failed_attempts do
317
- user = create_user
318
- user.failed_attempts = Devise.maximum_attempts - 1
319
- assert_equal :invalid, user.unauthenticated_message
320
- end
321
- end
322
-
323
- test 'should return locked message if user was programatically locked' do
324
- user = create_user
325
- user.lock_access!
326
- assert_equal :locked, user.unauthenticated_message
327
- end
328
-
329
- test 'unlock_strategy_enabled? should return true for both, email, and time strategies if :both is used' do
330
- swap Devise, unlock_strategy: :both do
331
- user = create_user
332
- assert_equal true, user.unlock_strategy_enabled?(:both)
333
- assert_equal true, user.unlock_strategy_enabled?(:time)
334
- assert_equal true, user.unlock_strategy_enabled?(:email)
335
- assert_equal false, user.unlock_strategy_enabled?(:none)
336
- assert_equal false, user.unlock_strategy_enabled?(:an_undefined_strategy)
337
- end
338
- end
339
-
340
- test 'unlock_strategy_enabled? should return true only for the configured strategy' do
341
- swap Devise, unlock_strategy: :email do
342
- user = create_user
343
- assert_equal false, user.unlock_strategy_enabled?(:both)
344
- assert_equal false, user.unlock_strategy_enabled?(:time)
345
- assert_equal true, user.unlock_strategy_enabled?(:email)
346
- assert_equal false, user.unlock_strategy_enabled?(:none)
347
- assert_equal false, user.unlock_strategy_enabled?(:an_undefined_strategy)
348
- end
349
- end
350
- end
@@ -1,7 +0,0 @@
1
- require 'test_helper'
2
-
3
- class OmniauthableTest < ActiveSupport::TestCase
4
- test 'required_fields should contain the fields that Devise uses' do
5
- assert_same_content Devise::Models::Omniauthable.required_fields(User), []
6
- end
7
- end