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,261 +0,0 @@
1
- require 'test_helper'
2
-
3
- class RecoverableTest < ActiveSupport::TestCase
4
-
5
- def setup
6
- setup_mailer
7
- end
8
-
9
- test 'should not generate reset password token after creating a record' do
10
- assert_nil new_user.reset_password_token
11
- end
12
-
13
- test 'should never generate the same reset password token for different users' do
14
- reset_password_tokens = []
15
- 3.times do
16
- user = create_user
17
- user.send_reset_password_instructions
18
- token = user.reset_password_token
19
- assert !reset_password_tokens.include?(token)
20
- reset_password_tokens << token
21
- end
22
- end
23
-
24
- test 'should reset password and password confirmation from params' do
25
- user = create_user
26
- user.reset_password('123456789', '987654321')
27
- assert_equal '123456789', user.password
28
- assert_equal '987654321', user.password_confirmation
29
- end
30
-
31
- test 'should reset password and save the record' do
32
- assert create_user.reset_password('123456789', '123456789')
33
- end
34
-
35
- test 'should clear reset password token while reseting the password' do
36
- user = create_user
37
- assert_nil user.reset_password_token
38
-
39
- user.send_reset_password_instructions
40
- assert_present user.reset_password_token
41
- assert user.reset_password('123456789', '123456789')
42
- assert_nil user.reset_password_token
43
- end
44
-
45
- test 'should not clear reset password token for new user' do
46
- user = new_user
47
- assert_nil user.reset_password_token
48
-
49
- user.send_reset_password_instructions
50
- assert_present user.reset_password_token
51
-
52
- user.save
53
- assert_present user.reset_password_token
54
- end
55
-
56
- test 'should clear reset password token if changing password' do
57
- user = create_user
58
- assert_nil user.reset_password_token
59
-
60
- user.send_reset_password_instructions
61
- assert_present user.reset_password_token
62
- user.password = "123456678"
63
- user.password_confirmation = "123456678"
64
- user.save!
65
- assert_nil user.reset_password_token
66
- end
67
-
68
- test 'should clear reset password token if changing email' do
69
- user = create_user
70
- assert_nil user.reset_password_token
71
-
72
- user.send_reset_password_instructions
73
- assert_present user.reset_password_token
74
- user.email = "another@example.com"
75
- user.save!
76
- assert_nil user.reset_password_token
77
- end
78
-
79
- test 'should clear reset password successfully even if there is no email' do
80
- user = create_user_without_email
81
- assert_nil user.reset_password_token
82
-
83
- user.send_reset_password_instructions
84
- assert_present user.reset_password_token
85
- user.password = "123456678"
86
- user.password_confirmation = "123456678"
87
- user.save!
88
- assert_nil user.reset_password_token
89
- end
90
-
91
- test 'should not clear reset password token if record is invalid' do
92
- user = create_user
93
- user.send_reset_password_instructions
94
- assert_present user.reset_password_token
95
- refute user.reset_password('123456789', '987654321')
96
- assert_present user.reset_password_token
97
- end
98
-
99
- test 'should not reset password with invalid data' do
100
- user = create_user
101
- user.stubs(:valid?).returns(false)
102
- refute user.reset_password('123456789', '987654321')
103
- end
104
-
105
- test 'should reset reset password token and send instructions by email' do
106
- user = create_user
107
- assert_email_sent do
108
- token = user.reset_password_token
109
- user.send_reset_password_instructions
110
- assert_not_equal token, user.reset_password_token
111
- end
112
- end
113
-
114
- test 'should find a user to send instructions by email' do
115
- user = create_user
116
- reset_password_user = User.send_reset_password_instructions(email: user.email)
117
- assert_equal reset_password_user, user
118
- end
119
-
120
- test 'should return a new record with errors if user was not found by e-mail' do
121
- reset_password_user = User.send_reset_password_instructions(email: "invalid@example.com")
122
- refute reset_password_user.persisted?
123
- assert_equal "not found", reset_password_user.errors[:email].join
124
- end
125
-
126
- test 'should find a user to send instructions by authentication_keys' do
127
- swap Devise, authentication_keys: [:username, :email] do
128
- user = create_user
129
- reset_password_user = User.send_reset_password_instructions(email: user.email, username: user.username)
130
- assert_equal reset_password_user, user
131
- end
132
- end
133
-
134
- test 'should require all reset_password_keys' do
135
- swap Devise, reset_password_keys: [:username, :email] do
136
- user = create_user
137
- reset_password_user = User.send_reset_password_instructions(email: user.email)
138
- refute reset_password_user.persisted?
139
- assert_equal "can't be blank", reset_password_user.errors[:username].join
140
- end
141
- end
142
-
143
- test 'should reset reset_password_token before send the reset instructions email' do
144
- user = create_user
145
- token = user.reset_password_token
146
- User.send_reset_password_instructions(email: user.email)
147
- assert_not_equal token, user.reload.reset_password_token
148
- end
149
-
150
- test 'should send email instructions to the user reset their password' do
151
- user = create_user
152
- assert_email_sent do
153
- User.send_reset_password_instructions(email: user.email)
154
- end
155
- end
156
-
157
- test 'should find a user to reset their password based on the raw token' do
158
- user = create_user
159
- raw = user.send_reset_password_instructions
160
-
161
- reset_password_user = User.reset_password_by_token(reset_password_token: raw)
162
- assert_equal reset_password_user, user
163
- end
164
-
165
- test 'should return a new record with errors if no reset_password_token is found' do
166
- reset_password_user = User.reset_password_by_token(reset_password_token: 'invalid_token')
167
- refute reset_password_user.persisted?
168
- assert_equal "is invalid", reset_password_user.errors[:reset_password_token].join
169
- end
170
-
171
- test 'should return a new record with errors if reset_password_token is blank' do
172
- reset_password_user = User.reset_password_by_token(reset_password_token: '')
173
- refute reset_password_user.persisted?
174
- assert_match "can't be blank", reset_password_user.errors[:reset_password_token].join
175
- end
176
-
177
- test 'should return a new record with errors if password is blank' do
178
- user = create_user
179
- raw = user.send_reset_password_instructions
180
-
181
- reset_password_user = User.reset_password_by_token(reset_password_token: raw, password: '')
182
- refute reset_password_user.errors.empty?
183
- assert_match "can't be blank", reset_password_user.errors[:password].join
184
- assert_equal raw, reset_password_user.reset_password_token
185
- end
186
-
187
- test 'should return a new record with errors if password is not provided' do
188
- user = create_user
189
- raw = user.send_reset_password_instructions
190
-
191
- reset_password_user = User.reset_password_by_token(reset_password_token: raw)
192
- refute reset_password_user.errors.empty?
193
- assert_match "can't be blank", reset_password_user.errors[:password].join
194
- assert_equal raw, reset_password_user.reset_password_token
195
- end
196
-
197
- test 'should reset successfully user password given the new password and confirmation' do
198
- user = create_user
199
- old_password = user.password
200
- raw = user.send_reset_password_instructions
201
-
202
- reset_password_user = User.reset_password_by_token(
203
- reset_password_token: raw,
204
- password: 'new_password',
205
- password_confirmation: 'new_password'
206
- )
207
- assert_nil reset_password_user.reset_password_token
208
-
209
- user.reload
210
- refute user.valid_password?(old_password)
211
- assert user.valid_password?('new_password')
212
- assert_nil user.reset_password_token
213
- end
214
-
215
- test 'should not reset password after reset_password_within time' do
216
- swap Devise, reset_password_within: 1.hour do
217
- user = create_user
218
- raw = user.send_reset_password_instructions
219
-
220
- old_password = user.password
221
- user.reset_password_sent_at = 2.days.ago
222
- user.save!
223
-
224
- reset_password_user = User.reset_password_by_token(
225
- reset_password_token: raw,
226
- password: 'new_password',
227
- password_confirmation: 'new_password'
228
- )
229
- user.reload
230
-
231
- assert user.valid_password?(old_password)
232
- refute user.valid_password?('new_password')
233
- assert_equal "has expired, please request a new one", reset_password_user.errors[:reset_password_token].join
234
- end
235
- end
236
-
237
- test 'required_fields should contain the fields that Devise uses' do
238
- assert_equal Devise::Models::Recoverable.required_fields(User), [
239
- :reset_password_sent_at,
240
- :reset_password_token
241
- ]
242
- end
243
-
244
- test 'should return a user based on the raw token' do
245
- user = create_user
246
- raw = user.send_reset_password_instructions
247
-
248
- assert_equal User.with_reset_password_token(raw), user
249
- end
250
-
251
- test 'should return the same reset password token as generated' do
252
- user = create_user
253
- raw = user.send_reset_password_instructions
254
- assert_equal Devise.token_generator.digest(self.class, :reset_password_token, raw), user.reset_password_token
255
- end
256
-
257
- test 'should return nil if a user based on the raw token is not found' do
258
- assert_nil User.with_reset_password_token('random-token')
259
- end
260
-
261
- end
@@ -1,7 +0,0 @@
1
- require 'test_helper'
2
-
3
- class RegisterableTest < ActiveSupport::TestCase
4
- test 'required_fields should contain the fields that Devise uses' do
5
- assert_equal Devise::Models::Registerable.required_fields(User), []
6
- end
7
- end
@@ -1,182 +0,0 @@
1
- require 'test_helper'
2
-
3
- class RememberableTest < ActiveSupport::TestCase
4
- def resource_class
5
- User
6
- end
7
-
8
- def create_resource
9
- create_user
10
- end
11
-
12
- test 'remember_me should not generate a new token if using salt' do
13
- user = create_user
14
- user.expects(:valid?).never
15
- user.remember_me!
16
- assert user.remember_created_at
17
- end
18
-
19
- test 'remember_me should not generate a new token if valid token exists' do
20
- user = create_user
21
- user.singleton_class.send(:attr_accessor, :remember_token)
22
- User.to_adapter.expects(:find_first).returns(nil)
23
-
24
- user.remember_me!
25
- existing_token = user.remember_token
26
-
27
- user.remember_me!
28
- assert_equal existing_token, user.remember_token
29
- end
30
-
31
- test 'forget_me should not clear remember token if using salt' do
32
- user = create_user
33
- user.remember_me!
34
- user.expects(:valid?).never
35
- user.forget_me!
36
- end
37
-
38
- test 'can generate remember token' do
39
- user = create_user
40
- user.singleton_class.send(:attr_accessor, :remember_token)
41
- User.to_adapter.expects(:find_first).returns(nil)
42
- user.remember_me!
43
- assert user.remember_token
44
- end
45
-
46
- test 'serialize into cookie' do
47
- user = create_user
48
- user.remember_me!
49
- id, token, date = User.serialize_into_cookie(user)
50
- assert_equal id, user.to_key
51
- assert_equal token, user.authenticatable_salt
52
- assert date.is_a?(String)
53
- end
54
-
55
- test 'serialize from cookie' do
56
- user = create_user
57
- user.remember_me!
58
- assert_equal user, User.serialize_from_cookie(user.to_key, user.authenticatable_salt, Time.now.utc)
59
- end
60
-
61
- test 'serialize from cookie should accept a String with the datetime seconds and microseconds' do
62
- user = create_user
63
- user.remember_me!
64
- assert_equal user, User.serialize_from_cookie(user.to_key, user.authenticatable_salt, Time.now.utc.to_f.to_json)
65
- end
66
-
67
- test 'serialize from cookie should return nil with invalid datetime' do
68
- user = create_user
69
- user.remember_me!
70
- assert_nil User.serialize_from_cookie(user.to_key, user.authenticatable_salt, "2013")
71
- end
72
-
73
- test 'serialize from cookie should return nil if no resource is found' do
74
- assert_nil resource_class.serialize_from_cookie([0], "123", Time.now.utc)
75
- end
76
-
77
- test 'serialize from cookie should return nil if no timestamp' do
78
- user = create_user
79
- user.remember_me!
80
- assert_nil User.serialize_from_cookie(user.to_key, user.authenticatable_salt)
81
- end
82
-
83
- test 'serialize from cookie should return nil if timestamp is earlier than token creation' do
84
- user = create_user
85
- user.remember_me!
86
- assert_nil User.serialize_from_cookie(user.to_key, user.authenticatable_salt, 1.day.ago)
87
- end
88
-
89
- test 'serialize from cookie should return nil if timestamp is older than remember_for' do
90
- user = create_user
91
- user.remember_created_at = 1.month.ago
92
- user.remember_me!
93
- assert_nil User.serialize_from_cookie(user.to_key, user.authenticatable_salt, 3.weeks.ago)
94
- end
95
-
96
- test 'serialize from cookie me return nil if is a valid resource with invalid token' do
97
- user = create_user
98
- user.remember_me!
99
- assert_nil User.serialize_from_cookie(user.to_key, "123", Time.now.utc)
100
- end
101
-
102
- test 'raises a RuntimeError if the user does not implements a rememberable value' do
103
- user = User.new
104
- assert_raise(RuntimeError) { user.rememberable_value }
105
-
106
- user_with_remember_token = User.new
107
- def user_with_remember_token.remember_token; '123-token'; end
108
- assert_equal '123-token', user_with_remember_token.rememberable_value
109
-
110
- user_with_salt = User.new
111
- def user_with_salt.authenticatable_salt; '123-salt'; end
112
- assert_equal '123-salt', user_with_salt.rememberable_value
113
- end
114
-
115
- test 'raises a RuntimeError if authenticatable_salt is nil or empty' do
116
- user = User.new
117
- def user.authenticatable_salt; nil; end
118
- assert_raise RuntimeError do
119
- user.rememberable_value
120
- end
121
-
122
- user = User.new
123
- def user.authenticatable_salt; ""; end
124
- assert_raise RuntimeError do
125
- user.rememberable_value
126
- end
127
- end
128
-
129
- test 'should respond to remember_me attribute' do
130
- assert resource_class.new.respond_to?(:remember_me)
131
- assert resource_class.new.respond_to?(:remember_me=)
132
- end
133
-
134
- test 'forget_me should clear remember_created_at if expire_all_remember_me_on_sign_out is true' do
135
- swap Devise, expire_all_remember_me_on_sign_out: true do
136
- resource = create_resource
137
- resource.remember_me!
138
- assert_not_nil resource.remember_created_at
139
-
140
- resource.forget_me!
141
- assert_nil resource.remember_created_at
142
- end
143
- end
144
-
145
- test 'forget_me should not clear remember_created_at if expire_all_remember_me_on_sign_out is false' do
146
- swap Devise, expire_all_remember_me_on_sign_out: false do
147
- resource = create_resource
148
- resource.remember_me!
149
-
150
- assert_not_nil resource.remember_created_at
151
-
152
- resource.forget_me!
153
- assert_not_nil resource.remember_created_at
154
- end
155
- end
156
-
157
- test 'forget_me should not try to update resource if it has been destroyed' do
158
- resource = create_resource
159
- resource.expects(:remember_created_at).never
160
- resource.expects(:save).never
161
-
162
- resource.destroy
163
- resource.forget_me!
164
- end
165
-
166
- test 'remember expires at uses remember for configuration' do
167
- swap Devise, remember_for: 3.days do
168
- resource = create_resource
169
- resource.remember_me!
170
- assert_equal 3.days.from_now.to_date, resource.remember_expires_at.to_date
171
-
172
- Devise.remember_for = 5.days
173
- assert_equal 5.days.from_now.to_date, resource.remember_expires_at.to_date
174
- end
175
- end
176
-
177
- test 'should have the required_fields array' do
178
- assert_equal Devise::Models::Rememberable.required_fields(User), [
179
- :remember_created_at
180
- ]
181
- end
182
- end
@@ -1,54 +0,0 @@
1
- require 'test_helper'
2
-
3
- class SerializableTest < ActiveSupport::TestCase
4
- setup do
5
- @user = create_user
6
- end
7
-
8
- test 'should not include unsafe keys on XML' do
9
- assert_match(/email/, @user.to_xml)
10
- assert_no_match(/confirmation-token/, @user.to_xml)
11
- end
12
-
13
- test 'should not include unsafe keys on XML even if a new except is provided' do
14
- assert_no_match(/email/, @user.to_xml(except: :email))
15
- assert_no_match(/confirmation-token/, @user.to_xml(except: :email))
16
- end
17
-
18
- test 'should include unsafe keys on XML if a force_except is provided' do
19
- assert_no_match(/<email/, @user.to_xml(force_except: :email))
20
- assert_match(/confirmation-token/, @user.to_xml(force_except: :email))
21
- end
22
-
23
- test 'should not include unsafe keys on JSON' do
24
- keys = from_json().keys.select{ |key| !key.include?("id") }
25
- assert_equal %w(created_at email facebook_token updated_at username), keys.sort
26
- end
27
-
28
- test 'should not include unsafe keys on JSON even if a new except is provided' do
29
- assert_no_key "email", from_json(except: :email)
30
- assert_no_key "confirmation_token", from_json(except: :email)
31
- end
32
-
33
- test 'should include unsafe keys on JSON if a force_except is provided' do
34
- assert_no_key "email", from_json(force_except: :email)
35
- assert_key "confirmation_token", from_json(force_except: :email)
36
- end
37
-
38
- test 'should not include unsafe keys in inspect' do
39
- assert_match(/email/, @user.inspect)
40
- assert_no_match(/confirmation_token/, @user.inspect)
41
- end
42
-
43
- def assert_key(key, subject)
44
- assert subject.key?(key), "Expected #{subject.inspect} to have key #{key.inspect}"
45
- end
46
-
47
- def assert_no_key(key, subject)
48
- assert !subject.key?(key), "Expected #{subject.inspect} to not have key #{key.inspect}"
49
- end
50
-
51
- def from_json(options=nil)
52
- ActiveSupport::JSON.decode(@user.to_json(options))["user"]
53
- end
54
- end
@@ -1,51 +0,0 @@
1
- require 'test_helper'
2
-
3
- class TimeoutableTest < ActiveSupport::TestCase
4
-
5
- test 'should be expired' do
6
- assert new_user.timedout?(31.minutes.ago)
7
- end
8
-
9
- test 'should not be expired' do
10
- refute new_user.timedout?(29.minutes.ago)
11
- end
12
-
13
- test 'should not be expired when params is nil' do
14
- refute new_user.timedout?(nil)
15
- end
16
-
17
- test 'should use timeout_in method' do
18
- user = new_user
19
- user.instance_eval { def timeout_in; 10.minutes end }
20
-
21
- assert user.timedout?(12.minutes.ago)
22
- refute user.timedout?(8.minutes.ago)
23
- end
24
-
25
- test 'should not be expired when timeout_in method returns nil' do
26
- user = new_user
27
- user.instance_eval { def timeout_in; nil end }
28
- refute user.timedout?(10.hours.ago)
29
- end
30
-
31
- test 'fallback to Devise config option' do
32
- swap Devise, timeout_in: 1.minute do
33
- user = new_user
34
- assert user.timedout?(2.minutes.ago)
35
- refute user.timedout?(30.seconds.ago)
36
-
37
- Devise.timeout_in = 5.minutes
38
- refute user.timedout?(2.minutes.ago)
39
- assert user.timedout?(6.minutes.ago)
40
- end
41
- end
42
-
43
- test 'required_fields should contain the fields that Devise uses' do
44
- assert_equal Devise::Models::Timeoutable.required_fields(User), []
45
- end
46
-
47
- test 'should not raise error if remember_created_at is not empty and rememberable is disabled' do
48
- user = create_admin(remember_created_at: Time.current)
49
- assert user.timedout?(31.minutes.ago)
50
- end
51
- end
@@ -1,41 +0,0 @@
1
- require 'test_helper'
2
-
3
- class TrackableTest < ActiveSupport::TestCase
4
- test 'required_fields should contain the fields that Devise uses' do
5
- assert_equal Devise::Models::Trackable.required_fields(User), [
6
- :current_sign_in_at,
7
- :current_sign_in_ip,
8
- :last_sign_in_at,
9
- :last_sign_in_ip,
10
- :sign_in_count
11
- ]
12
- end
13
-
14
- test 'update_tracked_fields should only set attributes but not save the record' do
15
- user = create_user
16
- request = mock
17
- request.stubs(:remote_ip).returns("127.0.0.1")
18
-
19
- assert_nil user.current_sign_in_ip
20
- assert_nil user.last_sign_in_ip
21
- assert_nil user.current_sign_in_at
22
- assert_nil user.last_sign_in_at
23
- assert_equal 0, user.sign_in_count
24
-
25
- user.update_tracked_fields(request)
26
-
27
- assert_equal "127.0.0.1", user.current_sign_in_ip
28
- assert_equal "127.0.0.1", user.last_sign_in_ip
29
- assert_not_nil user.current_sign_in_at
30
- assert_not_nil user.last_sign_in_at
31
- assert_equal 1, user.sign_in_count
32
-
33
- user.reload
34
-
35
- assert_nil user.current_sign_in_ip
36
- assert_nil user.last_sign_in_ip
37
- assert_nil user.current_sign_in_at
38
- assert_nil user.last_sign_in_at
39
- assert_equal 0, user.sign_in_count
40
- end
41
- end