devise 3.5.1 → 4.7.1

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 (256) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +259 -1076
  3. data/MIT-LICENSE +1 -1
  4. data/README.md +256 -68
  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 +10 -7
  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 +10 -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/mailer/password_change.html.erb +3 -0
  17. data/app/views/devise/passwords/edit.html.erb +5 -5
  18. data/app/views/devise/passwords/new.html.erb +2 -2
  19. data/app/views/devise/registrations/edit.html.erb +9 -5
  20. data/app/views/devise/registrations/new.html.erb +4 -4
  21. data/app/views/devise/sessions/new.html.erb +4 -4
  22. data/app/views/devise/shared/_error_messages.html.erb +15 -0
  23. data/app/views/devise/shared/_links.html.erb +8 -8
  24. data/app/views/devise/unlocks/new.html.erb +2 -2
  25. data/config/locales/en.yml +6 -1
  26. data/lib/devise/controllers/helpers.rb +35 -26
  27. data/lib/devise/controllers/rememberable.rb +11 -2
  28. data/lib/devise/controllers/scoped_views.rb +2 -0
  29. data/lib/devise/controllers/sign_in_out.rb +35 -18
  30. data/lib/devise/controllers/store_location.rb +25 -7
  31. data/lib/devise/controllers/url_helpers.rb +2 -0
  32. data/lib/devise/delegator.rb +2 -0
  33. data/lib/devise/encryptor.rb +6 -4
  34. data/lib/devise/failure_app.rb +84 -27
  35. data/lib/devise/hooks/activatable.rb +2 -0
  36. data/lib/devise/hooks/csrf_cleaner.rb +2 -0
  37. data/lib/devise/hooks/forgetable.rb +2 -0
  38. data/lib/devise/hooks/lockable.rb +6 -1
  39. data/lib/devise/hooks/proxy.rb +3 -1
  40. data/lib/devise/hooks/rememberable.rb +2 -0
  41. data/lib/devise/hooks/timeoutable.rb +7 -7
  42. data/lib/devise/hooks/trackable.rb +2 -0
  43. data/lib/devise/mailers/helpers.rb +7 -4
  44. data/lib/devise/mapping.rb +2 -0
  45. data/lib/devise/models/authenticatable.rb +51 -26
  46. data/lib/devise/models/confirmable.rb +106 -33
  47. data/lib/devise/models/database_authenticatable.rb +97 -21
  48. data/lib/devise/models/lockable.rb +15 -5
  49. data/lib/devise/models/omniauthable.rb +2 -0
  50. data/lib/devise/models/recoverable.rb +32 -24
  51. data/lib/devise/models/registerable.rb +4 -0
  52. data/lib/devise/models/rememberable.rb +42 -26
  53. data/lib/devise/models/timeoutable.rb +2 -6
  54. data/lib/devise/models/trackable.rb +15 -1
  55. data/lib/devise/models/validatable.rb +10 -3
  56. data/lib/devise/models.rb +3 -1
  57. data/lib/devise/modules.rb +2 -0
  58. data/lib/devise/omniauth/config.rb +2 -0
  59. data/lib/devise/omniauth/url_helpers.rb +14 -5
  60. data/lib/devise/omniauth.rb +2 -0
  61. data/lib/devise/orm/active_record.rb +5 -1
  62. data/lib/devise/orm/mongoid.rb +6 -2
  63. data/lib/devise/parameter_filter.rb +4 -0
  64. data/lib/devise/parameter_sanitizer.rb +139 -65
  65. data/lib/devise/rails/routes.rb +67 -47
  66. data/lib/devise/rails/warden_compat.rb +3 -10
  67. data/lib/devise/rails.rb +7 -16
  68. data/lib/devise/secret_key_finder.rb +27 -0
  69. data/lib/devise/strategies/authenticatable.rb +5 -3
  70. data/lib/devise/strategies/base.rb +2 -0
  71. data/lib/devise/strategies/database_authenticatable.rb +11 -4
  72. data/lib/devise/strategies/rememberable.rb +5 -6
  73. data/lib/devise/test/controller_helpers.rb +165 -0
  74. data/lib/devise/test/integration_helpers.rb +63 -0
  75. data/lib/devise/test_helpers.rb +7 -124
  76. data/lib/devise/time_inflector.rb +2 -0
  77. data/lib/devise/token_generator.rb +3 -41
  78. data/lib/devise/version.rb +3 -1
  79. data/lib/devise.rb +73 -46
  80. data/lib/generators/active_record/devise_generator.rb +29 -10
  81. data/lib/generators/active_record/templates/migration.rb +4 -2
  82. data/lib/generators/active_record/templates/migration_existing.rb +4 -2
  83. data/lib/generators/devise/controllers_generator.rb +3 -1
  84. data/lib/generators/devise/devise_generator.rb +4 -2
  85. data/lib/generators/devise/install_generator.rb +17 -0
  86. data/lib/generators/devise/orm_helpers.rb +10 -21
  87. data/lib/generators/devise/views_generator.rb +21 -11
  88. data/lib/generators/mongoid/devise_generator.rb +7 -5
  89. data/lib/generators/templates/README +1 -8
  90. data/lib/generators/templates/controllers/README +1 -1
  91. data/lib/generators/templates/controllers/confirmations_controller.rb +2 -0
  92. data/lib/generators/templates/controllers/omniauth_callbacks_controller.rb +2 -0
  93. data/lib/generators/templates/controllers/passwords_controller.rb +2 -0
  94. data/lib/generators/templates/controllers/registrations_controller.rb +6 -4
  95. data/lib/generators/templates/controllers/sessions_controller.rb +4 -2
  96. data/lib/generators/templates/controllers/unlocks_controller.rb +2 -0
  97. data/lib/generators/templates/devise.rb +52 -22
  98. data/lib/generators/templates/markerb/confirmation_instructions.markerb +1 -1
  99. data/lib/generators/templates/markerb/email_changed.markerb +7 -0
  100. data/lib/generators/templates/markerb/password_change.markerb +3 -0
  101. data/lib/generators/templates/markerb/reset_password_instructions.markerb +1 -1
  102. data/lib/generators/templates/markerb/unlock_instructions.markerb +1 -1
  103. data/lib/generators/templates/simple_form_for/confirmations/new.html.erb +5 -1
  104. data/lib/generators/templates/simple_form_for/passwords/edit.html.erb +10 -2
  105. data/lib/generators/templates/simple_form_for/passwords/new.html.erb +4 -1
  106. data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +11 -3
  107. data/lib/generators/templates/simple_form_for/registrations/new.html.erb +11 -3
  108. data/lib/generators/templates/simple_form_for/sessions/new.html.erb +7 -2
  109. data/lib/generators/templates/simple_form_for/unlocks/new.html.erb +4 -1
  110. metadata +15 -301
  111. data/.gitignore +0 -10
  112. data/.travis.yml +0 -45
  113. data/.yardopts +0 -9
  114. data/CONTRIBUTING.md +0 -14
  115. data/Gemfile +0 -29
  116. data/Gemfile.lock +0 -191
  117. data/Rakefile +0 -36
  118. data/devise.gemspec +0 -29
  119. data/devise.png +0 -0
  120. data/gemfiles/Gemfile.rails-3.2-stable +0 -29
  121. data/gemfiles/Gemfile.rails-3.2-stable.lock +0 -169
  122. data/gemfiles/Gemfile.rails-4.0-stable +0 -29
  123. data/gemfiles/Gemfile.rails-4.0-stable.lock +0 -163
  124. data/gemfiles/Gemfile.rails-4.1-stable +0 -29
  125. data/gemfiles/Gemfile.rails-4.1-stable.lock +0 -169
  126. data/gemfiles/Gemfile.rails-4.2-stable +0 -29
  127. data/gemfiles/Gemfile.rails-4.2-stable.lock +0 -191
  128. data/script/cached-bundle +0 -49
  129. data/script/s3-put +0 -71
  130. data/test/controllers/custom_registrations_controller_test.rb +0 -40
  131. data/test/controllers/custom_strategy_test.rb +0 -62
  132. data/test/controllers/helpers_test.rb +0 -316
  133. data/test/controllers/inherited_controller_i18n_messages_test.rb +0 -51
  134. data/test/controllers/internal_helpers_test.rb +0 -129
  135. data/test/controllers/load_hooks_controller_test.rb +0 -19
  136. data/test/controllers/passwords_controller_test.rb +0 -31
  137. data/test/controllers/sessions_controller_test.rb +0 -103
  138. data/test/controllers/url_helpers_test.rb +0 -65
  139. data/test/delegator_test.rb +0 -19
  140. data/test/devise_test.rb +0 -107
  141. data/test/failure_app_test.rb +0 -298
  142. data/test/generators/active_record_generator_test.rb +0 -109
  143. data/test/generators/controllers_generator_test.rb +0 -48
  144. data/test/generators/devise_generator_test.rb +0 -39
  145. data/test/generators/install_generator_test.rb +0 -13
  146. data/test/generators/mongoid_generator_test.rb +0 -23
  147. data/test/generators/views_generator_test.rb +0 -96
  148. data/test/helpers/devise_helper_test.rb +0 -49
  149. data/test/integration/authenticatable_test.rb +0 -729
  150. data/test/integration/confirmable_test.rb +0 -324
  151. data/test/integration/database_authenticatable_test.rb +0 -95
  152. data/test/integration/http_authenticatable_test.rb +0 -105
  153. data/test/integration/lockable_test.rb +0 -239
  154. data/test/integration/omniauthable_test.rb +0 -133
  155. data/test/integration/recoverable_test.rb +0 -347
  156. data/test/integration/registerable_test.rb +0 -359
  157. data/test/integration/rememberable_test.rb +0 -176
  158. data/test/integration/timeoutable_test.rb +0 -189
  159. data/test/integration/trackable_test.rb +0 -92
  160. data/test/mailers/confirmation_instructions_test.rb +0 -115
  161. data/test/mailers/reset_password_instructions_test.rb +0 -96
  162. data/test/mailers/unlock_instructions_test.rb +0 -91
  163. data/test/mapping_test.rb +0 -134
  164. data/test/models/authenticatable_test.rb +0 -23
  165. data/test/models/confirmable_test.rb +0 -468
  166. data/test/models/database_authenticatable_test.rb +0 -249
  167. data/test/models/lockable_test.rb +0 -328
  168. data/test/models/omniauthable_test.rb +0 -7
  169. data/test/models/recoverable_test.rb +0 -228
  170. data/test/models/registerable_test.rb +0 -7
  171. data/test/models/rememberable_test.rb +0 -204
  172. data/test/models/serializable_test.rb +0 -49
  173. data/test/models/timeoutable_test.rb +0 -51
  174. data/test/models/trackable_test.rb +0 -41
  175. data/test/models/validatable_test.rb +0 -127
  176. data/test/models_test.rb +0 -144
  177. data/test/omniauth/config_test.rb +0 -57
  178. data/test/omniauth/url_helpers_test.rb +0 -54
  179. data/test/orm/active_record.rb +0 -10
  180. data/test/orm/mongoid.rb +0 -13
  181. data/test/parameter_sanitizer_test.rb +0 -81
  182. data/test/rails_app/Rakefile +0 -6
  183. data/test/rails_app/app/active_record/admin.rb +0 -6
  184. data/test/rails_app/app/active_record/shim.rb +0 -2
  185. data/test/rails_app/app/active_record/user.rb +0 -6
  186. data/test/rails_app/app/active_record/user_on_engine.rb +0 -7
  187. data/test/rails_app/app/active_record/user_on_main_app.rb +0 -7
  188. data/test/rails_app/app/controllers/admins/sessions_controller.rb +0 -6
  189. data/test/rails_app/app/controllers/admins_controller.rb +0 -11
  190. data/test/rails_app/app/controllers/application_controller.rb +0 -12
  191. data/test/rails_app/app/controllers/application_with_fake_engine.rb +0 -30
  192. data/test/rails_app/app/controllers/custom/registrations_controller.rb +0 -31
  193. data/test/rails_app/app/controllers/home_controller.rb +0 -25
  194. data/test/rails_app/app/controllers/publisher/registrations_controller.rb +0 -2
  195. data/test/rails_app/app/controllers/publisher/sessions_controller.rb +0 -2
  196. data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +0 -14
  197. data/test/rails_app/app/controllers/users_controller.rb +0 -31
  198. data/test/rails_app/app/helpers/application_helper.rb +0 -3
  199. data/test/rails_app/app/mailers/users/from_proc_mailer.rb +0 -3
  200. data/test/rails_app/app/mailers/users/mailer.rb +0 -3
  201. data/test/rails_app/app/mailers/users/reply_to_mailer.rb +0 -4
  202. data/test/rails_app/app/mongoid/admin.rb +0 -29
  203. data/test/rails_app/app/mongoid/shim.rb +0 -23
  204. data/test/rails_app/app/mongoid/user.rb +0 -39
  205. data/test/rails_app/app/mongoid/user_on_engine.rb +0 -39
  206. data/test/rails_app/app/mongoid/user_on_main_app.rb +0 -39
  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 -40
  223. data/test/rails_app/config/boot.rb +0 -14
  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 -84
  228. data/test/rails_app/config/environments/test.rb +0 -41
  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 -8
  233. data/test/rails_app/config/initializers/session_store.rb +0 -1
  234. data/test/rails_app/config/routes.rb +0 -122
  235. data/test/rails_app/config.ru +0 -4
  236. data/test/rails_app/db/migrate/20100401102949_create_tables.rb +0 -71
  237. data/test/rails_app/db/schema.rb +0 -55
  238. data/test/rails_app/lib/shared_admin.rb +0 -17
  239. data/test/rails_app/lib/shared_user.rb +0 -29
  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 -73
  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
@@ -1,347 +0,0 @@
1
- require 'test_helper'
2
-
3
- class PasswordTest < ActionDispatch::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
- assert_not 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 /Reset password token(.*)invalid/
150
- assert_not 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 Devise.rails4? ?
164
- "Password confirmation doesn't match Password" : "Password doesn't match confirmation"
165
- assert_not user.reload.valid_password?('987654321')
166
- end
167
-
168
- test 'not authenticated user with valid data should be able to change their password' do
169
- user = create_user
170
- request_forgot_password
171
- reset_password
172
-
173
- assert_current_url '/'
174
- assert_contain 'Your password has been changed successfully. You are now signed in.'
175
- assert user.reload.valid_password?('987654321')
176
- end
177
-
178
- test 'after entering invalid data user should still be able to change their password' do
179
- user = create_user
180
- request_forgot_password
181
-
182
- reset_password { fill_in 'Confirm new password', with: 'other_password' }
183
- assert_response :success
184
- assert_have_selector '#error_explanation'
185
- assert_not user.reload.valid_password?('987654321')
186
-
187
- reset_password visit: false
188
- assert_contain 'Your password has been changed successfully.'
189
- assert user.reload.valid_password?('987654321')
190
- end
191
-
192
- test 'sign in user automatically after changing its password' do
193
- create_user
194
- request_forgot_password
195
- reset_password
196
-
197
- assert warden.authenticated?(:user)
198
- end
199
-
200
- test 'does not sign in user automatically after changing its password if config.sign_in_after_reset_password is false' do
201
- swap Devise, sign_in_after_reset_password: false do
202
- create_user
203
- request_forgot_password
204
- reset_password
205
-
206
- assert_contain 'Your password has been changed successfully.'
207
- assert_not_contain 'You are now signed in.'
208
- assert_equal new_user_session_path, @request.path
209
- assert !warden.authenticated?(:user)
210
- end
211
- end
212
-
213
- test 'does not sign in user automatically after changing its password if it\'s locked and unlock strategy is :none or :time' do
214
- [:none, :time].each do |strategy|
215
- swap Devise, unlock_strategy: strategy do
216
- user = create_user(locked: true)
217
- request_forgot_password
218
- reset_password
219
-
220
- assert_contain 'Your password has been changed successfully.'
221
- assert_not_contain 'You are now signed in.'
222
- assert_equal new_user_session_path, @request.path
223
- assert !warden.authenticated?(:user)
224
- end
225
- end
226
- end
227
-
228
- test 'unlocks and signs in locked user automatically after changing it\'s password if unlock strategy is :email' do
229
- swap Devise, unlock_strategy: :email do
230
- user = create_user(locked: true)
231
- request_forgot_password
232
- reset_password
233
-
234
- assert_contain 'Your password has been changed successfully.'
235
- assert !user.reload.access_locked?
236
- assert warden.authenticated?(:user)
237
- end
238
- end
239
-
240
- test 'unlocks and signs in locked user automatically after changing it\'s password if unlock strategy is :both' do
241
- swap Devise, unlock_strategy: :both do
242
- user = create_user(locked: true)
243
- request_forgot_password
244
- reset_password
245
-
246
- assert_contain 'Your password has been changed successfully.'
247
- assert !user.reload.access_locked?
248
- assert warden.authenticated?(:user)
249
- end
250
- end
251
-
252
- test 'reset password request with valid E-Mail in XML format should return valid response' do
253
- create_user
254
- post user_password_path(format: 'xml'), user: {email: "user@test.com"}
255
- assert_response :success
256
- assert_equal response.body, { }.to_xml
257
- end
258
-
259
- test 'reset password request with invalid E-Mail in XML format should return valid response' do
260
- create_user
261
- post user_password_path(format: 'xml'), user: {email: "invalid.test@test.com"}
262
- assert_response :unprocessable_entity
263
- assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
264
- end
265
-
266
- test 'reset password request with invalid E-Mail in XML format should return empty and valid response' do
267
- swap Devise, paranoid: true do
268
- create_user
269
- post user_password_path(format: 'xml'), user: {email: "invalid@test.com"}
270
- assert_response :success
271
- assert_equal response.body, { }.to_xml
272
- end
273
- end
274
-
275
- test 'change password with valid parameters in XML format should return valid response' do
276
- create_user
277
- request_forgot_password
278
- put user_password_path(format: 'xml'), user: {
279
- reset_password_token: 'abcdef', password: '987654321', password_confirmation: '987654321'
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'), 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'), 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), 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