devise 3.5.3 → 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 +256 -1099
  3. data/MIT-LICENSE +1 -1
  4. data/README.md +254 -67
  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 +3 -3
  17. data/app/views/devise/passwords/new.html.erb +2 -2
  18. data/app/views/devise/registrations/edit.html.erb +9 -5
  19. data/app/views/devise/registrations/new.html.erb +4 -4
  20. data/app/views/devise/sessions/new.html.erb +4 -4
  21. data/app/views/devise/shared/_error_messages.html.erb +15 -0
  22. data/app/views/devise/shared/_links.html.erb +7 -7
  23. data/app/views/devise/unlocks/new.html.erb +2 -2
  24. data/config/locales/en.yml +4 -1
  25. data/lib/devise/controllers/helpers.rb +23 -20
  26. data/lib/devise/controllers/rememberable.rb +11 -2
  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 +75 -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 +5 -2
  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 -26
  45. data/lib/devise/models/confirmable.rb +89 -27
  46. data/lib/devise/models/database_authenticatable.rb +88 -21
  47. data/lib/devise/models/lockable.rb +15 -5
  48. data/lib/devise/models/omniauthable.rb +2 -0
  49. data/lib/devise/models/recoverable.rb +32 -20
  50. data/lib/devise/models/registerable.rb +4 -0
  51. data/lib/devise/models/rememberable.rb +42 -26
  52. data/lib/devise/models/timeoutable.rb +2 -6
  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 +44 -33
  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 +3 -1
  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 +5 -6
  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 +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 +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 +13 -310
  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 -29
  112. data/Gemfile.lock +0 -183
  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 -29
  119. data/gemfiles/Gemfile.rails-4.0-stable.lock +0 -166
  120. data/gemfiles/Gemfile.rails-4.1-stable +0 -29
  121. data/gemfiles/Gemfile.rails-4.1-stable.lock +0 -172
  122. data/gemfiles/Gemfile.rails-4.2-stable +0 -29
  123. data/gemfiles/Gemfile.rails-4.2-stable.lock +0 -194
  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 -176
  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 -489
  163. data/test/models/database_authenticatable_test.rb +0 -269
  164. data/test/models/lockable_test.rb +0 -328
  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 -204
  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
@@ -1,251 +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
- assert_not 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
- assert_not 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
- assert_not 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
- assert_not 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
- assert_not 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
- assert_not 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
- assert_not 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 reset successfully user password given the new password and confirmation' do
188
- user = create_user
189
- old_password = user.password
190
- raw = user.send_reset_password_instructions
191
-
192
- reset_password_user = User.reset_password_by_token(
193
- reset_password_token: raw,
194
- password: 'new_password',
195
- password_confirmation: 'new_password'
196
- )
197
- assert_nil reset_password_user.reset_password_token
198
-
199
- user.reload
200
- assert_not user.valid_password?(old_password)
201
- assert user.valid_password?('new_password')
202
- assert_nil user.reset_password_token
203
- end
204
-
205
- test 'should not reset password after reset_password_within time' do
206
- swap Devise, reset_password_within: 1.hour do
207
- user = create_user
208
- raw = user.send_reset_password_instructions
209
-
210
- old_password = user.password
211
- user.reset_password_sent_at = 2.days.ago
212
- user.save!
213
-
214
- reset_password_user = User.reset_password_by_token(
215
- reset_password_token: raw,
216
- password: 'new_password',
217
- password_confirmation: 'new_password'
218
- )
219
- user.reload
220
-
221
- assert user.valid_password?(old_password)
222
- assert_not user.valid_password?('new_password')
223
- assert_equal "has expired, please request a new one", reset_password_user.errors[:reset_password_token].join
224
- end
225
- end
226
-
227
- test 'required_fields should contain the fields that Devise uses' do
228
- assert_same_content Devise::Models::Recoverable.required_fields(User), [
229
- :reset_password_sent_at,
230
- :reset_password_token
231
- ]
232
- end
233
-
234
- test 'should return a user based on the raw token' do
235
- user = create_user
236
- raw = user.send_reset_password_instructions
237
-
238
- assert_equal User.with_reset_password_token(raw), user
239
- end
240
-
241
- test 'should return the same reset password token as generated' do
242
- user = create_user
243
- raw = user.send_reset_password_instructions
244
- assert_equal Devise.token_generator.digest(self.class, :reset_password_token, raw), user.reset_password_token
245
- end
246
-
247
- test 'should return nil if a user based on the raw token is not found' do
248
- assert_equal User.with_reset_password_token('random-token'), nil
249
- end
250
-
251
- 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