devise 3.5.1 → 4.7.1

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 (256) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +259 -1076
  3. data/MIT-LICENSE +1 -1
  4. data/README.md +256 -68
  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 +10 -7
  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 +10 -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/mailer/password_change.html.erb +3 -0
  17. data/app/views/devise/passwords/edit.html.erb +5 -5
  18. data/app/views/devise/passwords/new.html.erb +2 -2
  19. data/app/views/devise/registrations/edit.html.erb +9 -5
  20. data/app/views/devise/registrations/new.html.erb +4 -4
  21. data/app/views/devise/sessions/new.html.erb +4 -4
  22. data/app/views/devise/shared/_error_messages.html.erb +15 -0
  23. data/app/views/devise/shared/_links.html.erb +8 -8
  24. data/app/views/devise/unlocks/new.html.erb +2 -2
  25. data/config/locales/en.yml +6 -1
  26. data/lib/devise/controllers/helpers.rb +35 -26
  27. data/lib/devise/controllers/rememberable.rb +11 -2
  28. data/lib/devise/controllers/scoped_views.rb +2 -0
  29. data/lib/devise/controllers/sign_in_out.rb +35 -18
  30. data/lib/devise/controllers/store_location.rb +25 -7
  31. data/lib/devise/controllers/url_helpers.rb +2 -0
  32. data/lib/devise/delegator.rb +2 -0
  33. data/lib/devise/encryptor.rb +6 -4
  34. data/lib/devise/failure_app.rb +84 -27
  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 +6 -1
  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 +7 -7
  42. data/lib/devise/hooks/trackable.rb +2 -0
  43. data/lib/devise/mailers/helpers.rb +7 -4
  44. data/lib/devise/mapping.rb +2 -0
  45. data/lib/devise/models/authenticatable.rb +51 -26
  46. data/lib/devise/models/confirmable.rb +106 -33
  47. data/lib/devise/models/database_authenticatable.rb +97 -21
  48. data/lib/devise/models/lockable.rb +15 -5
  49. data/lib/devise/models/omniauthable.rb +2 -0
  50. data/lib/devise/models/recoverable.rb +32 -24
  51. data/lib/devise/models/registerable.rb +4 -0
  52. data/lib/devise/models/rememberable.rb +42 -26
  53. data/lib/devise/models/timeoutable.rb +2 -6
  54. data/lib/devise/models/trackable.rb +15 -1
  55. data/lib/devise/models/validatable.rb +10 -3
  56. data/lib/devise/models.rb +3 -1
  57. data/lib/devise/modules.rb +2 -0
  58. data/lib/devise/omniauth/config.rb +2 -0
  59. data/lib/devise/omniauth/url_helpers.rb +14 -5
  60. data/lib/devise/omniauth.rb +2 -0
  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 +139 -65
  65. data/lib/devise/rails/routes.rb +67 -47
  66. data/lib/devise/rails/warden_compat.rb +3 -10
  67. data/lib/devise/rails.rb +7 -16
  68. data/lib/devise/secret_key_finder.rb +27 -0
  69. data/lib/devise/strategies/authenticatable.rb +5 -3
  70. data/lib/devise/strategies/base.rb +2 -0
  71. data/lib/devise/strategies/database_authenticatable.rb +11 -4
  72. data/lib/devise/strategies/rememberable.rb +5 -6
  73. data/lib/devise/test/controller_helpers.rb +165 -0
  74. data/lib/devise/test/integration_helpers.rb +63 -0
  75. data/lib/devise/test_helpers.rb +7 -124
  76. data/lib/devise/time_inflector.rb +2 -0
  77. data/lib/devise/token_generator.rb +3 -41
  78. data/lib/devise/version.rb +3 -1
  79. data/lib/devise.rb +73 -46
  80. data/lib/generators/active_record/devise_generator.rb +29 -10
  81. data/lib/generators/active_record/templates/migration.rb +4 -2
  82. data/lib/generators/active_record/templates/migration_existing.rb +4 -2
  83. data/lib/generators/devise/controllers_generator.rb +3 -1
  84. data/lib/generators/devise/devise_generator.rb +4 -2
  85. data/lib/generators/devise/install_generator.rb +17 -0
  86. data/lib/generators/devise/orm_helpers.rb +10 -21
  87. data/lib/generators/devise/views_generator.rb +21 -11
  88. data/lib/generators/mongoid/devise_generator.rb +7 -5
  89. data/lib/generators/templates/README +1 -8
  90. data/lib/generators/templates/controllers/README +1 -1
  91. data/lib/generators/templates/controllers/confirmations_controller.rb +2 -0
  92. data/lib/generators/templates/controllers/omniauth_callbacks_controller.rb +2 -0
  93. data/lib/generators/templates/controllers/passwords_controller.rb +2 -0
  94. data/lib/generators/templates/controllers/registrations_controller.rb +6 -4
  95. data/lib/generators/templates/controllers/sessions_controller.rb +4 -2
  96. data/lib/generators/templates/controllers/unlocks_controller.rb +2 -0
  97. data/lib/generators/templates/devise.rb +52 -22
  98. data/lib/generators/templates/markerb/confirmation_instructions.markerb +1 -1
  99. data/lib/generators/templates/markerb/email_changed.markerb +7 -0
  100. data/lib/generators/templates/markerb/password_change.markerb +3 -0
  101. data/lib/generators/templates/markerb/reset_password_instructions.markerb +1 -1
  102. data/lib/generators/templates/markerb/unlock_instructions.markerb +1 -1
  103. data/lib/generators/templates/simple_form_for/confirmations/new.html.erb +5 -1
  104. data/lib/generators/templates/simple_form_for/passwords/edit.html.erb +10 -2
  105. data/lib/generators/templates/simple_form_for/passwords/new.html.erb +4 -1
  106. data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +11 -3
  107. data/lib/generators/templates/simple_form_for/registrations/new.html.erb +11 -3
  108. data/lib/generators/templates/simple_form_for/sessions/new.html.erb +7 -2
  109. data/lib/generators/templates/simple_form_for/unlocks/new.html.erb +4 -1
  110. metadata +15 -301
  111. data/.gitignore +0 -10
  112. data/.travis.yml +0 -45
  113. data/.yardopts +0 -9
  114. data/CONTRIBUTING.md +0 -14
  115. data/Gemfile +0 -29
  116. data/Gemfile.lock +0 -191
  117. data/Rakefile +0 -36
  118. data/devise.gemspec +0 -29
  119. data/devise.png +0 -0
  120. data/gemfiles/Gemfile.rails-3.2-stable +0 -29
  121. data/gemfiles/Gemfile.rails-3.2-stable.lock +0 -169
  122. data/gemfiles/Gemfile.rails-4.0-stable +0 -29
  123. data/gemfiles/Gemfile.rails-4.0-stable.lock +0 -163
  124. data/gemfiles/Gemfile.rails-4.1-stable +0 -29
  125. data/gemfiles/Gemfile.rails-4.1-stable.lock +0 -169
  126. data/gemfiles/Gemfile.rails-4.2-stable +0 -29
  127. data/gemfiles/Gemfile.rails-4.2-stable.lock +0 -191
  128. data/script/cached-bundle +0 -49
  129. data/script/s3-put +0 -71
  130. data/test/controllers/custom_registrations_controller_test.rb +0 -40
  131. data/test/controllers/custom_strategy_test.rb +0 -62
  132. data/test/controllers/helpers_test.rb +0 -316
  133. data/test/controllers/inherited_controller_i18n_messages_test.rb +0 -51
  134. data/test/controllers/internal_helpers_test.rb +0 -129
  135. data/test/controllers/load_hooks_controller_test.rb +0 -19
  136. data/test/controllers/passwords_controller_test.rb +0 -31
  137. data/test/controllers/sessions_controller_test.rb +0 -103
  138. data/test/controllers/url_helpers_test.rb +0 -65
  139. data/test/delegator_test.rb +0 -19
  140. data/test/devise_test.rb +0 -107
  141. data/test/failure_app_test.rb +0 -298
  142. data/test/generators/active_record_generator_test.rb +0 -109
  143. data/test/generators/controllers_generator_test.rb +0 -48
  144. data/test/generators/devise_generator_test.rb +0 -39
  145. data/test/generators/install_generator_test.rb +0 -13
  146. data/test/generators/mongoid_generator_test.rb +0 -23
  147. data/test/generators/views_generator_test.rb +0 -96
  148. data/test/helpers/devise_helper_test.rb +0 -49
  149. data/test/integration/authenticatable_test.rb +0 -729
  150. data/test/integration/confirmable_test.rb +0 -324
  151. data/test/integration/database_authenticatable_test.rb +0 -95
  152. data/test/integration/http_authenticatable_test.rb +0 -105
  153. data/test/integration/lockable_test.rb +0 -239
  154. data/test/integration/omniauthable_test.rb +0 -133
  155. data/test/integration/recoverable_test.rb +0 -347
  156. data/test/integration/registerable_test.rb +0 -359
  157. data/test/integration/rememberable_test.rb +0 -176
  158. data/test/integration/timeoutable_test.rb +0 -189
  159. data/test/integration/trackable_test.rb +0 -92
  160. data/test/mailers/confirmation_instructions_test.rb +0 -115
  161. data/test/mailers/reset_password_instructions_test.rb +0 -96
  162. data/test/mailers/unlock_instructions_test.rb +0 -91
  163. data/test/mapping_test.rb +0 -134
  164. data/test/models/authenticatable_test.rb +0 -23
  165. data/test/models/confirmable_test.rb +0 -468
  166. data/test/models/database_authenticatable_test.rb +0 -249
  167. data/test/models/lockable_test.rb +0 -328
  168. data/test/models/omniauthable_test.rb +0 -7
  169. data/test/models/recoverable_test.rb +0 -228
  170. data/test/models/registerable_test.rb +0 -7
  171. data/test/models/rememberable_test.rb +0 -204
  172. data/test/models/serializable_test.rb +0 -49
  173. data/test/models/timeoutable_test.rb +0 -51
  174. data/test/models/trackable_test.rb +0 -41
  175. data/test/models/validatable_test.rb +0 -127
  176. data/test/models_test.rb +0 -144
  177. data/test/omniauth/config_test.rb +0 -57
  178. data/test/omniauth/url_helpers_test.rb +0 -54
  179. data/test/orm/active_record.rb +0 -10
  180. data/test/orm/mongoid.rb +0 -13
  181. data/test/parameter_sanitizer_test.rb +0 -81
  182. data/test/rails_app/Rakefile +0 -6
  183. data/test/rails_app/app/active_record/admin.rb +0 -6
  184. data/test/rails_app/app/active_record/shim.rb +0 -2
  185. data/test/rails_app/app/active_record/user.rb +0 -6
  186. data/test/rails_app/app/active_record/user_on_engine.rb +0 -7
  187. data/test/rails_app/app/active_record/user_on_main_app.rb +0 -7
  188. data/test/rails_app/app/controllers/admins/sessions_controller.rb +0 -6
  189. data/test/rails_app/app/controllers/admins_controller.rb +0 -11
  190. data/test/rails_app/app/controllers/application_controller.rb +0 -12
  191. data/test/rails_app/app/controllers/application_with_fake_engine.rb +0 -30
  192. data/test/rails_app/app/controllers/custom/registrations_controller.rb +0 -31
  193. data/test/rails_app/app/controllers/home_controller.rb +0 -25
  194. data/test/rails_app/app/controllers/publisher/registrations_controller.rb +0 -2
  195. data/test/rails_app/app/controllers/publisher/sessions_controller.rb +0 -2
  196. data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +0 -14
  197. data/test/rails_app/app/controllers/users_controller.rb +0 -31
  198. data/test/rails_app/app/helpers/application_helper.rb +0 -3
  199. data/test/rails_app/app/mailers/users/from_proc_mailer.rb +0 -3
  200. data/test/rails_app/app/mailers/users/mailer.rb +0 -3
  201. data/test/rails_app/app/mailers/users/reply_to_mailer.rb +0 -4
  202. data/test/rails_app/app/mongoid/admin.rb +0 -29
  203. data/test/rails_app/app/mongoid/shim.rb +0 -23
  204. data/test/rails_app/app/mongoid/user.rb +0 -39
  205. data/test/rails_app/app/mongoid/user_on_engine.rb +0 -39
  206. data/test/rails_app/app/mongoid/user_on_main_app.rb +0 -39
  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 -40
  223. data/test/rails_app/config/boot.rb +0 -14
  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 -84
  228. data/test/rails_app/config/environments/test.rb +0 -41
  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 -8
  233. data/test/rails_app/config/initializers/session_store.rb +0 -1
  234. data/test/rails_app/config/routes.rb +0 -122
  235. data/test/rails_app/config.ru +0 -4
  236. data/test/rails_app/db/migrate/20100401102949_create_tables.rb +0 -71
  237. data/test/rails_app/db/schema.rb +0 -55
  238. data/test/rails_app/lib/shared_admin.rb +0 -17
  239. data/test/rails_app/lib/shared_user.rb +0 -29
  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 -73
  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
@@ -1,228 +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 clear reset password token if changing password' do
46
- user = create_user
47
- assert_nil user.reset_password_token
48
-
49
- user.send_reset_password_instructions
50
- assert_present user.reset_password_token
51
- user.password = "123456678"
52
- user.password_confirmation = "123456678"
53
- user.save!
54
- assert_nil user.reset_password_token
55
- end
56
-
57
- test 'should clear reset password token if changing email' do
58
- user = create_user
59
- assert_nil user.reset_password_token
60
-
61
- user.send_reset_password_instructions
62
- assert_present user.reset_password_token
63
- user.email = "another@example.com"
64
- user.save!
65
- assert_nil user.reset_password_token
66
- end
67
-
68
- test 'should not clear reset password token if record is invalid' do
69
- user = create_user
70
- user.send_reset_password_instructions
71
- assert_present user.reset_password_token
72
- assert_not user.reset_password('123456789', '987654321')
73
- assert_present user.reset_password_token
74
- end
75
-
76
- test 'should not reset password with invalid data' do
77
- user = create_user
78
- user.stubs(:valid?).returns(false)
79
- assert_not user.reset_password('123456789', '987654321')
80
- end
81
-
82
- test 'should reset reset password token and send instructions by email' do
83
- user = create_user
84
- assert_email_sent do
85
- token = user.reset_password_token
86
- user.send_reset_password_instructions
87
- assert_not_equal token, user.reset_password_token
88
- end
89
- end
90
-
91
- test 'should find a user to send instructions by email' do
92
- user = create_user
93
- reset_password_user = User.send_reset_password_instructions(email: user.email)
94
- assert_equal reset_password_user, user
95
- end
96
-
97
- test 'should return a new record with errors if user was not found by e-mail' do
98
- reset_password_user = User.send_reset_password_instructions(email: "invalid@example.com")
99
- assert_not reset_password_user.persisted?
100
- assert_equal "not found", reset_password_user.errors[:email].join
101
- end
102
-
103
- test 'should find a user to send instructions by authentication_keys' do
104
- swap Devise, authentication_keys: [:username, :email] do
105
- user = create_user
106
- reset_password_user = User.send_reset_password_instructions(email: user.email, username: user.username)
107
- assert_equal reset_password_user, user
108
- end
109
- end
110
-
111
- test 'should require all reset_password_keys' do
112
- swap Devise, reset_password_keys: [:username, :email] do
113
- user = create_user
114
- reset_password_user = User.send_reset_password_instructions(email: user.email)
115
- assert_not reset_password_user.persisted?
116
- assert_equal "can't be blank", reset_password_user.errors[:username].join
117
- end
118
- end
119
-
120
- test 'should reset reset_password_token before send the reset instructions email' do
121
- user = create_user
122
- token = user.reset_password_token
123
- User.send_reset_password_instructions(email: user.email)
124
- assert_not_equal token, user.reload.reset_password_token
125
- end
126
-
127
- test 'should send email instructions to the user reset their password' do
128
- user = create_user
129
- assert_email_sent do
130
- User.send_reset_password_instructions(email: user.email)
131
- end
132
- end
133
-
134
- test 'should find a user to reset their password based on the raw token' do
135
- user = create_user
136
- raw = user.send_reset_password_instructions
137
-
138
- reset_password_user = User.reset_password_by_token(reset_password_token: raw)
139
- assert_equal reset_password_user, user
140
- end
141
-
142
- test 'should return a new record with errors if no reset_password_token is found' do
143
- reset_password_user = User.reset_password_by_token(reset_password_token: 'invalid_token')
144
- assert_not reset_password_user.persisted?
145
- assert_equal "is invalid", reset_password_user.errors[:reset_password_token].join
146
- end
147
-
148
- test 'should return a new record with errors if reset_password_token is blank' do
149
- reset_password_user = User.reset_password_by_token(reset_password_token: '')
150
- assert_not reset_password_user.persisted?
151
- assert_match "can't be blank", reset_password_user.errors[:reset_password_token].join
152
- end
153
-
154
- test 'should return a new record with errors if password is blank' do
155
- user = create_user
156
- raw = user.send_reset_password_instructions
157
-
158
- reset_password_user = User.reset_password_by_token(reset_password_token: raw, password: '')
159
- assert_not reset_password_user.errors.empty?
160
- assert_match "can't be blank", reset_password_user.errors[:password].join
161
- assert_equal raw, reset_password_user.reset_password_token
162
- end
163
-
164
- test 'should reset successfully user password given the new password and confirmation' do
165
- user = create_user
166
- old_password = user.password
167
- raw = user.send_reset_password_instructions
168
-
169
- reset_password_user = User.reset_password_by_token(
170
- reset_password_token: raw,
171
- password: 'new_password',
172
- password_confirmation: 'new_password'
173
- )
174
- assert_nil reset_password_user.reset_password_token
175
-
176
- user.reload
177
- assert_not user.valid_password?(old_password)
178
- assert user.valid_password?('new_password')
179
- assert_nil user.reset_password_token
180
- end
181
-
182
- test 'should not reset password after reset_password_within time' do
183
- swap Devise, reset_password_within: 1.hour do
184
- user = create_user
185
- raw = user.send_reset_password_instructions
186
-
187
- old_password = user.password
188
- user.reset_password_sent_at = 2.days.ago
189
- user.save!
190
-
191
- reset_password_user = User.reset_password_by_token(
192
- reset_password_token: raw,
193
- password: 'new_password',
194
- password_confirmation: 'new_password'
195
- )
196
- user.reload
197
-
198
- assert user.valid_password?(old_password)
199
- assert_not user.valid_password?('new_password')
200
- assert_equal "has expired, please request a new one", reset_password_user.errors[:reset_password_token].join
201
- end
202
- end
203
-
204
- test 'required_fields should contain the fields that Devise uses' do
205
- assert_same_content Devise::Models::Recoverable.required_fields(User), [
206
- :reset_password_sent_at,
207
- :reset_password_token
208
- ]
209
- end
210
-
211
- test 'should return a user based on the raw token' do
212
- user = create_user
213
- raw = user.send_reset_password_instructions
214
-
215
- assert_equal User.with_reset_password_token(raw), user
216
- end
217
-
218
- test 'should return the same reset password token as generated' do
219
- user = create_user
220
- raw = user.send_reset_password_instructions
221
- assert_equal Devise.token_generator.digest(self.class, :reset_password_token, raw), user.reset_password_token
222
- end
223
-
224
- test 'should return nil if a user based on the raw token is not found' do
225
- assert_equal User.with_reset_password_token('random-token'), nil
226
- end
227
-
228
- 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_same_content Devise::Models::Registerable.required_fields(User), []
6
- end
7
- end
@@ -1,204 +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
- end
17
-
18
- test 'forget_me should not clear remember token if using salt' do
19
- user = create_user
20
- user.remember_me!
21
- user.expects(:valid?).never
22
- user.forget_me!
23
- end
24
-
25
- test 'can generate remember token' do
26
- user = create_user
27
- user.singleton_class.send(:attr_accessor, :remember_token)
28
- User.to_adapter.expects(:find_first).returns(nil)
29
- user.remember_me!
30
- assert user.remember_token
31
- end
32
-
33
- test 'serialize into cookie' do
34
- user = create_user
35
- user.remember_me!
36
- assert_equal [user.to_key, user.authenticatable_salt], User.serialize_into_cookie(user)
37
- end
38
-
39
- test 'serialize from cookie' do
40
- user = create_user
41
- user.remember_me!
42
- assert_equal user, User.serialize_from_cookie(user.to_key, user.authenticatable_salt)
43
- end
44
-
45
- test 'raises a RuntimeError if authenticatable_salt is nil or empty' do
46
- user = User.new
47
- def user.authenticable_salt; nil; end
48
- assert_raise RuntimeError do
49
- user.rememberable_value
50
- end
51
-
52
- user = User.new
53
- def user.authenticable_salt; ""; end
54
- assert_raise RuntimeError do
55
- user.rememberable_value
56
- end
57
- end
58
-
59
- test 'should respond to remember_me attribute' do
60
- assert resource_class.new.respond_to?(:remember_me)
61
- assert resource_class.new.respond_to?(:remember_me=)
62
- end
63
-
64
- test 'forget_me should clear remember_created_at if expire_all_remember_me_on_sign_out is true' do
65
- swap Devise, expire_all_remember_me_on_sign_out: true do
66
- resource = create_resource
67
- resource.remember_me!
68
- assert_not_nil resource.remember_created_at
69
-
70
- resource.forget_me!
71
- assert_nil resource.remember_created_at
72
- end
73
- end
74
-
75
- test 'forget_me should not clear remember_created_at if expire_all_remember_me_on_sign_out is false' do
76
- swap Devise, expire_all_remember_me_on_sign_out: false do
77
- resource = create_resource
78
- resource.remember_me!
79
-
80
- assert_not_nil resource.remember_created_at
81
-
82
- resource.forget_me!
83
- assert_not_nil resource.remember_created_at
84
- end
85
- end
86
-
87
- test 'forget_me should not try to update resource if it has been destroyed' do
88
- resource = create_resource
89
- resource.expects(:remember_created_at).never
90
- resource.expects(:save).never
91
-
92
- resource.destroy
93
- resource.forget_me!
94
- end
95
-
96
- test 'remember is expired if not created at timestamp is set' do
97
- assert create_resource.remember_expired?
98
- end
99
-
100
- test 'serialize should return nil if no resource is found' do
101
- assert_nil resource_class.serialize_from_cookie([0], "123")
102
- end
103
-
104
- test 'remember me return nil if is a valid resource with invalid token' do
105
- resource = create_resource
106
- assert_nil resource_class.serialize_from_cookie([resource.id], "123")
107
- end
108
-
109
- test 'remember for should fallback to devise remember for default configuration' do
110
- swap Devise, remember_for: 1.day do
111
- resource = create_resource
112
- resource.remember_me!
113
- assert_not resource.remember_expired?
114
- end
115
- end
116
-
117
- test 'remember expires at should sum date of creation with remember for configuration' do
118
- swap Devise, remember_for: 3.days do
119
- resource = create_resource
120
- resource.remember_me!
121
- assert_equal 3.days.from_now.to_date, resource.remember_expires_at.to_date
122
-
123
- Devise.remember_for = 5.days
124
- assert_equal 5.days.from_now.to_date, resource.remember_expires_at.to_date
125
- end
126
- end
127
-
128
- test 'remember should be expired if remember_for is zero' do
129
- swap Devise, remember_for: 0.days do
130
- Devise.remember_for = 0.days
131
- resource = create_resource
132
- resource.remember_me!
133
- assert resource.remember_expired?
134
- end
135
- end
136
-
137
- test 'remember should be expired if it was created before limit time' do
138
- swap Devise, remember_for: 1.day do
139
- resource = create_resource
140
- resource.remember_me!
141
- resource.remember_created_at = 2.days.ago
142
- resource.save
143
- assert resource.remember_expired?
144
- end
145
- end
146
-
147
- test 'remember should not be expired if it was created within the limit time' do
148
- swap Devise, remember_for: 30.days do
149
- resource = create_resource
150
- resource.remember_me!
151
- resource.remember_created_at = (30.days.ago + 2.minutes)
152
- resource.save
153
- assert_not resource.remember_expired?
154
- end
155
- end
156
-
157
- test 'if extend_remember_period is false, remember_me! should generate a new timestamp if expired' do
158
- swap Devise, remember_for: 5.minutes do
159
- resource = create_resource
160
- resource.remember_me!(false)
161
- assert resource.remember_created_at
162
-
163
- resource.remember_created_at = old = 10.minutes.ago
164
- resource.save
165
-
166
- resource.remember_me!(false)
167
- assert_not_equal old.to_i, resource.remember_created_at.to_i
168
- end
169
- end
170
-
171
- test 'if extend_remember_period is false, remember_me! should not generate a new timestamp' do
172
- swap Devise, remember_for: 1.year do
173
- resource = create_resource
174
- resource.remember_me!(false)
175
- assert resource.remember_created_at
176
-
177
- resource.remember_created_at = old = 10.minutes.ago.utc
178
- resource.save
179
-
180
- resource.remember_me!(false)
181
- assert_equal old.to_i, resource.remember_created_at.to_i
182
- end
183
- end
184
-
185
- test 'if extend_remember_period is true, remember_me! should always generate a new timestamp' do
186
- swap Devise, remember_for: 1.year do
187
- resource = create_resource
188
- resource.remember_me!(true)
189
- assert resource.remember_created_at
190
-
191
- resource.remember_created_at = old = 10.minutes.ago
192
- resource.save
193
-
194
- resource.remember_me!(true)
195
- assert_not_equal old, resource.remember_created_at
196
- end
197
- end
198
-
199
- test 'should have the required_fields array' do
200
- assert_same_content Devise::Models::Rememberable.required_fields(User), [
201
- :remember_created_at
202
- ]
203
- end
204
- end
@@ -1,49 +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
- def assert_key(key, subject)
39
- assert subject.key?(key), "Expected #{subject.inspect} to have key #{key.inspect}"
40
- end
41
-
42
- def assert_no_key(key, subject)
43
- assert !subject.key?(key), "Expected #{subject.inspect} to not have key #{key.inspect}"
44
- end
45
-
46
- def from_json(options=nil)
47
- ActiveSupport::JSON.decode(@user.to_json(options))["user"]
48
- end
49
- 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
- assert_not new_user.timedout?(29.minutes.ago)
11
- end
12
-
13
- test 'should not be expired when params is nil' do
14
- assert_not 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
- assert_not 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
- assert_not 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
- assert_not user.timedout?(30.seconds.ago)
36
-
37
- Devise.timeout_in = 5.minutes
38
- assert_not 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_same_content 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_same_content 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