devise 4.3.0 → 4.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +205 -2
  3. data/MIT-LICENSE +2 -1
  4. data/README.md +214 -57
  5. data/app/controllers/devise/confirmations_controller.rb +3 -0
  6. data/app/controllers/devise/omniauth_callbacks_controller.rb +3 -1
  7. data/app/controllers/devise/passwords_controller.rb +5 -2
  8. data/app/controllers/devise/registrations_controller.rb +32 -12
  9. data/app/controllers/devise/sessions_controller.rb +4 -2
  10. data/app/controllers/devise/unlocks_controller.rb +3 -0
  11. data/app/controllers/devise_controller.rb +6 -3
  12. data/app/helpers/devise_helper.rb +23 -18
  13. data/app/mailers/devise/mailer.rb +7 -5
  14. data/app/views/devise/confirmations/new.html.erb +2 -2
  15. data/app/views/devise/passwords/edit.html.erb +3 -3
  16. data/app/views/devise/passwords/new.html.erb +2 -2
  17. data/app/views/devise/registrations/edit.html.erb +6 -6
  18. data/app/views/devise/registrations/new.html.erb +4 -4
  19. data/app/views/devise/sessions/new.html.erb +4 -4
  20. data/app/views/devise/shared/_error_messages.html.erb +15 -0
  21. data/app/views/devise/shared/_links.html.erb +8 -8
  22. data/app/views/devise/unlocks/new.html.erb +2 -2
  23. data/config/locales/en.yml +3 -2
  24. data/lib/devise/controllers/helpers.rb +10 -8
  25. data/lib/devise/controllers/rememberable.rb +2 -0
  26. data/lib/devise/controllers/responder.rb +35 -0
  27. data/lib/devise/controllers/scoped_views.rb +2 -0
  28. data/lib/devise/controllers/sign_in_out.rb +14 -4
  29. data/lib/devise/controllers/store_location.rb +24 -6
  30. data/lib/devise/controllers/url_helpers.rb +3 -1
  31. data/lib/devise/delegator.rb +2 -0
  32. data/lib/devise/encryptor.rb +2 -0
  33. data/lib/devise/failure_app.rb +33 -7
  34. data/lib/devise/hooks/activatable.rb +2 -0
  35. data/lib/devise/hooks/csrf_cleaner.rb +8 -1
  36. data/lib/devise/hooks/forgetable.rb +2 -0
  37. data/lib/devise/hooks/lockable.rb +4 -5
  38. data/lib/devise/hooks/proxy.rb +2 -0
  39. data/lib/devise/hooks/rememberable.rb +2 -0
  40. data/lib/devise/hooks/timeoutable.rb +4 -2
  41. data/lib/devise/hooks/trackable.rb +2 -0
  42. data/lib/devise/mailers/helpers.rb +2 -0
  43. data/lib/devise/mapping.rb +3 -1
  44. data/lib/devise/models/authenticatable.rb +55 -50
  45. data/lib/devise/models/confirmable.rb +36 -40
  46. data/lib/devise/models/database_authenticatable.rb +57 -36
  47. data/lib/devise/models/lockable.rb +18 -4
  48. data/lib/devise/models/omniauthable.rb +4 -2
  49. data/lib/devise/models/recoverable.rb +10 -19
  50. data/lib/devise/models/registerable.rb +4 -0
  51. data/lib/devise/models/rememberable.rb +5 -3
  52. data/lib/devise/models/timeoutable.rb +3 -1
  53. data/lib/devise/models/trackable.rb +15 -1
  54. data/lib/devise/models/validatable.rb +7 -10
  55. data/lib/devise/models.rb +3 -0
  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 +2 -0
  59. data/lib/devise/omniauth.rb +4 -5
  60. data/lib/devise/orm/active_record.rb +2 -0
  61. data/lib/devise/orm/mongoid.rb +2 -0
  62. data/lib/devise/orm.rb +71 -0
  63. data/lib/devise/parameter_filter.rb +4 -0
  64. data/lib/devise/parameter_sanitizer.rb +15 -1
  65. data/lib/devise/rails/deprecated_constant_accessor.rb +39 -0
  66. data/lib/devise/rails/routes.rb +8 -6
  67. data/lib/devise/rails/warden_compat.rb +2 -0
  68. data/lib/devise/rails.rb +3 -5
  69. data/lib/devise/secret_key_finder.rb +27 -0
  70. data/lib/devise/strategies/authenticatable.rb +3 -1
  71. data/lib/devise/strategies/base.rb +2 -0
  72. data/lib/devise/strategies/database_authenticatable.rb +8 -1
  73. data/lib/devise/strategies/rememberable.rb +2 -0
  74. data/lib/devise/test/controller_helpers.rb +6 -1
  75. data/lib/devise/test/integration_helpers.rb +3 -1
  76. data/lib/devise/test_helpers.rb +2 -0
  77. data/lib/devise/time_inflector.rb +2 -0
  78. data/lib/devise/token_generator.rb +2 -0
  79. data/lib/devise/version.rb +3 -1
  80. data/lib/devise.rb +38 -12
  81. data/lib/generators/active_record/devise_generator.rb +40 -12
  82. data/lib/generators/active_record/templates/migration.rb +3 -1
  83. data/lib/generators/active_record/templates/migration_existing.rb +2 -0
  84. data/lib/generators/devise/controllers_generator.rb +3 -1
  85. data/lib/generators/devise/devise_generator.rb +5 -3
  86. data/lib/generators/devise/install_generator.rb +3 -5
  87. data/lib/generators/devise/orm_helpers.rb +9 -3
  88. data/lib/generators/devise/views_generator.rb +8 -9
  89. data/lib/generators/mongoid/devise_generator.rb +7 -5
  90. data/lib/generators/templates/README +9 -1
  91. data/lib/generators/templates/controllers/confirmations_controller.rb +2 -0
  92. data/lib/generators/templates/controllers/omniauth_callbacks_controller.rb +3 -1
  93. data/lib/generators/templates/controllers/passwords_controller.rb +2 -0
  94. data/lib/generators/templates/controllers/registrations_controller.rb +2 -0
  95. data/lib/generators/templates/controllers/sessions_controller.rb +2 -0
  96. data/lib/generators/templates/controllers/unlocks_controller.rb +2 -0
  97. data/lib/generators/templates/devise.rb +43 -7
  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 +10 -2
  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 +12 -4
  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 +24 -307
  106. data/.gitignore +0 -10
  107. data/.travis.yml +0 -58
  108. data/.yardopts +0 -9
  109. data/CODE_OF_CONDUCT.md +0 -22
  110. data/CONTRIBUTING.md +0 -79
  111. data/Gemfile +0 -40
  112. data/Gemfile.lock +0 -194
  113. data/Rakefile +0 -36
  114. data/bin/test +0 -13
  115. data/devise.gemspec +0 -26
  116. data/devise.png +0 -0
  117. data/gemfiles/Gemfile.rails-4.1-stable +0 -30
  118. data/gemfiles/Gemfile.rails-4.1-stable.lock +0 -171
  119. data/gemfiles/Gemfile.rails-4.2-stable +0 -30
  120. data/gemfiles/Gemfile.rails-4.2-stable.lock +0 -192
  121. data/gemfiles/Gemfile.rails-5.0-stable +0 -34
  122. data/gemfiles/Gemfile.rails-5.0-stable.lock +0 -193
  123. data/guides/bug_report_templates/integration_test.rb +0 -104
  124. data/test/controllers/custom_registrations_controller_test.rb +0 -40
  125. data/test/controllers/custom_strategy_test.rb +0 -64
  126. data/test/controllers/helper_methods_test.rb +0 -22
  127. data/test/controllers/helpers_test.rb +0 -316
  128. data/test/controllers/inherited_controller_i18n_messages_test.rb +0 -51
  129. data/test/controllers/internal_helpers_test.rb +0 -127
  130. data/test/controllers/load_hooks_controller_test.rb +0 -19
  131. data/test/controllers/passwords_controller_test.rb +0 -32
  132. data/test/controllers/sessions_controller_test.rb +0 -106
  133. data/test/controllers/url_helpers_test.rb +0 -65
  134. data/test/delegator_test.rb +0 -19
  135. data/test/devise_test.rb +0 -107
  136. data/test/failure_app_test.rb +0 -338
  137. data/test/generators/active_record_generator_test.rb +0 -83
  138. data/test/generators/controllers_generator_test.rb +0 -48
  139. data/test/generators/devise_generator_test.rb +0 -39
  140. data/test/generators/install_generator_test.rb +0 -24
  141. data/test/generators/mongoid_generator_test.rb +0 -23
  142. data/test/generators/views_generator_test.rb +0 -103
  143. data/test/helpers/devise_helper_test.rb +0 -49
  144. data/test/integration/authenticatable_test.rb +0 -698
  145. data/test/integration/confirmable_test.rb +0 -324
  146. data/test/integration/database_authenticatable_test.rb +0 -95
  147. data/test/integration/http_authenticatable_test.rb +0 -106
  148. data/test/integration/lockable_test.rb +0 -240
  149. data/test/integration/mounted_engine_test.rb +0 -36
  150. data/test/integration/omniauthable_test.rb +0 -135
  151. data/test/integration/recoverable_test.rb +0 -347
  152. data/test/integration/registerable_test.rb +0 -363
  153. data/test/integration/rememberable_test.rb +0 -217
  154. data/test/integration/timeoutable_test.rb +0 -184
  155. data/test/integration/trackable_test.rb +0 -92
  156. data/test/mailers/confirmation_instructions_test.rb +0 -115
  157. data/test/mailers/email_changed_test.rb +0 -130
  158. data/test/mailers/mailer_test.rb +0 -18
  159. data/test/mailers/reset_password_instructions_test.rb +0 -96
  160. data/test/mailers/unlock_instructions_test.rb +0 -91
  161. data/test/mapping_test.rb +0 -134
  162. data/test/models/authenticatable_test.rb +0 -23
  163. data/test/models/confirmable_test.rb +0 -536
  164. data/test/models/database_authenticatable_test.rb +0 -281
  165. data/test/models/lockable_test.rb +0 -350
  166. data/test/models/omniauthable_test.rb +0 -7
  167. data/test/models/recoverable_test.rb +0 -261
  168. data/test/models/registerable_test.rb +0 -7
  169. data/test/models/rememberable_test.rb +0 -182
  170. data/test/models/serializable_test.rb +0 -54
  171. data/test/models/timeoutable_test.rb +0 -51
  172. data/test/models/trackable_test.rb +0 -41
  173. data/test/models/validatable_test.rb +0 -119
  174. data/test/models_test.rb +0 -153
  175. data/test/omniauth/config_test.rb +0 -59
  176. data/test/omniauth/url_helpers_test.rb +0 -51
  177. data/test/orm/active_record.rb +0 -17
  178. data/test/orm/mongoid.rb +0 -13
  179. data/test/parameter_sanitizer_test.rb +0 -75
  180. data/test/rails_app/Rakefile +0 -6
  181. data/test/rails_app/app/active_record/admin.rb +0 -6
  182. data/test/rails_app/app/active_record/shim.rb +0 -2
  183. data/test/rails_app/app/active_record/user.rb +0 -7
  184. data/test/rails_app/app/active_record/user_on_engine.rb +0 -7
  185. data/test/rails_app/app/active_record/user_on_main_app.rb +0 -7
  186. data/test/rails_app/app/active_record/user_without_email.rb +0 -8
  187. data/test/rails_app/app/controllers/admins/sessions_controller.rb +0 -6
  188. data/test/rails_app/app/controllers/admins_controller.rb +0 -6
  189. data/test/rails_app/app/controllers/application_controller.rb +0 -11
  190. data/test/rails_app/app/controllers/application_with_fake_engine.rb +0 -30
  191. data/test/rails_app/app/controllers/custom/registrations_controller.rb +0 -31
  192. data/test/rails_app/app/controllers/home_controller.rb +0 -29
  193. data/test/rails_app/app/controllers/publisher/registrations_controller.rb +0 -2
  194. data/test/rails_app/app/controllers/publisher/sessions_controller.rb +0 -2
  195. data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +0 -14
  196. data/test/rails_app/app/controllers/users_controller.rb +0 -31
  197. data/test/rails_app/app/helpers/application_helper.rb +0 -3
  198. data/test/rails_app/app/mailers/users/from_proc_mailer.rb +0 -3
  199. data/test/rails_app/app/mailers/users/mailer.rb +0 -3
  200. data/test/rails_app/app/mailers/users/reply_to_mailer.rb +0 -4
  201. data/test/rails_app/app/mongoid/admin.rb +0 -29
  202. data/test/rails_app/app/mongoid/shim.rb +0 -23
  203. data/test/rails_app/app/mongoid/user.rb +0 -39
  204. data/test/rails_app/app/mongoid/user_on_engine.rb +0 -39
  205. data/test/rails_app/app/mongoid/user_on_main_app.rb +0 -39
  206. data/test/rails_app/app/mongoid/user_without_email.rb +0 -33
  207. data/test/rails_app/app/views/admins/index.html.erb +0 -1
  208. data/test/rails_app/app/views/admins/sessions/new.html.erb +0 -2
  209. data/test/rails_app/app/views/home/admin_dashboard.html.erb +0 -1
  210. data/test/rails_app/app/views/home/index.html.erb +0 -1
  211. data/test/rails_app/app/views/home/join.html.erb +0 -1
  212. data/test/rails_app/app/views/home/private.html.erb +0 -1
  213. data/test/rails_app/app/views/home/user_dashboard.html.erb +0 -1
  214. data/test/rails_app/app/views/layouts/application.html.erb +0 -24
  215. data/test/rails_app/app/views/users/edit_form.html.erb +0 -1
  216. data/test/rails_app/app/views/users/index.html.erb +0 -1
  217. data/test/rails_app/app/views/users/mailer/confirmation_instructions.erb +0 -1
  218. data/test/rails_app/app/views/users/sessions/new.html.erb +0 -1
  219. data/test/rails_app/bin/bundle +0 -3
  220. data/test/rails_app/bin/rails +0 -4
  221. data/test/rails_app/bin/rake +0 -4
  222. data/test/rails_app/config/application.rb +0 -44
  223. data/test/rails_app/config/boot.rb +0 -20
  224. data/test/rails_app/config/database.yml +0 -18
  225. data/test/rails_app/config/environment.rb +0 -5
  226. data/test/rails_app/config/environments/development.rb +0 -30
  227. data/test/rails_app/config/environments/production.rb +0 -86
  228. data/test/rails_app/config/environments/test.rb +0 -45
  229. data/test/rails_app/config/initializers/backtrace_silencers.rb +0 -7
  230. data/test/rails_app/config/initializers/devise.rb +0 -180
  231. data/test/rails_app/config/initializers/inflections.rb +0 -2
  232. data/test/rails_app/config/initializers/secret_token.rb +0 -3
  233. data/test/rails_app/config/initializers/session_store.rb +0 -1
  234. data/test/rails_app/config/routes.rb +0 -126
  235. data/test/rails_app/config.ru +0 -4
  236. data/test/rails_app/db/migrate/20100401102949_create_tables.rb +0 -75
  237. data/test/rails_app/db/schema.rb +0 -55
  238. data/test/rails_app/lib/shared_admin.rb +0 -21
  239. data/test/rails_app/lib/shared_user.rb +0 -30
  240. data/test/rails_app/lib/shared_user_without_email.rb +0 -26
  241. data/test/rails_app/lib/shared_user_without_omniauth.rb +0 -13
  242. data/test/rails_app/public/404.html +0 -26
  243. data/test/rails_app/public/422.html +0 -26
  244. data/test/rails_app/public/500.html +0 -26
  245. data/test/rails_app/public/favicon.ico +0 -0
  246. data/test/rails_test.rb +0 -9
  247. data/test/routes_test.rb +0 -279
  248. data/test/support/action_controller/record_identifier.rb +0 -10
  249. data/test/support/assertions.rb +0 -28
  250. data/test/support/helpers.rb +0 -77
  251. data/test/support/http_method_compatibility.rb +0 -51
  252. data/test/support/integration.rb +0 -92
  253. data/test/support/locale/en.yml +0 -8
  254. data/test/support/mongoid.yml +0 -6
  255. data/test/support/webrat/integrations/rails.rb +0 -33
  256. data/test/test/controller_helpers_test.rb +0 -186
  257. data/test/test/integration_helpers_test.rb +0 -32
  258. data/test/test_helper.rb +0 -34
  259. data/test/test_models.rb +0 -33
@@ -1,347 +0,0 @@
1
- require 'test_helper'
2
-
3
- class PasswordTest < Devise::IntegrationTest
4
-
5
- def visit_new_password_path
6
- visit new_user_session_path
7
- click_link 'Forgot your password?'
8
- end
9
-
10
- def request_forgot_password(&block)
11
- visit_new_password_path
12
- assert_response :success
13
- refute warden.authenticated?(:user)
14
-
15
- fill_in 'email', with: 'user@test.com'
16
- yield if block_given?
17
-
18
- Devise.stubs(:friendly_token).returns("abcdef")
19
- click_button 'Send me reset password instructions'
20
- end
21
-
22
- def reset_password(options={}, &block)
23
- unless options[:visit] == false
24
- visit edit_user_password_path(reset_password_token: options[:reset_password_token] || "abcdef")
25
- assert_response :success
26
- end
27
-
28
- fill_in 'New password', with: '987654321'
29
- fill_in 'Confirm new password', with: '987654321'
30
- yield if block_given?
31
- click_button 'Change my password'
32
- end
33
-
34
- test 'reset password with email of different case should succeed when email is in the list of case insensitive keys' do
35
- create_user(email: 'Foo@Bar.com')
36
-
37
- request_forgot_password do
38
- fill_in 'email', with: 'foo@bar.com'
39
- end
40
-
41
- assert_current_url '/users/sign_in'
42
- assert_contain 'You will receive an email with instructions on how to reset your password in a few minutes.'
43
- end
44
-
45
- test 'reset password with email should send an email from a custom mailer' do
46
- create_user(email: 'Foo@Bar.com')
47
-
48
- User.any_instance.stubs(:devise_mailer).returns(Users::Mailer)
49
- request_forgot_password do
50
- fill_in 'email', with: 'foo@bar.com'
51
- end
52
-
53
- mail = ActionMailer::Base.deliveries.last
54
- assert_equal ['custom@example.com'], mail.from
55
- assert_match edit_user_password_path(reset_password_token: 'abcdef'), mail.body.encoded
56
- end
57
-
58
- test 'reset password with email of different case should fail when email is NOT the list of case insensitive keys' do
59
- swap Devise, case_insensitive_keys: [] do
60
- create_user(email: 'Foo@Bar.com')
61
-
62
- request_forgot_password do
63
- fill_in 'email', with: 'foo@bar.com'
64
- end
65
-
66
- assert_response :success
67
- assert_current_url '/users/password'
68
- assert_have_selector "input[type=email][value='foo@bar.com']"
69
- assert_contain 'not found'
70
- end
71
- end
72
-
73
- test 'reset password with email with extra whitespace should succeed when email is in the list of strip whitespace keys' do
74
- create_user(email: 'foo@bar.com')
75
-
76
- request_forgot_password do
77
- fill_in 'email', with: ' foo@bar.com '
78
- end
79
-
80
- assert_current_url '/users/sign_in'
81
- assert_contain 'You will receive an email with instructions on how to reset your password in a few minutes.'
82
- end
83
-
84
- test 'reset password with email with extra whitespace should fail when email is NOT the list of strip whitespace keys' do
85
- swap Devise, strip_whitespace_keys: [] do
86
- create_user(email: 'foo@bar.com')
87
-
88
- request_forgot_password do
89
- fill_in 'email', with: ' foo@bar.com '
90
- end
91
-
92
- assert_response :success
93
- assert_current_url '/users/password'
94
- assert_have_selector "input[type=email][value=' foo@bar.com ']"
95
- assert_contain 'not found'
96
- end
97
- end
98
-
99
- test 'authenticated user should not be able to visit forgot password page' do
100
- sign_in_as_user
101
- assert warden.authenticated?(:user)
102
-
103
- get new_user_password_path
104
-
105
- assert_response :redirect
106
- assert_redirected_to root_path
107
- end
108
-
109
- test 'not authenticated user should be able to request a forgot password' do
110
- create_user
111
- request_forgot_password
112
-
113
- assert_current_url '/users/sign_in'
114
- assert_contain 'You will receive an email with instructions on how to reset your password in a few minutes.'
115
- end
116
-
117
- test 'not authenticated user with invalid email should receive an error message' do
118
- request_forgot_password do
119
- fill_in 'email', with: 'invalid.test@test.com'
120
- end
121
-
122
- assert_response :success
123
- assert_current_url '/users/password'
124
- assert_have_selector "input[type=email][value='invalid.test@test.com']"
125
- assert_contain 'not found'
126
- end
127
-
128
- test 'authenticated user should not be able to visit edit password page' do
129
- sign_in_as_user
130
- get edit_user_password_path
131
- assert_response :redirect
132
- assert_redirected_to root_path
133
- assert warden.authenticated?(:user)
134
- end
135
-
136
- test 'not authenticated user without a reset password token should not be able to visit the page' do
137
- get edit_user_password_path
138
- assert_response :redirect
139
- assert_redirected_to "/users/sign_in"
140
- end
141
-
142
- test 'not authenticated user with invalid reset password token should not be able to change their password' do
143
- user = create_user
144
- reset_password reset_password_token: 'invalid_reset_password'
145
-
146
- assert_response :success
147
- assert_current_url '/users/password'
148
- assert_have_selector '#error_explanation'
149
- assert_contain %r{Reset password token(.*)invalid}
150
- refute user.reload.valid_password?('987654321')
151
- end
152
-
153
- test 'not authenticated user with valid reset password token but invalid password should not be able to change their password' do
154
- user = create_user
155
- request_forgot_password
156
- reset_password do
157
- fill_in 'Confirm new password', with: 'other_password'
158
- end
159
-
160
- assert_response :success
161
- assert_current_url '/users/password'
162
- assert_have_selector '#error_explanation'
163
- assert_contain "Password confirmation doesn't match Password"
164
- refute user.reload.valid_password?('987654321')
165
- end
166
-
167
- test 'not authenticated user with valid data should be able to change their password' do
168
- user = create_user
169
- request_forgot_password
170
- reset_password
171
-
172
- assert_current_url '/'
173
- assert_contain 'Your password has been changed successfully. You are now signed in.'
174
- assert user.reload.valid_password?('987654321')
175
- end
176
-
177
- test 'after entering invalid data user should still be able to change their password' do
178
- user = create_user
179
- request_forgot_password
180
-
181
- reset_password { fill_in 'Confirm new password', with: 'other_password' }
182
- assert_response :success
183
- assert_have_selector '#error_explanation'
184
- refute user.reload.valid_password?('987654321')
185
-
186
- reset_password visit: false
187
- assert_contain 'Your password has been changed successfully.'
188
- assert user.reload.valid_password?('987654321')
189
- end
190
-
191
- test 'sign in user automatically after changing its password' do
192
- create_user
193
- request_forgot_password
194
- reset_password
195
-
196
- assert warden.authenticated?(:user)
197
- end
198
-
199
- test 'does not sign in user automatically after changing its password if config.sign_in_after_reset_password is false' do
200
- swap Devise, sign_in_after_reset_password: false do
201
- create_user
202
- request_forgot_password
203
- reset_password
204
-
205
- assert_contain 'Your password has been changed successfully.'
206
- assert_not_contain 'You are now signed in.'
207
- assert_equal new_user_session_path, @request.path
208
- assert !warden.authenticated?(:user)
209
- end
210
- end
211
-
212
- test 'does not sign in user automatically after changing its password if it\'s locked and unlock strategy is :none or :time' do
213
- [:none, :time].each do |strategy|
214
- swap Devise, unlock_strategy: strategy do
215
- create_user(locked: true)
216
- request_forgot_password
217
- reset_password
218
-
219
- assert_contain 'Your password has been changed successfully.'
220
- assert_not_contain 'You are now signed in.'
221
- assert_equal new_user_session_path, @request.path
222
- assert !warden.authenticated?(:user)
223
- end
224
- end
225
- end
226
-
227
- test 'unlocks and signs in locked user automatically after changing it\'s password if unlock strategy is :email' do
228
- swap Devise, unlock_strategy: :email do
229
- user = create_user(locked: true)
230
- request_forgot_password
231
- reset_password
232
-
233
- assert_contain 'Your password has been changed successfully.'
234
- assert !user.reload.access_locked?
235
- assert warden.authenticated?(:user)
236
- end
237
- end
238
-
239
- test 'unlocks and signs in locked user automatically after changing it\'s password if unlock strategy is :both' do
240
- swap Devise, unlock_strategy: :both do
241
- user = create_user(locked: true)
242
- request_forgot_password
243
- reset_password
244
-
245
- assert_contain 'Your password has been changed successfully.'
246
- assert !user.reload.access_locked?
247
- assert warden.authenticated?(:user)
248
- end
249
- end
250
-
251
- test 'reset password request with valid E-Mail in XML format should return valid response' do
252
- create_user
253
- post user_password_path(format: 'xml'), params: { user: {email: "user@test.com"} }
254
- assert_response :success
255
- assert_equal response.body, { }.to_xml
256
- end
257
-
258
- test 'reset password request with invalid E-Mail in XML format should return valid response' do
259
- create_user
260
- post user_password_path(format: 'xml'), params: { user: {email: "invalid.test@test.com"} }
261
- assert_response :unprocessable_entity
262
- assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
263
- end
264
-
265
- test 'reset password request with invalid E-Mail in XML format should return empty and valid response' do
266
- swap Devise, paranoid: true do
267
- create_user
268
- post user_password_path(format: 'xml'), params: { user: {email: "invalid@test.com"} }
269
- assert_response :success
270
- assert_equal response.body, { }.to_xml
271
- end
272
- end
273
-
274
- test 'change password with valid parameters in XML format should return valid response' do
275
- create_user
276
- request_forgot_password
277
- put user_password_path(format: 'xml'), params: { user: {
278
- reset_password_token: 'abcdef', password: '987654321', password_confirmation: '987654321'
279
- }
280
- }
281
- assert_response :success
282
- assert warden.authenticated?(:user)
283
- end
284
-
285
- test 'change password with invalid token in XML format should return invalid response' do
286
- create_user
287
- request_forgot_password
288
- put user_password_path(format: 'xml'), params: { user: {reset_password_token: 'invalid.token', password: '987654321', password_confirmation: '987654321'} }
289
- assert_response :unprocessable_entity
290
- assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
291
- end
292
-
293
- test 'change password with invalid new password in XML format should return invalid response' do
294
- user = create_user
295
- request_forgot_password
296
- put user_password_path(format: 'xml'), params: { user: {reset_password_token: user.reload.reset_password_token, password: '', password_confirmation: '987654321'} }
297
- assert_response :unprocessable_entity
298
- assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
299
- end
300
-
301
- test "when using json requests to ask a confirmable request, should not return the object" do
302
- user = create_user(confirm: false)
303
-
304
- post user_password_path(format: :json), params: { user: { email: user.email } }
305
-
306
- assert_response :success
307
- assert_equal response.body, "{}"
308
- end
309
-
310
- test "when in paranoid mode and with an invalid e-mail, asking to reset a password should display a message that does not indicates that the e-mail does not exists in the database" do
311
- swap Devise, paranoid: true do
312
- visit_new_password_path
313
- fill_in "email", with: "arandomemail@test.com"
314
- click_button 'Send me reset password instructions'
315
-
316
- assert_not_contain "1 error prohibited this user from being saved:"
317
- assert_not_contain "Email not found"
318
- assert_contain "If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes."
319
- assert_current_url "/users/sign_in"
320
- end
321
- end
322
-
323
- test "when in paranoid mode and with a valid e-mail, asking to reset password should display a message that does not indicates that the email exists in the database and redirect to the failure route" do
324
- swap Devise, paranoid: true do
325
- user = create_user
326
- visit_new_password_path
327
- fill_in 'email', with: user.email
328
- click_button 'Send me reset password instructions'
329
-
330
- assert_contain "If your email address exists in our database, you will receive a password recovery link at your email address in a few minutes."
331
- assert_current_url "/users/sign_in"
332
- end
333
- end
334
-
335
- test "after recovering a password, should set failed attempts to 0" do
336
- user = create_user
337
- user.update_attribute(:failed_attempts, 10)
338
-
339
- assert_equal 10, user.failed_attempts
340
- request_forgot_password
341
- reset_password
342
-
343
- assert warden.authenticated?(:user)
344
- user.reload
345
- assert_equal 0, user.failed_attempts
346
- end
347
- end