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,363 +0,0 @@
1
- require 'test_helper'
2
-
3
- class RegistrationTest < Devise::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.to_adapter.find_first(order: [:id, :desc])
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
- test 'a guest admin should not see a warning about minimum password length' do
40
- get new_admin_session_path
41
- assert_not_contain 'characters minimum'
42
- end
43
-
44
- def user_sign_up
45
- ActionMailer::Base.deliveries.clear
46
-
47
- get new_user_registration_path
48
-
49
- fill_in 'email', with: 'new_user@test.com'
50
- fill_in 'password', with: 'new_user123'
51
- fill_in 'password confirmation', with: 'new_user123'
52
- click_button 'Sign up'
53
- end
54
-
55
- test 'a guest user should see a warning about minimum password length' do
56
- get new_user_registration_path
57
- assert_contain '7 characters minimum'
58
- end
59
-
60
- test 'a guest user should be able to sign up successfully and be blocked by confirmation' do
61
- user_sign_up
62
-
63
- assert_contain 'A message with a confirmation link has been sent to your email address. Please follow the link to activate your account.'
64
- assert_not_contain 'You have to confirm your account before continuing'
65
- assert_current_url "/"
66
-
67
- refute warden.authenticated?(:user)
68
-
69
- user = User.to_adapter.find_first(order: [:id, :desc])
70
- assert_equal user.email, 'new_user@test.com'
71
- refute user.confirmed?
72
- end
73
-
74
- test 'a guest user should receive the confirmation instructions from the default mailer' do
75
- user_sign_up
76
- assert_equal ['please-change-me@config-initializers-devise.com'], ActionMailer::Base.deliveries.first.from
77
- end
78
-
79
- test 'a guest user should receive the confirmation instructions from a custom mailer' do
80
- User.any_instance.stubs(:devise_mailer).returns(Users::Mailer)
81
- user_sign_up
82
- assert_equal ['custom@example.com'], ActionMailer::Base.deliveries.first.from
83
- end
84
-
85
- test 'a guest user should be blocked by confirmation and redirected to a custom path' do
86
- Devise::RegistrationsController.any_instance.stubs(:after_inactive_sign_up_path_for).returns("/?custom=1")
87
- get new_user_registration_path
88
-
89
- fill_in 'email', with: 'new_user@test.com'
90
- fill_in 'password', with: 'new_user123'
91
- fill_in 'password confirmation', with: 'new_user123'
92
- click_button 'Sign up'
93
-
94
- assert_current_url "/?custom=1"
95
- refute warden.authenticated?(:user)
96
- end
97
-
98
- test 'a guest user cannot sign up with invalid information' do
99
- # Dirty tracking behavior prevents email validations from being applied:
100
- # https://github.com/mongoid/mongoid/issues/756
101
- (pending "Fails on Mongoid < 2.1"; break) if defined?(Mongoid) && Mongoid::VERSION.to_f < 2.1
102
-
103
- get new_user_registration_path
104
-
105
- fill_in 'email', with: 'invalid_email'
106
- fill_in 'password', with: 'new_user123'
107
- fill_in 'password confirmation', with: 'new_user321'
108
- click_button 'Sign up'
109
-
110
- assert_template 'registrations/new'
111
- assert_have_selector '#error_explanation'
112
- assert_contain "Email is invalid"
113
- assert_contain "Password confirmation doesn't match Password"
114
- assert_contain "2 errors prohibited"
115
- assert_nil User.to_adapter.find_first
116
-
117
- refute warden.authenticated?(:user)
118
- end
119
-
120
- test 'a guest should not sign up with email/password that already exists' do
121
- # Dirty tracking behavior prevents email validations from being applied:
122
- # https://github.com/mongoid/mongoid/issues/756
123
- (pending "Fails on Mongoid < 2.1"; break) if defined?(Mongoid) && Mongoid::VERSION.to_f < 2.1
124
-
125
- create_user
126
- get new_user_registration_path
127
-
128
- fill_in 'email', with: 'user@test.com'
129
- fill_in 'password', with: '123456'
130
- fill_in 'password confirmation', with: '123456'
131
- click_button 'Sign up'
132
-
133
- assert_current_url '/users'
134
- assert_contain(/Email.*already.*taken/)
135
-
136
- refute warden.authenticated?(:user)
137
- end
138
-
139
- test 'a guest should not be able to change account' do
140
- get edit_user_registration_path
141
- assert_redirected_to new_user_session_path
142
- follow_redirect!
143
- assert_contain 'You need to sign in or sign up before continuing.'
144
- end
145
-
146
- test 'a signed in user should not be able to access sign up' do
147
- sign_in_as_user
148
- get new_user_registration_path
149
- assert_redirected_to root_path
150
- end
151
-
152
- test 'a signed in user should be able to edit their account' do
153
- sign_in_as_user
154
- get edit_user_registration_path
155
-
156
- fill_in 'email', with: 'user.new@example.com'
157
- fill_in 'current password', with: '12345678'
158
- click_button 'Update'
159
-
160
- assert_current_url '/'
161
- assert_contain 'Your account has been updated successfully.'
162
-
163
- assert_equal "user.new@example.com", User.to_adapter.find_first.email
164
- end
165
-
166
- test 'a signed in user should still be able to use the website after changing their password' do
167
- sign_in_as_user
168
- get edit_user_registration_path
169
-
170
- fill_in 'password', with: '1234567890'
171
- fill_in 'password confirmation', with: '1234567890'
172
- fill_in 'current password', with: '12345678'
173
- click_button 'Update'
174
-
175
- assert_contain 'Your account has been updated successfully.'
176
- get users_path
177
- assert warden.authenticated?(:user)
178
- end
179
-
180
- test 'a signed in user should not change their current user with invalid password' do
181
- sign_in_as_user
182
- get edit_user_registration_path
183
-
184
- fill_in 'email', with: 'user.new@example.com'
185
- fill_in 'current password', with: 'invalid'
186
- click_button 'Update'
187
-
188
- assert_template 'registrations/edit'
189
- assert_contain 'user@test.com'
190
- assert_have_selector 'form input[value="user.new@example.com"]'
191
-
192
- assert_equal "user@test.com", User.to_adapter.find_first.email
193
- end
194
-
195
- test 'a signed in user should be able to edit their password' do
196
- sign_in_as_user
197
- get edit_user_registration_path
198
-
199
- fill_in 'password', with: 'pass1234'
200
- fill_in 'password confirmation', with: 'pass1234'
201
- fill_in 'current password', with: '12345678'
202
- click_button 'Update'
203
-
204
- assert_current_url '/'
205
- assert_contain 'Your account has been updated successfully.'
206
-
207
- assert User.to_adapter.find_first.valid_password?('pass1234')
208
- end
209
-
210
- test 'a signed in user should not be able to edit their password with invalid confirmation' do
211
- sign_in_as_user
212
- get edit_user_registration_path
213
-
214
- fill_in 'password', with: 'pas123'
215
- fill_in 'password confirmation', with: ''
216
- fill_in 'current password', with: '12345678'
217
- click_button 'Update'
218
-
219
- assert_contain "Password confirmation doesn't match Password"
220
- refute User.to_adapter.find_first.valid_password?('pas123')
221
- end
222
-
223
- test 'a signed in user should see a warning about minimum password length' do
224
- sign_in_as_user
225
- get edit_user_registration_path
226
- assert_contain 'characters minimum'
227
- end
228
-
229
- test 'a signed in user should be able to cancel their account' do
230
- sign_in_as_user
231
- get edit_user_registration_path
232
-
233
- click_button "Cancel my account"
234
- assert_contain "Bye! Your account has been successfully cancelled. We hope to see you again soon."
235
-
236
- assert User.to_adapter.find_all.empty?
237
- end
238
-
239
- test 'a user should be able to cancel sign up by deleting data in the session' do
240
- get "/set"
241
- assert_equal "something", @request.session["devise.foo_bar"]
242
-
243
- get "/users/sign_up"
244
- assert_equal "something", @request.session["devise.foo_bar"]
245
-
246
- get "/users/cancel"
247
- assert_nil @request.session["devise.foo_bar"]
248
- assert_redirected_to new_user_registration_path
249
- end
250
-
251
- test 'a user with XML sign up stub' do
252
- get new_user_registration_path(format: 'xml')
253
- assert_response :success
254
- assert_match %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<user>), response.body
255
- assert_no_match(/<confirmation-token/, response.body)
256
- end
257
-
258
- test 'a user with JSON sign up stub' do
259
- get new_user_registration_path(format: 'json')
260
- assert_response :success
261
- assert_match %({"user":), response.body
262
- assert_no_match(/"confirmation_token"/, response.body)
263
- end
264
-
265
- test 'an admin sign up with valid information in XML format should return valid response' do
266
- post admin_registration_path(format: 'xml'), params: { admin: { email: 'new_user@test.com', password: 'new_user123', password_confirmation: 'new_user123' } }
267
- assert_response :success
268
- assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<admin>)
269
-
270
- admin = Admin.to_adapter.find_first(order: [:id, :desc])
271
- assert_equal admin.email, 'new_user@test.com'
272
- end
273
-
274
- test 'a user sign up with valid information in XML format should return valid response' do
275
- post user_registration_path(format: 'xml'), params: { user: { email: 'new_user@test.com', password: 'new_user123', password_confirmation: 'new_user123' } }
276
- assert_response :success
277
- assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<user>)
278
-
279
- user = User.to_adapter.find_first(order: [:id, :desc])
280
- assert_equal user.email, 'new_user@test.com'
281
- end
282
-
283
- test 'a user sign up with invalid information in XML format should return invalid response' do
284
- post user_registration_path(format: 'xml'), params: { user: { email: 'new_user@test.com', password: 'new_user123', password_confirmation: 'invalid' } }
285
- assert_response :unprocessable_entity
286
- assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
287
- end
288
-
289
- test 'a user update information with valid data in XML format should return valid response' do
290
- user = sign_in_as_user
291
- put user_registration_path(format: 'xml'), params: { user: { current_password: '12345678', email: 'user.new@test.com' } }
292
- assert_response :success
293
- assert_equal user.reload.email, 'user.new@test.com'
294
- end
295
-
296
- test 'a user update information with invalid data in XML format should return invalid response' do
297
- user = sign_in_as_user
298
- put user_registration_path(format: 'xml'), params: { user: { current_password: 'invalid', email: 'user.new@test.com' } }
299
- assert_response :unprocessable_entity
300
- assert_equal user.reload.email, 'user@test.com'
301
- end
302
-
303
- test 'a user cancel their account in XML format should return valid response' do
304
- sign_in_as_user
305
- delete user_registration_path(format: 'xml')
306
- assert_response :success
307
- assert_equal User.to_adapter.find_all.size, 0
308
- end
309
- end
310
-
311
- class ReconfirmableRegistrationTest < Devise::IntegrationTest
312
- test 'a signed in admin should see a more appropriate flash message when editing their account if reconfirmable is enabled' do
313
- sign_in_as_admin
314
- get edit_admin_registration_path
315
-
316
- fill_in 'email', with: 'admin.new@example.com'
317
- fill_in 'current password', with: '123456'
318
- click_button 'Update'
319
-
320
- assert_current_url '/admin_area/home'
321
- assert_contain 'but we need to verify your new email address'
322
- assert_equal 'admin.new@example.com', Admin.to_adapter.find_first.unconfirmed_email
323
-
324
- get edit_admin_registration_path
325
- assert_contain 'Currently waiting confirmation for: admin.new@example.com'
326
- end
327
-
328
- test 'a signed in admin should not see a reconfirmation message if they did not change their password' do
329
- sign_in_as_admin
330
- get edit_admin_registration_path
331
-
332
- fill_in 'password', with: 'pas123'
333
- fill_in 'password confirmation', with: 'pas123'
334
- fill_in 'current password', with: '123456'
335
- click_button 'Update'
336
-
337
- assert_current_url '/admin_area/home'
338
- assert_contain 'Your account has been updated successfully.'
339
-
340
- assert Admin.to_adapter.find_first.valid_password?('pas123')
341
- end
342
-
343
- test 'a signed in admin should not see a reconfirmation message if they did not change their email, despite having an unconfirmed email' do
344
- sign_in_as_admin
345
-
346
- get edit_admin_registration_path
347
- fill_in 'email', with: 'admin.new@example.com'
348
- fill_in 'current password', with: '123456'
349
- click_button 'Update'
350
-
351
- get edit_admin_registration_path
352
- fill_in 'password', with: 'pas123'
353
- fill_in 'password confirmation', with: 'pas123'
354
- fill_in 'current password', with: '123456'
355
- click_button 'Update'
356
-
357
- assert_current_url '/admin_area/home'
358
- assert_contain 'Your account has been updated successfully.'
359
-
360
- assert_equal "admin.new@example.com", Admin.to_adapter.find_first.unconfirmed_email
361
- assert Admin.to_adapter.find_first.valid_password?('pas123')
362
- end
363
- end
@@ -1,217 +0,0 @@
1
- require 'test_helper'
2
-
3
- class RememberMeTest < Devise::IntegrationTest
4
- def create_user_and_remember(add_to_token='')
5
- user = create_user
6
- user.remember_me!
7
- raw_cookie = User.serialize_into_cookie(user).tap { |a| a[1] << add_to_token }
8
- cookies['remember_user_token'] = generate_signed_cookie(raw_cookie)
9
- user
10
- end
11
-
12
- def generate_signed_cookie(raw_cookie)
13
- request = if Devise::Test.rails51?
14
- ActionController::TestRequest.create(Class.new) # needs a "controller class"
15
- elsif Devise::Test.rails5?
16
- ActionController::TestRequest.create
17
- else
18
- ActionController::TestRequest.new
19
- end
20
- request.cookie_jar.signed['raw_cookie'] = raw_cookie
21
- request.cookie_jar['raw_cookie']
22
- end
23
-
24
- def signed_cookie(key)
25
- controller.send(:cookies).signed[key]
26
- end
27
-
28
- def cookie_expires(key)
29
- cookie = response.headers["Set-Cookie"].split("\n").grep(/^#{key}/).first
30
- expires = cookie.split(";").map(&:strip).grep(/^expires=/).first
31
- Time.parse(expires).utc
32
- end
33
-
34
- test 'do not remember the user if they have not checked remember me option' do
35
- sign_in_as_user
36
- assert_nil request.cookies["remember_user_cookie"]
37
- end
38
-
39
- test 'handle unverified requests gets rid of caches' do
40
- swap ApplicationController, allow_forgery_protection: true do
41
- post exhibit_user_url(1)
42
- refute warden.authenticated?(:user)
43
-
44
- create_user_and_remember
45
- post exhibit_user_url(1)
46
- assert_equal "User is not authenticated", response.body
47
- refute warden.authenticated?(:user)
48
- end
49
- end
50
-
51
- test 'handle unverified requests does not create cookies on sign in' do
52
- swap ApplicationController, allow_forgery_protection: true do
53
- get new_user_session_path
54
- assert request.session[:_csrf_token]
55
-
56
- post user_session_path, params: {
57
- authenticity_token: "oops",
58
- user: { email: "jose.valim@gmail.com", password: "123456", remember_me: "1" }
59
- }
60
- refute warden.authenticated?(:user)
61
- refute request.cookies['remember_user_token']
62
- end
63
- end
64
-
65
- test 'generate remember token after sign in' do
66
- sign_in_as_user remember_me: true
67
- assert request.cookies['remember_user_token']
68
- end
69
-
70
- test 'generate remember token after sign in setting cookie options' do
71
- # We test this by asserting the cookie is not sent after the redirect
72
- # since we changed the domain. This is the only difference with the
73
- # previous test.
74
- swap Devise, rememberable_options: { domain: "omg.somewhere.com" } do
75
- sign_in_as_user remember_me: true
76
- assert_nil request.cookies["remember_user_token"]
77
- end
78
- end
79
-
80
- test 'generate remember token with a custom key' do
81
- swap Devise, rememberable_options: { key: "v1lat_token" } do
82
- sign_in_as_user remember_me: true
83
- assert request.cookies["v1lat_token"]
84
- end
85
- end
86
-
87
- test 'generate remember token after sign in setting session options' do
88
- begin
89
- Rails.configuration.session_options[:domain] = "omg.somewhere.com"
90
- sign_in_as_user remember_me: true
91
- assert_nil request.cookies["remember_user_token"]
92
- ensure
93
- Rails.configuration.session_options.delete(:domain)
94
- end
95
- end
96
-
97
- test 'remember the user before sign in' do
98
- user = create_user_and_remember
99
- get users_path
100
- assert_response :success
101
- assert warden.authenticated?(:user)
102
- assert warden.user(:user) == user
103
- end
104
-
105
- test 'remember the user before sign up and redirect them to their home' do
106
- create_user_and_remember
107
- get new_user_registration_path
108
- assert warden.authenticated?(:user)
109
- assert_redirected_to root_path
110
- end
111
-
112
- test 'does not extend remember period through sign in' do
113
- swap Devise, extend_remember_period: true, remember_for: 1.year do
114
- user = create_user
115
- user.remember_me!
116
-
117
- user.remember_created_at = old = 10.days.ago
118
- user.save
119
-
120
- sign_in_as_user remember_me: true
121
- user.reload
122
-
123
- assert warden.user(:user) == user
124
- assert_equal old.to_i, user.remember_created_at.to_i
125
- end
126
- end
127
-
128
- test 'extends remember period when extend remember period config is true' do
129
- swap Devise, extend_remember_period: true, remember_for: 1.year do
130
- create_user_and_remember
131
- old_remember_token = nil
132
-
133
- travel_to 1.day.ago do
134
- get root_path
135
- old_remember_token = request.cookies['remember_user_token']
136
- end
137
-
138
- get root_path
139
- current_remember_token = request.cookies['remember_user_token']
140
-
141
- refute_equal old_remember_token, current_remember_token
142
- end
143
- end
144
-
145
- test 'does not extend remember period when extend period config is false' do
146
- swap Devise, extend_remember_period: false, remember_for: 1.year do
147
- create_user_and_remember
148
- old_remember_token = nil
149
-
150
- travel_to 1.day.ago do
151
- get root_path
152
- old_remember_token = request.cookies['remember_user_token']
153
- end
154
-
155
- get root_path
156
- current_remember_token = request.cookies['remember_user_token']
157
-
158
- assert_equal old_remember_token, current_remember_token
159
- end
160
- end
161
-
162
- test 'do not remember other scopes' do
163
- create_user_and_remember
164
- get root_path
165
- assert_response :success
166
- assert warden.authenticated?(:user)
167
- refute warden.authenticated?(:admin)
168
- end
169
-
170
- test 'do not remember with invalid token' do
171
- create_user_and_remember('add')
172
- get users_path
173
- refute warden.authenticated?(:user)
174
- assert_redirected_to new_user_session_path
175
- end
176
-
177
- test 'do not remember with expired token' do
178
- create_user_and_remember
179
- swap Devise, remember_for: 0.days do
180
- get users_path
181
- refute warden.authenticated?(:user)
182
- assert_redirected_to new_user_session_path
183
- end
184
- end
185
-
186
- test 'do not remember the user anymore after forget' do
187
- create_user_and_remember
188
- get users_path
189
- assert warden.authenticated?(:user)
190
-
191
- delete destroy_user_session_path
192
- refute warden.authenticated?(:user)
193
- assert_nil warden.cookies['remember_user_token']
194
-
195
- get users_path
196
- refute warden.authenticated?(:user)
197
- end
198
-
199
- test 'changing user password expires remember me token' do
200
- user = create_user_and_remember
201
- user.password = "another_password"
202
- user.password_confirmation = "another_password"
203
- user.save!
204
-
205
- get users_path
206
- refute warden.authenticated?(:user)
207
- end
208
-
209
- test 'valid sign in calls after_remembered callback' do
210
- user = create_user_and_remember
211
-
212
- User.expects(:serialize_from_cookie).returns user
213
- user.expects :after_remembered
214
-
215
- get new_user_registration_path
216
- end
217
- end