devise 3.0.0 → 4.8.0

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 (242) hide show
  1. checksums.yaml +7 -0
  2. data/CHANGELOG.md +351 -0
  3. data/MIT-LICENSE +2 -1
  4. data/README.md +422 -130
  5. data/app/controllers/devise/confirmations_controller.rb +17 -6
  6. data/app/controllers/devise/omniauth_callbacks_controller.rb +12 -6
  7. data/app/controllers/devise/passwords_controller.rb +23 -8
  8. data/app/controllers/devise/registrations_controller.rb +70 -28
  9. data/app/controllers/devise/sessions_controller.rb +49 -17
  10. data/app/controllers/devise/unlocks_controller.rb +11 -4
  11. data/app/controllers/devise_controller.rb +74 -34
  12. data/app/helpers/devise_helper.rb +23 -18
  13. data/app/mailers/devise/mailer.rb +25 -10
  14. data/app/views/devise/confirmations/new.html.erb +9 -5
  15. data/app/views/devise/mailer/confirmation_instructions.html.erb +1 -1
  16. data/app/views/devise/mailer/email_changed.html.erb +7 -0
  17. data/app/views/devise/mailer/password_change.html.erb +3 -0
  18. data/app/views/devise/mailer/reset_password_instructions.html.erb +1 -1
  19. data/app/views/devise/mailer/unlock_instructions.html.erb +1 -1
  20. data/app/views/devise/passwords/edit.html.erb +16 -7
  21. data/app/views/devise/passwords/new.html.erb +9 -5
  22. data/app/views/devise/registrations/edit.html.erb +29 -15
  23. data/app/views/devise/registrations/new.html.erb +20 -9
  24. data/app/views/devise/sessions/new.html.erb +19 -10
  25. data/app/views/devise/shared/_error_messages.html.erb +15 -0
  26. data/app/views/devise/shared/{_links.erb → _links.html.erb} +10 -10
  27. data/app/views/devise/unlocks/new.html.erb +9 -5
  28. data/config/locales/en.yml +26 -20
  29. data/lib/devise/controllers/helpers.rb +122 -125
  30. data/lib/devise/controllers/rememberable.rb +14 -14
  31. data/lib/devise/controllers/scoped_views.rb +3 -1
  32. data/lib/devise/controllers/sign_in_out.rb +121 -0
  33. data/lib/devise/controllers/store_location.rb +76 -0
  34. data/lib/devise/controllers/url_helpers.rb +10 -8
  35. data/lib/devise/delegator.rb +2 -0
  36. data/lib/devise/encryptor.rb +24 -0
  37. data/lib/devise/failure_app.rb +132 -42
  38. data/lib/devise/hooks/activatable.rb +7 -6
  39. data/lib/devise/hooks/csrf_cleaner.rb +9 -0
  40. data/lib/devise/hooks/forgetable.rb +3 -1
  41. data/lib/devise/hooks/lockable.rb +5 -3
  42. data/lib/devise/hooks/proxy.rb +23 -0
  43. data/lib/devise/hooks/rememberable.rb +7 -4
  44. data/lib/devise/hooks/timeoutable.rb +18 -8
  45. data/lib/devise/hooks/trackable.rb +3 -1
  46. data/lib/devise/mailers/helpers.rb +15 -18
  47. data/lib/devise/mapping.rb +9 -3
  48. data/lib/devise/models/authenticatable.rb +102 -80
  49. data/lib/devise/models/confirmable.rb +154 -72
  50. data/lib/devise/models/database_authenticatable.rb +125 -25
  51. data/lib/devise/models/lockable.rb +50 -29
  52. data/lib/devise/models/omniauthable.rb +3 -1
  53. data/lib/devise/models/recoverable.rb +72 -50
  54. data/lib/devise/models/registerable.rb +4 -0
  55. data/lib/devise/models/rememberable.rb +65 -32
  56. data/lib/devise/models/timeoutable.rb +4 -8
  57. data/lib/devise/models/trackable.rb +20 -4
  58. data/lib/devise/models/validatable.rb +16 -9
  59. data/lib/devise/models.rb +6 -13
  60. data/lib/devise/modules.rb +12 -11
  61. data/lib/devise/omniauth/config.rb +2 -0
  62. data/lib/devise/omniauth/url_helpers.rb +14 -5
  63. data/lib/devise/omniauth.rb +4 -5
  64. data/lib/devise/orm/active_record.rb +5 -1
  65. data/lib/devise/orm/mongoid.rb +6 -2
  66. data/lib/devise/parameter_filter.rb +4 -0
  67. data/lib/devise/parameter_sanitizer.rb +144 -34
  68. data/lib/devise/rails/deprecated_constant_accessor.rb +39 -0
  69. data/lib/devise/rails/routes.rb +191 -127
  70. data/lib/devise/rails/warden_compat.rb +2 -1
  71. data/lib/devise/rails.rb +13 -20
  72. data/lib/devise/secret_key_finder.rb +27 -0
  73. data/lib/devise/strategies/authenticatable.rb +21 -22
  74. data/lib/devise/strategies/base.rb +3 -1
  75. data/lib/devise/strategies/database_authenticatable.rb +15 -4
  76. data/lib/devise/strategies/rememberable.rb +15 -3
  77. data/lib/devise/test/controller_helpers.rb +167 -0
  78. data/lib/devise/test/integration_helpers.rb +63 -0
  79. data/lib/devise/test_helpers.rb +7 -123
  80. data/lib/devise/time_inflector.rb +4 -2
  81. data/lib/devise/token_generator.rb +32 -0
  82. data/lib/devise/version.rb +3 -1
  83. data/lib/devise.rb +124 -78
  84. data/lib/generators/active_record/devise_generator.rb +64 -15
  85. data/lib/generators/active_record/templates/migration.rb +9 -8
  86. data/lib/generators/active_record/templates/migration_existing.rb +9 -8
  87. data/lib/generators/devise/controllers_generator.rb +46 -0
  88. data/lib/generators/devise/devise_generator.rb +10 -6
  89. data/lib/generators/devise/install_generator.rb +19 -1
  90. data/lib/generators/devise/orm_helpers.rb +17 -9
  91. data/lib/generators/devise/views_generator.rb +51 -28
  92. data/lib/generators/mongoid/devise_generator.rb +24 -24
  93. data/lib/generators/templates/README +13 -12
  94. data/lib/generators/templates/controllers/README +14 -0
  95. data/lib/generators/templates/controllers/confirmations_controller.rb +30 -0
  96. data/lib/generators/templates/controllers/omniauth_callbacks_controller.rb +30 -0
  97. data/lib/generators/templates/controllers/passwords_controller.rb +34 -0
  98. data/lib/generators/templates/controllers/registrations_controller.rb +62 -0
  99. data/lib/generators/templates/controllers/sessions_controller.rb +27 -0
  100. data/lib/generators/templates/controllers/unlocks_controller.rb +30 -0
  101. data/lib/generators/templates/devise.rb +118 -53
  102. data/lib/generators/templates/markerb/confirmation_instructions.markerb +1 -1
  103. data/lib/generators/templates/markerb/email_changed.markerb +7 -0
  104. data/lib/generators/templates/markerb/password_change.markerb +3 -0
  105. data/lib/generators/templates/markerb/reset_password_instructions.markerb +1 -1
  106. data/lib/generators/templates/markerb/unlock_instructions.markerb +1 -1
  107. data/lib/generators/templates/simple_form_for/confirmations/new.html.erb +6 -2
  108. data/lib/generators/templates/simple_form_for/passwords/edit.html.erb +12 -4
  109. data/lib/generators/templates/simple_form_for/passwords/new.html.erb +5 -2
  110. data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +14 -6
  111. data/lib/generators/templates/simple_form_for/registrations/new.html.erb +12 -4
  112. data/lib/generators/templates/simple_form_for/sessions/new.html.erb +11 -6
  113. data/lib/generators/templates/simple_form_for/unlocks/new.html.erb +5 -2
  114. metadata +73 -294
  115. data/.gitignore +0 -10
  116. data/.travis.yml +0 -20
  117. data/.yardopts +0 -9
  118. data/CHANGELOG.rdoc +0 -941
  119. data/CONTRIBUTING.md +0 -14
  120. data/Gemfile +0 -31
  121. data/Gemfile.lock +0 -159
  122. data/Rakefile +0 -35
  123. data/app/views/devise/_links.erb +0 -3
  124. data/devise.gemspec +0 -26
  125. data/devise.png +0 -0
  126. data/gemfiles/Gemfile.rails-3.2.x +0 -31
  127. data/gemfiles/Gemfile.rails-3.2.x.lock +0 -156
  128. data/lib/devise/models/token_authenticatable.rb +0 -89
  129. data/lib/devise/strategies/token_authenticatable.rb +0 -91
  130. data/test/controllers/custom_strategy_test.rb +0 -62
  131. data/test/controllers/helpers_test.rb +0 -253
  132. data/test/controllers/internal_helpers_test.rb +0 -120
  133. data/test/controllers/passwords_controller_test.rb +0 -32
  134. data/test/controllers/sessions_controller_test.rb +0 -99
  135. data/test/controllers/url_helpers_test.rb +0 -59
  136. data/test/delegator_test.rb +0 -19
  137. data/test/devise_test.rb +0 -83
  138. data/test/failure_app_test.rb +0 -221
  139. data/test/generators/active_record_generator_test.rb +0 -73
  140. data/test/generators/devise_generator_test.rb +0 -39
  141. data/test/generators/install_generator_test.rb +0 -13
  142. data/test/generators/mongoid_generator_test.rb +0 -23
  143. data/test/generators/views_generator_test.rb +0 -67
  144. data/test/helpers/devise_helper_test.rb +0 -51
  145. data/test/integration/authenticatable_test.rb +0 -699
  146. data/test/integration/confirmable_test.rb +0 -299
  147. data/test/integration/database_authenticatable_test.rb +0 -84
  148. data/test/integration/http_authenticatable_test.rb +0 -115
  149. data/test/integration/lockable_test.rb +0 -242
  150. data/test/integration/omniauthable_test.rb +0 -133
  151. data/test/integration/recoverable_test.rb +0 -335
  152. data/test/integration/registerable_test.rb +0 -349
  153. data/test/integration/rememberable_test.rb +0 -165
  154. data/test/integration/timeoutable_test.rb +0 -150
  155. data/test/integration/token_authenticatable_test.rb +0 -205
  156. data/test/integration/trackable_test.rb +0 -92
  157. data/test/mailers/confirmation_instructions_test.rb +0 -111
  158. data/test/mailers/reset_password_instructions_test.rb +0 -92
  159. data/test/mailers/unlock_instructions_test.rb +0 -87
  160. data/test/mapping_test.rb +0 -127
  161. data/test/models/authenticatable_test.rb +0 -13
  162. data/test/models/confirmable_test.rb +0 -452
  163. data/test/models/database_authenticatable_test.rb +0 -226
  164. data/test/models/lockable_test.rb +0 -282
  165. data/test/models/omniauthable_test.rb +0 -7
  166. data/test/models/recoverable_test.rb +0 -222
  167. data/test/models/registerable_test.rb +0 -7
  168. data/test/models/rememberable_test.rb +0 -175
  169. data/test/models/serializable_test.rb +0 -49
  170. data/test/models/timeoutable_test.rb +0 -46
  171. data/test/models/token_authenticatable_test.rb +0 -55
  172. data/test/models/trackable_test.rb +0 -13
  173. data/test/models/validatable_test.rb +0 -127
  174. data/test/models_test.rb +0 -163
  175. data/test/omniauth/config_test.rb +0 -57
  176. data/test/omniauth/url_helpers_test.rb +0 -54
  177. data/test/orm/active_record.rb +0 -10
  178. data/test/orm/mongoid.rb +0 -13
  179. data/test/parameter_sanitizer_test.rb +0 -58
  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 -6
  184. data/test/rails_app/app/controllers/admins/sessions_controller.rb +0 -6
  185. data/test/rails_app/app/controllers/admins_controller.rb +0 -11
  186. data/test/rails_app/app/controllers/application_controller.rb +0 -9
  187. data/test/rails_app/app/controllers/home_controller.rb +0 -25
  188. data/test/rails_app/app/controllers/publisher/registrations_controller.rb +0 -2
  189. data/test/rails_app/app/controllers/publisher/sessions_controller.rb +0 -2
  190. data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +0 -14
  191. data/test/rails_app/app/controllers/users_controller.rb +0 -31
  192. data/test/rails_app/app/helpers/application_helper.rb +0 -3
  193. data/test/rails_app/app/mailers/users/mailer.rb +0 -12
  194. data/test/rails_app/app/mongoid/admin.rb +0 -29
  195. data/test/rails_app/app/mongoid/shim.rb +0 -23
  196. data/test/rails_app/app/mongoid/user.rb +0 -42
  197. data/test/rails_app/app/views/admins/index.html.erb +0 -1
  198. data/test/rails_app/app/views/admins/sessions/new.html.erb +0 -2
  199. data/test/rails_app/app/views/home/admin_dashboard.html.erb +0 -1
  200. data/test/rails_app/app/views/home/index.html.erb +0 -1
  201. data/test/rails_app/app/views/home/join.html.erb +0 -1
  202. data/test/rails_app/app/views/home/private.html.erb +0 -1
  203. data/test/rails_app/app/views/home/user_dashboard.html.erb +0 -1
  204. data/test/rails_app/app/views/layouts/application.html.erb +0 -24
  205. data/test/rails_app/app/views/users/edit_form.html.erb +0 -1
  206. data/test/rails_app/app/views/users/index.html.erb +0 -1
  207. data/test/rails_app/app/views/users/mailer/confirmation_instructions.erb +0 -1
  208. data/test/rails_app/app/views/users/sessions/new.html.erb +0 -1
  209. data/test/rails_app/bin/bundle +0 -3
  210. data/test/rails_app/bin/rails +0 -4
  211. data/test/rails_app/bin/rake +0 -4
  212. data/test/rails_app/config/application.rb +0 -40
  213. data/test/rails_app/config/boot.rb +0 -8
  214. data/test/rails_app/config/database.yml +0 -18
  215. data/test/rails_app/config/environment.rb +0 -5
  216. data/test/rails_app/config/environments/development.rb +0 -34
  217. data/test/rails_app/config/environments/production.rb +0 -84
  218. data/test/rails_app/config/environments/test.rb +0 -36
  219. data/test/rails_app/config/initializers/backtrace_silencers.rb +0 -7
  220. data/test/rails_app/config/initializers/devise.rb +0 -178
  221. data/test/rails_app/config/initializers/inflections.rb +0 -2
  222. data/test/rails_app/config/initializers/secret_token.rb +0 -8
  223. data/test/rails_app/config/initializers/session_store.rb +0 -1
  224. data/test/rails_app/config/routes.rb +0 -104
  225. data/test/rails_app/config.ru +0 -4
  226. data/test/rails_app/db/migrate/20100401102949_create_tables.rb +0 -74
  227. data/test/rails_app/db/schema.rb +0 -52
  228. data/test/rails_app/lib/shared_admin.rb +0 -14
  229. data/test/rails_app/lib/shared_user.rb +0 -25
  230. data/test/rails_app/public/404.html +0 -26
  231. data/test/rails_app/public/422.html +0 -26
  232. data/test/rails_app/public/500.html +0 -26
  233. data/test/rails_app/public/favicon.ico +0 -0
  234. data/test/routes_test.rb +0 -250
  235. data/test/support/assertions.rb +0 -40
  236. data/test/support/helpers.rb +0 -91
  237. data/test/support/integration.rb +0 -92
  238. data/test/support/locale/en.yml +0 -4
  239. data/test/support/webrat/integrations/rails.rb +0 -24
  240. data/test/test_helper.rb +0 -34
  241. data/test/test_helpers_test.rb +0 -151
  242. data/test/test_models.rb +0 -26
@@ -1,335 +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
- click_button 'Send me reset password instructions'
18
- end
19
-
20
- def reset_password(options={}, &block)
21
- visit edit_user_password_path(:reset_password_token => options[:reset_password_token]) unless options[:visit] == false
22
- assert_response :success
23
-
24
- fill_in 'New password', :with => '987654321'
25
- fill_in 'Confirm new password', :with => '987654321'
26
- yield if block_given?
27
- click_button 'Change my password'
28
- end
29
-
30
- test 'reset password with email of different case should succeed when email is in the list of case insensitive keys' do
31
- create_user(:email => 'Foo@Bar.com')
32
-
33
- request_forgot_password do
34
- fill_in 'email', :with => 'foo@bar.com'
35
- end
36
-
37
- assert_current_url '/users/sign_in'
38
- assert_contain 'You will receive an email with instructions about how to reset your password in a few minutes.'
39
- end
40
-
41
- test 'reset password with email should send an email from a custom mailer' do
42
- create_user(:email => 'Foo@Bar.com')
43
-
44
- User.any_instance.stubs(:devise_mailer).returns(Users::Mailer)
45
- request_forgot_password do
46
- fill_in 'email', :with => 'foo@bar.com'
47
- end
48
- assert_equal ['custom@example.com'], ActionMailer::Base.deliveries.last.from
49
- end
50
-
51
- test 'reset password with email of different case should fail when email is NOT the list of case insensitive keys' do
52
- swap Devise, :case_insensitive_keys => [] do
53
- create_user(:email => 'Foo@Bar.com')
54
-
55
- request_forgot_password do
56
- fill_in 'email', :with => 'foo@bar.com'
57
- end
58
-
59
- assert_response :success
60
- assert_current_url '/users/password'
61
- assert_have_selector "input[type=email][value='foo@bar.com']"
62
- assert_contain 'not found'
63
- end
64
- end
65
-
66
- test 'reset password with email with extra whitespace should succeed when email is in the list of strip whitespace keys' do
67
- create_user(:email => 'foo@bar.com')
68
-
69
- request_forgot_password do
70
- fill_in 'email', :with => ' foo@bar.com '
71
- end
72
-
73
- assert_current_url '/users/sign_in'
74
- assert_contain 'You will receive an email with instructions about how to reset your password in a few minutes.'
75
- end
76
-
77
- test 'reset password with email with extra whitespace should fail when email is NOT the list of strip whitespace keys' do
78
- swap Devise, :strip_whitespace_keys => [] do
79
- create_user(:email => 'foo@bar.com')
80
-
81
- request_forgot_password do
82
- fill_in 'email', :with => ' foo@bar.com '
83
- end
84
-
85
- assert_response :success
86
- assert_current_url '/users/password'
87
- assert_have_selector "input[type=email][value=' foo@bar.com ']"
88
- assert_contain 'not found'
89
- end
90
- end
91
-
92
- test 'authenticated user should not be able to visit forgot password page' do
93
- sign_in_as_user
94
- assert warden.authenticated?(:user)
95
-
96
- get new_user_password_path
97
-
98
- assert_response :redirect
99
- assert_redirected_to root_path
100
- end
101
-
102
- test 'not authenticated user should be able to request a forgot password' do
103
- create_user
104
- request_forgot_password
105
-
106
- assert_current_url '/users/sign_in'
107
- assert_contain 'You will receive an email with instructions about how to reset your password in a few minutes.'
108
- end
109
-
110
- test 'not authenticated user with invalid email should receive an error message' do
111
- request_forgot_password do
112
- fill_in 'email', :with => 'invalid.test@test.com'
113
- end
114
-
115
- assert_response :success
116
- assert_current_url '/users/password'
117
- assert_have_selector "input[type=email][value='invalid.test@test.com']"
118
- assert_contain 'not found'
119
- end
120
-
121
- test 'authenticated user should not be able to visit edit password page' do
122
- sign_in_as_user
123
- get edit_user_password_path
124
- assert_response :redirect
125
- assert_redirected_to root_path
126
- assert warden.authenticated?(:user)
127
- end
128
-
129
- test 'not authenticated user without a reset password token should not be able to visit the page' do
130
- get edit_user_password_path
131
- assert_response :redirect
132
- assert_redirected_to "/users/sign_in"
133
- end
134
-
135
- test 'not authenticated user with invalid reset password token should not be able to change his password' do
136
- user = create_user
137
- reset_password :reset_password_token => 'invalid_reset_password'
138
-
139
- assert_response :success
140
- assert_current_url '/users/password'
141
- assert_have_selector '#error_explanation'
142
- assert_contain /Reset password token(.*)invalid/
143
- assert_not user.reload.valid_password?('987654321')
144
- end
145
-
146
- test 'not authenticated user with valid reset password token but invalid password should not be able to change his password' do
147
- user = create_user
148
- request_forgot_password
149
- reset_password :reset_password_token => user.reload.reset_password_token do
150
- fill_in 'Confirm new password', :with => 'other_password'
151
- end
152
-
153
- assert_response :success
154
- assert_current_url '/users/password'
155
- assert_have_selector '#error_explanation'
156
- assert_contain Devise.rails4? ?
157
- "Password confirmation doesn't match Password" : "Password doesn't match confirmation"
158
- assert_not user.reload.valid_password?('987654321')
159
- end
160
-
161
- test 'not authenticated user with valid data should be able to change his password' do
162
- user = create_user
163
- request_forgot_password
164
- reset_password :reset_password_token => user.reload.reset_password_token
165
-
166
- assert_current_url '/'
167
- assert_contain 'Your password was changed successfully. You are now signed in.'
168
- assert user.reload.valid_password?('987654321')
169
- end
170
-
171
- test 'after entering invalid data user should still be able to change his password' do
172
- user = create_user
173
- request_forgot_password
174
- reset_password :reset_password_token => user.reload.reset_password_token do
175
- fill_in 'Confirm new password', :with => 'other_password'
176
- end
177
- assert_response :success
178
- assert_have_selector '#error_explanation'
179
- assert_not user.reload.valid_password?('987654321')
180
-
181
- reset_password :reset_password_token => user.reload.reset_password_token, :visit => false
182
- assert_contain 'Your password was changed successfully.'
183
- assert user.reload.valid_password?('987654321')
184
- end
185
-
186
- test 'sign in user automatically after changing its password' do
187
- user = create_user
188
- request_forgot_password
189
- reset_password :reset_password_token => user.reload.reset_password_token
190
-
191
- assert warden.authenticated?(:user)
192
- end
193
-
194
- test 'does not sign in user automatically after changing its password if it\'s locked and unlock strategy is :none or :time' do
195
- [:none, :time].each do |strategy|
196
- swap Devise, :unlock_strategy => strategy do
197
- user = create_user(:locked => true)
198
- request_forgot_password
199
- reset_password :reset_password_token => user.reload.reset_password_token
200
-
201
- assert_contain 'Your password was changed successfully.'
202
- assert_not_contain 'You are now signed in.'
203
- assert_equal new_user_session_path, @request.path
204
- assert !warden.authenticated?(:user)
205
- end
206
- end
207
- end
208
-
209
- test 'unlocks and signs in locked user automatically after changing it\'s password if unlock strategy is :email' do
210
- swap Devise, :unlock_strategy => :email do
211
- user = create_user(:locked => true)
212
- request_forgot_password
213
- reset_password :reset_password_token => user.reload.reset_password_token
214
-
215
- assert_contain 'Your password was changed successfully.'
216
- assert !user.reload.access_locked?
217
- assert warden.authenticated?(:user)
218
- end
219
- end
220
-
221
- test 'unlocks and signs in locked user automatically after changing it\'s password if unlock strategy is :both' do
222
- swap Devise, :unlock_strategy => :both do
223
- user = create_user(:locked => true)
224
- request_forgot_password
225
- reset_password :reset_password_token => user.reload.reset_password_token
226
-
227
- assert_contain 'Your password was changed successfully.'
228
- assert !user.reload.access_locked?
229
- assert warden.authenticated?(:user)
230
- end
231
- end
232
-
233
- test 'sign in user automatically and confirm after changing its password if it\'s not confirmed' do
234
- user = create_user(:confirm => false)
235
- request_forgot_password
236
- reset_password :reset_password_token => user.reload.reset_password_token
237
-
238
- assert warden.authenticated?(:user)
239
- assert user.reload.confirmed?
240
- end
241
-
242
- test 'reset password request with valid E-Mail in XML format should return valid response' do
243
- create_user
244
- post user_password_path(:format => 'xml'), :user => {:email => "user@test.com"}
245
- assert_response :success
246
- assert_equal response.body, { }.to_xml
247
- end
248
-
249
- test 'reset password request with invalid E-Mail in XML format should return valid response' do
250
- create_user
251
- post user_password_path(:format => 'xml'), :user => {:email => "invalid.test@test.com"}
252
- assert_response :unprocessable_entity
253
- assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
254
- end
255
-
256
- test 'reset password request with invalid E-Mail in XML format should return empty and valid response' do
257
- swap Devise, :paranoid => true do
258
- create_user
259
- post user_password_path(:format => 'xml'), :user => {:email => "invalid@test.com"}
260
- assert_response :success
261
- assert_equal response.body, { }.to_xml
262
- end
263
- end
264
-
265
- test 'change password with valid parameters in XML format should return valid response' do
266
- user = create_user
267
- request_forgot_password
268
- put user_password_path(:format => 'xml'), :user => {:reset_password_token => user.reload.reset_password_token, :password => '987654321', :password_confirmation => '987654321'}
269
- assert_response :success
270
- assert warden.authenticated?(:user)
271
- end
272
-
273
- test 'change password with invalid token in XML format should return invalid response' do
274
- create_user
275
- request_forgot_password
276
- put user_password_path(:format => 'xml'), :user => {:reset_password_token => 'invalid.token', :password => '987654321', :password_confirmation => '987654321'}
277
- assert_response :unprocessable_entity
278
- assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
279
- end
280
-
281
- test 'change password with invalid new password in XML format should return invalid response' do
282
- user = create_user
283
- request_forgot_password
284
- put user_password_path(:format => 'xml'), :user => {:reset_password_token => user.reload.reset_password_token, :password => '', :password_confirmation => '987654321'}
285
- assert_response :unprocessable_entity
286
- assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
287
- end
288
-
289
- test "when using json requests to ask a confirmable request, should not return the object" do
290
- user = create_user(:confirm => false)
291
-
292
- post user_password_path(:format => :json), :user => { :email => user.email }
293
-
294
- assert_response :success
295
- assert_equal response.body, "{}"
296
- end
297
-
298
- 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
299
- swap Devise, :paranoid => true do
300
- visit_new_password_path
301
- fill_in "email", :with => "arandomemail@test.com"
302
- click_button 'Send me reset password instructions'
303
-
304
- assert_not_contain "1 error prohibited this user from being saved:"
305
- assert_not_contain "Email not found"
306
- 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."
307
- assert_current_url "/users/sign_in"
308
- end
309
- end
310
-
311
- 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
312
- swap Devise, :paranoid => true do
313
- user = create_user
314
- visit_new_password_path
315
- fill_in 'email', :with => user.email
316
- click_button 'Send me reset password instructions'
317
-
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 "after recovering a password, should set failed attempts to 0" do
324
- user = create_user
325
- user.update_attribute(:failed_attempts, 10)
326
-
327
- assert_equal 10, user.failed_attempts
328
- request_forgot_password
329
- reset_password :reset_password_token => user.reload.reset_password_token
330
-
331
- assert warden.authenticated?(:user)
332
- user.reload
333
- assert_equal 0, user.failed_attempts
334
- end
335
- end
@@ -1,349 +0,0 @@
1
- require 'test_helper'
2
-
3
- class RegistrationTest < ActionDispatch::IntegrationTest
4
-
5
- test 'a guest admin should be able to sign in successfully' do
6
- get new_admin_session_path
7
- click_link 'Sign up'
8
-
9
- assert_template 'registrations/new'
10
-
11
- fill_in 'email', :with => 'new_user@test.com'
12
- fill_in 'password', :with => 'new_user123'
13
- fill_in 'password confirmation', :with => 'new_user123'
14
- click_button 'Sign up'
15
-
16
- assert_contain 'You have signed up successfully'
17
- assert warden.authenticated?(:admin)
18
- assert_current_url "/admin_area/home"
19
-
20
- admin = Admin.order(:id).last
21
- assert_equal admin.email, 'new_user@test.com'
22
- end
23
-
24
- test 'a guest admin should be able to sign in and be redirected to a custom location' do
25
- Devise::RegistrationsController.any_instance.stubs(:after_sign_up_path_for).returns("/?custom=1")
26
- get new_admin_session_path
27
- click_link 'Sign up'
28
-
29
- fill_in 'email', :with => 'new_user@test.com'
30
- fill_in 'password', :with => 'new_user123'
31
- fill_in 'password confirmation', :with => 'new_user123'
32
- click_button 'Sign up'
33
-
34
- assert_contain 'Welcome! You have signed up successfully.'
35
- assert warden.authenticated?(:admin)
36
- assert_current_url "/?custom=1"
37
- end
38
-
39
- def user_sign_up
40
- ActionMailer::Base.deliveries.clear
41
-
42
- get new_user_registration_path
43
-
44
- fill_in 'email', :with => 'new_user@test.com'
45
- fill_in 'password', :with => 'new_user123'
46
- fill_in 'password confirmation', :with => 'new_user123'
47
- click_button 'Sign up'
48
- end
49
-
50
- test 'a guest user should be able to sign up successfully and be blocked by confirmation' do
51
- user_sign_up
52
-
53
- assert_contain 'A message with a confirmation link has been sent to your email address. Please open the link to activate your account.'
54
- assert_not_contain 'You have to confirm your account before continuing'
55
- assert_current_url "/"
56
-
57
- assert_not warden.authenticated?(:user)
58
-
59
- user = User.order(:id).last
60
- assert_equal user.email, 'new_user@test.com'
61
- assert_not user.confirmed?
62
- end
63
-
64
- test 'a guest user should receive the confirmation instructions from the default mailer' do
65
- user_sign_up
66
- assert_equal ['please-change-me@config-initializers-devise.com'], ActionMailer::Base.deliveries.first.from
67
- end
68
-
69
- test 'a guest user should receive the confirmation instructions from a custom mailer' do
70
- User.any_instance.stubs(:devise_mailer).returns(Users::Mailer)
71
- user_sign_up
72
- assert_equal ['custom@example.com'], ActionMailer::Base.deliveries.first.from
73
- end
74
-
75
- test 'a guest user should be blocked by confirmation and redirected to a custom path' do
76
- Devise::RegistrationsController.any_instance.stubs(:after_inactive_sign_up_path_for).returns("/?custom=1")
77
- get new_user_registration_path
78
-
79
- fill_in 'email', :with => 'new_user@test.com'
80
- fill_in 'password', :with => 'new_user123'
81
- fill_in 'password confirmation', :with => 'new_user123'
82
- click_button 'Sign up'
83
-
84
- assert_current_url "/?custom=1"
85
- assert_not warden.authenticated?(:user)
86
- end
87
-
88
- test 'a guest user cannot sign up with invalid information' do
89
- # Dirty tracking behavior prevents email validations from being applied:
90
- # https://github.com/mongoid/mongoid/issues/756
91
- (pending "Fails on Mongoid < 2.1"; break) if defined?(Mongoid) && Mongoid::VERSION.to_f < 2.1
92
-
93
- get new_user_registration_path
94
-
95
- fill_in 'email', :with => 'invalid_email'
96
- fill_in 'password', :with => 'new_user123'
97
- fill_in 'password confirmation', :with => 'new_user321'
98
- click_button 'Sign up'
99
-
100
- assert_template 'registrations/new'
101
- assert_have_selector '#error_explanation'
102
- assert_contain "Email is invalid"
103
- assert_contain Devise.rails4? ?
104
- "Password confirmation doesn't match Password" : "Password doesn't match confirmation"
105
- assert_contain "2 errors prohibited"
106
- assert_nil User.first
107
-
108
- assert_not warden.authenticated?(:user)
109
- end
110
-
111
- test 'a guest should not sign up with email/password that already exists' do
112
- # Dirty tracking behavior prevents email validations from being applied:
113
- # https://github.com/mongoid/mongoid/issues/756
114
- (pending "Fails on Mongoid < 2.1"; break) if defined?(Mongoid) && Mongoid::VERSION.to_f < 2.1
115
-
116
- create_user
117
- get new_user_registration_path
118
-
119
- fill_in 'email', :with => 'user@test.com'
120
- fill_in 'password', :with => '123456'
121
- fill_in 'password confirmation', :with => '123456'
122
- click_button 'Sign up'
123
-
124
- assert_current_url '/users'
125
- assert_contain(/Email.*already.*taken/)
126
-
127
- assert_not warden.authenticated?(:user)
128
- end
129
-
130
- test 'a guest should not be able to change account' do
131
- get edit_user_registration_path
132
- assert_redirected_to new_user_session_path
133
- follow_redirect!
134
- assert_contain 'You need to sign in or sign up before continuing.'
135
- end
136
-
137
- test 'a signed in user should not be able to access sign up' do
138
- sign_in_as_user
139
- get new_user_registration_path
140
- assert_redirected_to root_path
141
- end
142
-
143
- test 'a signed in user should be able to edit his account' do
144
- sign_in_as_user
145
- get edit_user_registration_path
146
-
147
- fill_in 'email', :with => 'user.new@example.com'
148
- fill_in 'current password', :with => '12345678'
149
- click_button 'Update'
150
-
151
- assert_current_url '/'
152
- assert_contain 'You updated your account successfully.'
153
-
154
- assert_equal "user.new@example.com", User.first.email
155
- end
156
-
157
- test 'a signed in user should still be able to use the website after changing his password' do
158
- sign_in_as_user
159
- get edit_user_registration_path
160
-
161
- fill_in 'password', :with => '1234567890'
162
- fill_in 'password confirmation', :with => '1234567890'
163
- fill_in 'current password', :with => '12345678'
164
- click_button 'Update'
165
-
166
- assert_contain 'You updated your account successfully.'
167
- get users_path
168
- assert warden.authenticated?(:user)
169
- end
170
-
171
- test 'a signed in user should not change his current user with invalid password' do
172
- sign_in_as_user
173
- get edit_user_registration_path
174
-
175
- fill_in 'email', :with => 'user.new@example.com'
176
- fill_in 'current password', :with => 'invalid'
177
- click_button 'Update'
178
-
179
- assert_template 'registrations/edit'
180
- assert_contain 'user@test.com'
181
- assert_have_selector 'form input[value="user.new@example.com"]'
182
-
183
- assert_equal "user@test.com", User.first.email
184
- end
185
-
186
- test 'a signed in user should be able to edit his password' do
187
- sign_in_as_user
188
- get edit_user_registration_path
189
-
190
- fill_in 'password', :with => 'pass1234'
191
- fill_in 'password confirmation', :with => 'pass1234'
192
- fill_in 'current password', :with => '12345678'
193
- click_button 'Update'
194
-
195
- assert_current_url '/'
196
- assert_contain 'You updated your account successfully.'
197
-
198
- assert User.first.valid_password?('pass1234')
199
- end
200
-
201
- test 'a signed in user should not be able to edit his password with invalid confirmation' do
202
- sign_in_as_user
203
- get edit_user_registration_path
204
-
205
- fill_in 'password', :with => 'pas123'
206
- fill_in 'password confirmation', :with => ''
207
- fill_in 'current password', :with => '12345678'
208
- click_button 'Update'
209
-
210
- assert_contain Devise.rails4? ?
211
- "Password confirmation doesn't match Password" : "Password doesn't match confirmation"
212
- assert_not User.first.valid_password?('pas123')
213
- end
214
-
215
- test 'a signed in user should be able to cancel his account' do
216
- sign_in_as_user
217
- get edit_user_registration_path
218
-
219
- click_button "Cancel my account"
220
- assert_contain "Bye! Your account was successfully cancelled. We hope to see you again soon."
221
-
222
- assert User.all.empty?
223
- end
224
-
225
- test 'a user should be able to cancel sign up by deleting data in the session' do
226
- get "/set"
227
- assert_equal "something", @request.session["devise.foo_bar"]
228
-
229
- get "/users/sign_up"
230
- assert_equal "something", @request.session["devise.foo_bar"]
231
-
232
- get "/users/cancel"
233
- assert_nil @request.session["devise.foo_bar"]
234
- assert_redirected_to new_user_registration_path
235
- end
236
-
237
- test 'a user with XML sign up stub' do
238
- get new_user_registration_path(:format => 'xml')
239
- assert_response :success
240
- assert_match %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<user>), response.body
241
- assert_no_match(/<confirmation-token/, response.body)
242
- end
243
-
244
- test 'a user with JSON sign up stub' do
245
- get new_user_registration_path(:format => 'json')
246
- assert_response :success
247
- assert_match %({"user":), response.body
248
- assert_no_match(/"confirmation_token"/, response.body)
249
- end
250
-
251
- test 'an admin sign up with valid information in XML format should return valid response' do
252
- post admin_registration_path(:format => 'xml'), :admin => { :email => 'new_user@test.com', :password => 'new_user123', :password_confirmation => 'new_user123' }
253
- assert_response :success
254
- assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<admin>)
255
-
256
- admin = Admin.order(:id).last
257
- assert_equal admin.email, 'new_user@test.com'
258
- end
259
-
260
- test 'a user sign up with valid information in XML format should return valid response' do
261
- post user_registration_path(:format => 'xml'), :user => { :email => 'new_user@test.com', :password => 'new_user123', :password_confirmation => 'new_user123' }
262
- assert_response :success
263
- assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<user>)
264
-
265
- user = User.order(:id).last
266
- assert_equal user.email, 'new_user@test.com'
267
- end
268
-
269
- test 'a user sign up with invalid information in XML format should return invalid response' do
270
- post user_registration_path(:format => 'xml'), :user => { :email => 'new_user@test.com', :password => 'new_user123', :password_confirmation => 'invalid' }
271
- assert_response :unprocessable_entity
272
- assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
273
- end
274
-
275
- test 'a user update information with valid data in XML format should return valid response' do
276
- user = sign_in_as_user
277
- put user_registration_path(:format => 'xml'), :user => { :current_password => '12345678', :email => 'user.new@test.com' }
278
- assert_response :success
279
- assert_equal user.reload.email, 'user.new@test.com'
280
- end
281
-
282
- test 'a user update information with invalid data in XML format should return invalid response' do
283
- user = sign_in_as_user
284
- put user_registration_path(:format => 'xml'), :user => { :current_password => 'invalid', :email => 'user.new@test.com' }
285
- assert_response :unprocessable_entity
286
- assert_equal user.reload.email, 'user@test.com'
287
- end
288
-
289
- test 'a user cancel his account in XML format should return valid response' do
290
- sign_in_as_user
291
- delete user_registration_path(:format => 'xml')
292
- assert_response :success
293
- assert_equal User.count, 0
294
- end
295
- end
296
-
297
- class ReconfirmableRegistrationTest < ActionDispatch::IntegrationTest
298
- test 'a signed in admin should see a more appropriate flash message when editing his account if reconfirmable is enabled' do
299
- sign_in_as_admin
300
- get edit_admin_registration_path
301
-
302
- fill_in 'email', :with => 'admin.new@example.com'
303
- fill_in 'current password', :with => '123456'
304
- click_button 'Update'
305
-
306
- assert_current_url '/admin_area/home'
307
- assert_contain 'but we need to verify your new email address'
308
- assert_equal 'admin.new@example.com', Admin.first.unconfirmed_email
309
-
310
- get edit_admin_registration_path
311
- assert_contain 'Currently waiting confirmation for: admin.new@example.com'
312
- end
313
-
314
- test 'a signed in admin should not see a reconfirmation message if they did not change their password' do
315
- sign_in_as_admin
316
- get edit_admin_registration_path
317
-
318
- fill_in 'password', :with => 'pas123'
319
- fill_in 'password confirmation', :with => 'pas123'
320
- fill_in 'current password', :with => '123456'
321
- click_button 'Update'
322
-
323
- assert_current_url '/admin_area/home'
324
- assert_contain 'You updated your account successfully.'
325
-
326
- assert Admin.first.valid_password?('pas123')
327
- end
328
-
329
- test 'a signed in admin should not see a reconfirmation message if he did not change his email, despite having an unconfirmed email' do
330
- sign_in_as_admin
331
-
332
- get edit_admin_registration_path
333
- fill_in 'email', :with => 'admin.new@example.com'
334
- fill_in 'current password', :with => '123456'
335
- click_button 'Update'
336
-
337
- get edit_admin_registration_path
338
- fill_in 'password', :with => 'pas123'
339
- fill_in 'password confirmation', :with => 'pas123'
340
- fill_in 'current password', :with => '123456'
341
- click_button 'Update'
342
-
343
- assert_current_url '/admin_area/home'
344
- assert_contain 'You updated your account successfully.'
345
-
346
- assert_equal "admin.new@example.com", Admin.first.unconfirmed_email
347
- assert Admin.first.valid_password?('pas123')
348
- end
349
- end