devise 3.5.10 → 4.6.0

Sign up to get free protection for your applications and to get access to all the features.

Potentially problematic release.


This version of devise might be problematic. Click here for more details.

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