devise 4.1.1 → 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 (255) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +224 -4
  3. data/MIT-LICENSE +2 -1
  4. data/README.md +275 -90
  5. data/app/controllers/devise/confirmations_controller.rb +2 -0
  6. data/app/controllers/devise/omniauth_callbacks_controller.rb +7 -5
  7. data/app/controllers/devise/passwords_controller.rb +3 -0
  8. data/app/controllers/devise/registrations_controller.rb +34 -13
  9. data/app/controllers/devise/sessions_controller.rb +3 -1
  10. data/app/controllers/devise/unlocks_controller.rb +2 -0
  11. data/app/controllers/devise_controller.rb +5 -3
  12. data/app/helpers/devise_helper.rb +23 -18
  13. data/app/mailers/devise/mailer.rb +10 -4
  14. data/app/views/devise/confirmations/new.html.erb +2 -2
  15. data/app/views/devise/mailer/email_changed.html.erb +7 -0
  16. data/app/views/devise/passwords/edit.html.erb +3 -3
  17. data/app/views/devise/passwords/new.html.erb +2 -2
  18. data/app/views/devise/registrations/edit.html.erb +9 -5
  19. data/app/views/devise/registrations/new.html.erb +4 -4
  20. data/app/views/devise/sessions/new.html.erb +4 -4
  21. data/app/views/devise/shared/_error_messages.html.erb +15 -0
  22. data/app/views/devise/shared/_links.html.erb +8 -8
  23. data/app/views/devise/unlocks/new.html.erb +2 -2
  24. data/config/locales/en.yml +5 -2
  25. data/lib/devise.rb +39 -17
  26. data/lib/devise/controllers/helpers.rb +22 -9
  27. data/lib/devise/controllers/rememberable.rb +3 -1
  28. data/lib/devise/controllers/scoped_views.rb +2 -0
  29. data/lib/devise/controllers/sign_in_out.rb +39 -14
  30. data/lib/devise/controllers/store_location.rb +25 -7
  31. data/lib/devise/controllers/url_helpers.rb +3 -1
  32. data/lib/devise/delegator.rb +2 -0
  33. data/lib/devise/encryptor.rb +2 -0
  34. data/lib/devise/failure_app.rb +63 -33
  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 +4 -2
  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 +4 -2
  42. data/lib/devise/hooks/trackable.rb +2 -0
  43. data/lib/devise/mailers/helpers.rb +6 -3
  44. data/lib/devise/mapping.rb +3 -1
  45. data/lib/devise/models.rb +3 -1
  46. data/lib/devise/models/authenticatable.rb +63 -37
  47. data/lib/devise/models/confirmable.rb +79 -22
  48. data/lib/devise/models/database_authenticatable.rb +86 -17
  49. data/lib/devise/models/lockable.rb +17 -3
  50. data/lib/devise/models/omniauthable.rb +2 -0
  51. data/lib/devise/models/recoverable.rb +32 -20
  52. data/lib/devise/models/registerable.rb +4 -0
  53. data/lib/devise/models/rememberable.rb +5 -3
  54. data/lib/devise/models/timeoutable.rb +2 -0
  55. data/lib/devise/models/trackable.rb +15 -1
  56. data/lib/devise/models/validatable.rb +10 -3
  57. data/lib/devise/modules.rb +2 -0
  58. data/lib/devise/omniauth.rb +4 -5
  59. data/lib/devise/omniauth/config.rb +2 -0
  60. data/lib/devise/omniauth/url_helpers.rb +2 -51
  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 +15 -56
  65. data/lib/devise/rails.rb +6 -6
  66. data/lib/devise/rails/deprecated_constant_accessor.rb +39 -0
  67. data/lib/devise/rails/routes.rb +9 -7
  68. data/lib/devise/rails/warden_compat.rb +2 -0
  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 +167 -0
  75. data/lib/devise/test/integration_helpers.rb +63 -0
  76. data/lib/devise/test_helpers.rb +7 -129
  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/generators/active_record/devise_generator.rb +40 -12
  81. data/lib/generators/active_record/templates/migration.rb +3 -1
  82. data/lib/generators/active_record/templates/migration_existing.rb +2 -0
  83. data/lib/generators/devise/controllers_generator.rb +3 -1
  84. data/lib/generators/devise/devise_generator.rb +5 -3
  85. data/lib/generators/devise/install_generator.rb +3 -5
  86. data/lib/generators/devise/orm_helpers.rb +9 -3
  87. data/lib/generators/devise/views_generator.rb +8 -9
  88. data/lib/generators/mongoid/devise_generator.rb +7 -5
  89. data/lib/generators/templates/README +9 -8
  90. data/lib/generators/templates/controllers/confirmations_controller.rb +2 -0
  91. data/lib/generators/templates/controllers/omniauth_callbacks_controller.rb +3 -1
  92. data/lib/generators/templates/controllers/passwords_controller.rb +2 -0
  93. data/lib/generators/templates/controllers/registrations_controller.rb +4 -2
  94. data/lib/generators/templates/controllers/sessions_controller.rb +3 -1
  95. data/lib/generators/templates/controllers/unlocks_controller.rb +2 -0
  96. data/lib/generators/templates/devise.rb +49 -6
  97. data/lib/generators/templates/markerb/email_changed.markerb +7 -0
  98. data/lib/generators/templates/markerb/password_change.markerb +2 -2
  99. data/lib/generators/templates/simple_form_for/confirmations/new.html.erb +5 -1
  100. data/lib/generators/templates/simple_form_for/passwords/edit.html.erb +10 -2
  101. data/lib/generators/templates/simple_form_for/passwords/new.html.erb +4 -1
  102. data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +11 -3
  103. data/lib/generators/templates/simple_form_for/registrations/new.html.erb +11 -3
  104. data/lib/generators/templates/simple_form_for/sessions/new.html.erb +7 -2
  105. data/lib/generators/templates/simple_form_for/unlocks/new.html.erb +4 -1
  106. metadata +16 -297
  107. data/.gitignore +0 -10
  108. data/.travis.yml +0 -44
  109. data/.yardopts +0 -9
  110. data/CODE_OF_CONDUCT.md +0 -22
  111. data/CONTRIBUTING.md +0 -16
  112. data/Gemfile +0 -30
  113. data/Gemfile.lock +0 -182
  114. data/Rakefile +0 -36
  115. data/bin/test +0 -13
  116. data/devise.gemspec +0 -26
  117. data/devise.png +0 -0
  118. data/gemfiles/Gemfile.rails-4.1-stable +0 -30
  119. data/gemfiles/Gemfile.rails-4.1-stable.lock +0 -170
  120. data/gemfiles/Gemfile.rails-4.2-stable +0 -30
  121. data/gemfiles/Gemfile.rails-4.2-stable.lock +0 -192
  122. data/gemfiles/Gemfile.rails-5.0-beta +0 -37
  123. data/gemfiles/Gemfile.rails-5.0-beta.lock +0 -199
  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 -320
  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/omniauthable_test.rb +0 -135
  150. data/test/integration/recoverable_test.rb +0 -347
  151. data/test/integration/registerable_test.rb +0 -357
  152. data/test/integration/rememberable_test.rb +0 -211
  153. data/test/integration/timeoutable_test.rb +0 -184
  154. data/test/integration/trackable_test.rb +0 -92
  155. data/test/mailers/confirmation_instructions_test.rb +0 -115
  156. data/test/mailers/reset_password_instructions_test.rb +0 -96
  157. data/test/mailers/unlock_instructions_test.rb +0 -91
  158. data/test/mapping_test.rb +0 -134
  159. data/test/models/authenticatable_test.rb +0 -23
  160. data/test/models/confirmable_test.rb +0 -511
  161. data/test/models/database_authenticatable_test.rb +0 -269
  162. data/test/models/lockable_test.rb +0 -350
  163. data/test/models/omniauthable_test.rb +0 -7
  164. data/test/models/recoverable_test.rb +0 -251
  165. data/test/models/registerable_test.rb +0 -7
  166. data/test/models/rememberable_test.rb +0 -169
  167. data/test/models/serializable_test.rb +0 -49
  168. data/test/models/timeoutable_test.rb +0 -51
  169. data/test/models/trackable_test.rb +0 -41
  170. data/test/models/validatable_test.rb +0 -119
  171. data/test/models_test.rb +0 -153
  172. data/test/omniauth/config_test.rb +0 -57
  173. data/test/omniauth/url_helpers_test.rb +0 -51
  174. data/test/orm/active_record.rb +0 -17
  175. data/test/orm/mongoid.rb +0 -13
  176. data/test/parameter_sanitizer_test.rb +0 -131
  177. data/test/rails_app/Rakefile +0 -6
  178. data/test/rails_app/app/active_record/admin.rb +0 -6
  179. data/test/rails_app/app/active_record/shim.rb +0 -2
  180. data/test/rails_app/app/active_record/user.rb +0 -7
  181. data/test/rails_app/app/active_record/user_on_engine.rb +0 -7
  182. data/test/rails_app/app/active_record/user_on_main_app.rb +0 -7
  183. data/test/rails_app/app/active_record/user_without_email.rb +0 -8
  184. data/test/rails_app/app/controllers/admins/sessions_controller.rb +0 -6
  185. data/test/rails_app/app/controllers/admins_controller.rb +0 -6
  186. data/test/rails_app/app/controllers/application_controller.rb +0 -11
  187. data/test/rails_app/app/controllers/application_with_fake_engine.rb +0 -30
  188. data/test/rails_app/app/controllers/custom/registrations_controller.rb +0 -31
  189. data/test/rails_app/app/controllers/home_controller.rb +0 -29
  190. data/test/rails_app/app/controllers/publisher/registrations_controller.rb +0 -2
  191. data/test/rails_app/app/controllers/publisher/sessions_controller.rb +0 -2
  192. data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +0 -14
  193. data/test/rails_app/app/controllers/users_controller.rb +0 -31
  194. data/test/rails_app/app/helpers/application_helper.rb +0 -3
  195. data/test/rails_app/app/mailers/users/from_proc_mailer.rb +0 -3
  196. data/test/rails_app/app/mailers/users/mailer.rb +0 -3
  197. data/test/rails_app/app/mailers/users/reply_to_mailer.rb +0 -4
  198. data/test/rails_app/app/mongoid/admin.rb +0 -29
  199. data/test/rails_app/app/mongoid/shim.rb +0 -23
  200. data/test/rails_app/app/mongoid/user.rb +0 -39
  201. data/test/rails_app/app/mongoid/user_on_engine.rb +0 -39
  202. data/test/rails_app/app/mongoid/user_on_main_app.rb +0 -39
  203. data/test/rails_app/app/mongoid/user_without_email.rb +0 -33
  204. data/test/rails_app/app/views/admins/index.html.erb +0 -1
  205. data/test/rails_app/app/views/admins/sessions/new.html.erb +0 -2
  206. data/test/rails_app/app/views/home/admin_dashboard.html.erb +0 -1
  207. data/test/rails_app/app/views/home/index.html.erb +0 -1
  208. data/test/rails_app/app/views/home/join.html.erb +0 -1
  209. data/test/rails_app/app/views/home/private.html.erb +0 -1
  210. data/test/rails_app/app/views/home/user_dashboard.html.erb +0 -1
  211. data/test/rails_app/app/views/layouts/application.html.erb +0 -24
  212. data/test/rails_app/app/views/users/edit_form.html.erb +0 -1
  213. data/test/rails_app/app/views/users/index.html.erb +0 -1
  214. data/test/rails_app/app/views/users/mailer/confirmation_instructions.erb +0 -1
  215. data/test/rails_app/app/views/users/sessions/new.html.erb +0 -1
  216. data/test/rails_app/bin/bundle +0 -3
  217. data/test/rails_app/bin/rails +0 -4
  218. data/test/rails_app/bin/rake +0 -4
  219. data/test/rails_app/config.ru +0 -4
  220. data/test/rails_app/config/application.rb +0 -44
  221. data/test/rails_app/config/boot.rb +0 -14
  222. data/test/rails_app/config/database.yml +0 -18
  223. data/test/rails_app/config/environment.rb +0 -5
  224. data/test/rails_app/config/environments/development.rb +0 -30
  225. data/test/rails_app/config/environments/production.rb +0 -84
  226. data/test/rails_app/config/environments/test.rb +0 -46
  227. data/test/rails_app/config/initializers/backtrace_silencers.rb +0 -7
  228. data/test/rails_app/config/initializers/devise.rb +0 -180
  229. data/test/rails_app/config/initializers/inflections.rb +0 -2
  230. data/test/rails_app/config/initializers/secret_token.rb +0 -3
  231. data/test/rails_app/config/initializers/session_store.rb +0 -1
  232. data/test/rails_app/config/routes.rb +0 -126
  233. data/test/rails_app/db/migrate/20100401102949_create_tables.rb +0 -71
  234. data/test/rails_app/db/schema.rb +0 -55
  235. data/test/rails_app/lib/shared_admin.rb +0 -17
  236. data/test/rails_app/lib/shared_user.rb +0 -30
  237. data/test/rails_app/lib/shared_user_without_email.rb +0 -26
  238. data/test/rails_app/lib/shared_user_without_omniauth.rb +0 -13
  239. data/test/rails_app/public/404.html +0 -26
  240. data/test/rails_app/public/422.html +0 -26
  241. data/test/rails_app/public/500.html +0 -26
  242. data/test/rails_app/public/favicon.ico +0 -0
  243. data/test/rails_test.rb +0 -9
  244. data/test/routes_test.rb +0 -279
  245. data/test/support/action_controller/record_identifier.rb +0 -10
  246. data/test/support/assertions.rb +0 -39
  247. data/test/support/helpers.rb +0 -77
  248. data/test/support/http_method_compatibility.rb +0 -51
  249. data/test/support/integration.rb +0 -92
  250. data/test/support/locale/en.yml +0 -8
  251. data/test/support/mongoid.yml +0 -6
  252. data/test/support/webrat/integrations/rails.rb +0 -33
  253. data/test/test_helper.rb +0 -34
  254. data/test/test_helpers_test.rb +0 -178
  255. data/test/test_models.rb +0 -33
@@ -1,357 +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
- assert_not warden.authenticated?(:user)
68
-
69
- user = User.to_adapter.find_first(order: [:id, :desc])
70
- assert_equal user.email, 'new_user@test.com'
71
- assert_not 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
- assert_not 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
- assert_not 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
- assert_not 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
- assert_not User.to_adapter.find_first.valid_password?('pas123')
221
- end
222
-
223
- test 'a signed in user should be able to cancel their account' do
224
- sign_in_as_user
225
- get edit_user_registration_path
226
-
227
- click_button "Cancel my account"
228
- assert_contain "Bye! Your account has been successfully cancelled. We hope to see you again soon."
229
-
230
- assert User.to_adapter.find_all.empty?
231
- end
232
-
233
- test 'a user should be able to cancel sign up by deleting data in the session' do
234
- get "/set"
235
- assert_equal "something", @request.session["devise.foo_bar"]
236
-
237
- get "/users/sign_up"
238
- assert_equal "something", @request.session["devise.foo_bar"]
239
-
240
- get "/users/cancel"
241
- assert_nil @request.session["devise.foo_bar"]
242
- assert_redirected_to new_user_registration_path
243
- end
244
-
245
- test 'a user with XML sign up stub' do
246
- get new_user_registration_path(format: 'xml')
247
- assert_response :success
248
- assert_match %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<user>), response.body
249
- assert_no_match(/<confirmation-token/, response.body)
250
- end
251
-
252
- test 'a user with JSON sign up stub' do
253
- get new_user_registration_path(format: 'json')
254
- assert_response :success
255
- assert_match %({"user":), response.body
256
- assert_no_match(/"confirmation_token"/, response.body)
257
- end
258
-
259
- test 'an admin sign up with valid information in XML format should return valid response' do
260
- post admin_registration_path(format: 'xml'), params: { admin: { email: 'new_user@test.com', password: 'new_user123', password_confirmation: 'new_user123' } }
261
- assert_response :success
262
- assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<admin>)
263
-
264
- admin = Admin.to_adapter.find_first(order: [:id, :desc])
265
- assert_equal admin.email, 'new_user@test.com'
266
- end
267
-
268
- test 'a user sign up with valid information in XML format should return valid response' do
269
- post user_registration_path(format: 'xml'), params: { user: { email: 'new_user@test.com', password: 'new_user123', password_confirmation: 'new_user123' } }
270
- assert_response :success
271
- assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<user>)
272
-
273
- user = User.to_adapter.find_first(order: [:id, :desc])
274
- assert_equal user.email, 'new_user@test.com'
275
- end
276
-
277
- test 'a user sign up with invalid information in XML format should return invalid response' do
278
- post user_registration_path(format: 'xml'), params: { user: { email: 'new_user@test.com', password: 'new_user123', password_confirmation: 'invalid' } }
279
- assert_response :unprocessable_entity
280
- assert response.body.include? %(<?xml version=\"1.0\" encoding=\"UTF-8\"?>\n<errors>)
281
- end
282
-
283
- test 'a user update information with valid data in XML format should return valid response' do
284
- user = sign_in_as_user
285
- put user_registration_path(format: 'xml'), params: { user: { current_password: '12345678', email: 'user.new@test.com' } }
286
- assert_response :success
287
- assert_equal user.reload.email, 'user.new@test.com'
288
- end
289
-
290
- test 'a user update information with invalid data in XML format should return invalid response' do
291
- user = sign_in_as_user
292
- put user_registration_path(format: 'xml'), params: { user: { current_password: 'invalid', email: 'user.new@test.com' } }
293
- assert_response :unprocessable_entity
294
- assert_equal user.reload.email, 'user@test.com'
295
- end
296
-
297
- test 'a user cancel their account in XML format should return valid response' do
298
- sign_in_as_user
299
- delete user_registration_path(format: 'xml')
300
- assert_response :success
301
- assert_equal User.to_adapter.find_all.size, 0
302
- end
303
- end
304
-
305
- class ReconfirmableRegistrationTest < Devise::IntegrationTest
306
- test 'a signed in admin should see a more appropriate flash message when editing their account if reconfirmable is enabled' do
307
- sign_in_as_admin
308
- get edit_admin_registration_path
309
-
310
- fill_in 'email', with: 'admin.new@example.com'
311
- fill_in 'current password', with: '123456'
312
- click_button 'Update'
313
-
314
- assert_current_url '/admin_area/home'
315
- assert_contain 'but we need to verify your new email address'
316
- assert_equal 'admin.new@example.com', Admin.to_adapter.find_first.unconfirmed_email
317
-
318
- get edit_admin_registration_path
319
- assert_contain 'Currently waiting confirmation for: admin.new@example.com'
320
- end
321
-
322
- test 'a signed in admin should not see a reconfirmation message if they did not change their password' do
323
- sign_in_as_admin
324
- get edit_admin_registration_path
325
-
326
- fill_in 'password', with: 'pas123'
327
- fill_in 'password confirmation', with: 'pas123'
328
- fill_in 'current password', with: '123456'
329
- click_button 'Update'
330
-
331
- assert_current_url '/admin_area/home'
332
- assert_contain 'Your account has been updated successfully.'
333
-
334
- assert Admin.to_adapter.find_first.valid_password?('pas123')
335
- end
336
-
337
- test 'a signed in admin should not see a reconfirmation message if they did not change their email, despite having an unconfirmed email' do
338
- sign_in_as_admin
339
-
340
- get edit_admin_registration_path
341
- fill_in 'email', with: 'admin.new@example.com'
342
- fill_in 'current password', with: '123456'
343
- click_button 'Update'
344
-
345
- get edit_admin_registration_path
346
- fill_in 'password', with: 'pas123'
347
- fill_in 'password confirmation', with: 'pas123'
348
- fill_in 'current password', with: '123456'
349
- click_button 'Update'
350
-
351
- assert_current_url '/admin_area/home'
352
- assert_contain 'Your account has been updated successfully.'
353
-
354
- assert_equal "admin.new@example.com", Admin.to_adapter.find_first.unconfirmed_email
355
- assert Admin.to_adapter.find_first.valid_password?('pas123')
356
- end
357
- end
@@ -1,211 +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 = Devise.rails5? ? ActionDispatch::TestRequest.create : ActionDispatch::TestRequest.new
14
- request.cookie_jar.signed['raw_cookie'] = raw_cookie
15
- request.cookie_jar['raw_cookie']
16
- end
17
-
18
- def signed_cookie(key)
19
- controller.send(:cookies).signed[key]
20
- end
21
-
22
- def cookie_expires(key)
23
- cookie = response.headers["Set-Cookie"].split("\n").grep(/^#{key}/).first
24
- expires = cookie.split(";").map(&:strip).grep(/^expires=/).first
25
- Time.parse(expires).utc
26
- end
27
-
28
- test 'do not remember the user if they have not checked remember me option' do
29
- sign_in_as_user
30
- assert_nil request.cookies["remember_user_cookie"]
31
- end
32
-
33
- test 'handle unverified requests gets rid of caches' do
34
- swap ApplicationController, allow_forgery_protection: true do
35
- post exhibit_user_url(1)
36
- assert_not warden.authenticated?(:user)
37
-
38
- create_user_and_remember
39
- post exhibit_user_url(1)
40
- assert_equal "User is not authenticated", response.body
41
- assert_not warden.authenticated?(:user)
42
- end
43
- end
44
-
45
- test 'handle unverified requests does not create cookies on sign in' do
46
- swap ApplicationController, allow_forgery_protection: true do
47
- get new_user_session_path
48
- assert request.session[:_csrf_token]
49
-
50
- post user_session_path, params: {
51
- authenticity_token: "oops",
52
- user: { email: "jose.valim@gmail.com", password: "123456", remember_me: "1" }
53
- }
54
- assert_not warden.authenticated?(:user)
55
- assert_not request.cookies['remember_user_token']
56
- end
57
- end
58
-
59
- test 'generate remember token after sign in' do
60
- sign_in_as_user remember_me: true
61
- assert request.cookies['remember_user_token']
62
- end
63
-
64
- test 'generate remember token after sign in setting cookie options' do
65
- # We test this by asserting the cookie is not sent after the redirect
66
- # since we changed the domain. This is the only difference with the
67
- # previous test.
68
- swap Devise, rememberable_options: { domain: "omg.somewhere.com" } do
69
- sign_in_as_user remember_me: true
70
- assert_nil request.cookies["remember_user_token"]
71
- end
72
- end
73
-
74
- test 'generate remember token with a custom key' do
75
- swap Devise, rememberable_options: { key: "v1lat_token" } do
76
- sign_in_as_user remember_me: true
77
- assert request.cookies["v1lat_token"]
78
- end
79
- end
80
-
81
- test 'generate remember token after sign in setting session options' do
82
- begin
83
- Rails.configuration.session_options[:domain] = "omg.somewhere.com"
84
- sign_in_as_user remember_me: true
85
- assert_nil request.cookies["remember_user_token"]
86
- ensure
87
- Rails.configuration.session_options.delete(:domain)
88
- end
89
- end
90
-
91
- test 'remember the user before sign in' do
92
- user = create_user_and_remember
93
- get users_path
94
- assert_response :success
95
- assert warden.authenticated?(:user)
96
- assert warden.user(:user) == user
97
- end
98
-
99
- test 'remember the user before sign up and redirect them to their home' do
100
- create_user_and_remember
101
- get new_user_registration_path
102
- assert warden.authenticated?(:user)
103
- assert_redirected_to root_path
104
- end
105
-
106
- test 'does not extend remember period through sign in' do
107
- swap Devise, extend_remember_period: true, remember_for: 1.year do
108
- user = create_user
109
- user.remember_me!
110
-
111
- user.remember_created_at = old = 10.days.ago
112
- user.save
113
-
114
- sign_in_as_user remember_me: true
115
- user.reload
116
-
117
- assert warden.user(:user) == user
118
- assert_equal old.to_i, user.remember_created_at.to_i
119
- end
120
- end
121
-
122
- test 'extends remember period when extend remember period config is true' do
123
- swap Devise, extend_remember_period: true, remember_for: 1.year do
124
- create_user_and_remember
125
- old_remember_token = nil
126
-
127
- travel_to 1.day.ago do
128
- get root_path
129
- old_remember_token = request.cookies['remember_user_token']
130
- end
131
-
132
- get root_path
133
- current_remember_token = request.cookies['remember_user_token']
134
-
135
- refute_equal old_remember_token, current_remember_token
136
- end
137
- end
138
-
139
- test 'does not extend remember period when extend period config is false' do
140
- swap Devise, extend_remember_period: false, remember_for: 1.year do
141
- create_user_and_remember
142
- old_remember_token = nil
143
-
144
- travel_to 1.day.ago do
145
- get root_path
146
- old_remember_token = request.cookies['remember_user_token']
147
- end
148
-
149
- get root_path
150
- current_remember_token = request.cookies['remember_user_token']
151
-
152
- assert_equal old_remember_token, current_remember_token
153
- end
154
- end
155
-
156
- test 'do not remember other scopes' do
157
- create_user_and_remember
158
- get root_path
159
- assert_response :success
160
- assert warden.authenticated?(:user)
161
- assert_not warden.authenticated?(:admin)
162
- end
163
-
164
- test 'do not remember with invalid token' do
165
- create_user_and_remember('add')
166
- get users_path
167
- assert_not warden.authenticated?(:user)
168
- assert_redirected_to new_user_session_path
169
- end
170
-
171
- test 'do not remember with expired token' do
172
- create_user_and_remember
173
- swap Devise, remember_for: 0.days do
174
- get users_path
175
- assert_not warden.authenticated?(:user)
176
- assert_redirected_to new_user_session_path
177
- end
178
- end
179
-
180
- test 'do not remember the user anymore after forget' do
181
- create_user_and_remember
182
- get users_path
183
- assert warden.authenticated?(:user)
184
-
185
- delete destroy_user_session_path
186
- assert_not warden.authenticated?(:user)
187
- assert_nil warden.cookies['remember_user_token']
188
-
189
- get users_path
190
- assert_not warden.authenticated?(:user)
191
- end
192
-
193
- test 'changing user password expires remember me token' do
194
- user = create_user_and_remember
195
- user.password = "another_password"
196
- user.password_confirmation = "another_password"
197
- user.save!
198
-
199
- get users_path
200
- assert_not warden.authenticated?(:user)
201
- end
202
-
203
- test 'valid sign in calls after_remembered callback' do
204
- user = create_user_and_remember
205
-
206
- User.expects(:serialize_from_cookie).returns user
207
- user.expects :after_remembered
208
-
209
- get new_user_registration_path
210
- end
211
- end