devise 3.5.10 → 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 (257) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +256 -1135
  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 +3 -1
  27. data/lib/devise/controllers/scoped_views.rb +2 -0
  28. data/lib/devise/controllers/sign_in_out.rb +34 -11
  29. data/lib/devise/controllers/store_location.rb +25 -7
  30. data/lib/devise/controllers/url_helpers.rb +2 -0
  31. data/lib/devise/delegator.rb +2 -0
  32. data/lib/devise/encryptor.rb +6 -4
  33. data/lib/devise/failure_app.rb +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 +2 -0
  41. data/lib/devise/hooks/trackable.rb +2 -0
  42. data/lib/devise/mailers/helpers.rb +7 -4
  43. data/lib/devise/mapping.rb +2 -0
  44. data/lib/devise/models/authenticatable.rb +51 -26
  45. data/lib/devise/models/confirmable.rb +88 -27
  46. data/lib/devise/models/database_authenticatable.rb +88 -21
  47. data/lib/devise/models/lockable.rb +10 -4
  48. data/lib/devise/models/omniauthable.rb +2 -0
  49. data/lib/devise/models/recoverable.rb +31 -19
  50. data/lib/devise/models/registerable.rb +4 -0
  51. data/lib/devise/models/rememberable.rb +5 -10
  52. data/lib/devise/models/timeoutable.rb +2 -0
  53. data/lib/devise/models/trackable.rb +15 -1
  54. data/lib/devise/models/validatable.rb +10 -3
  55. data/lib/devise/models.rb +3 -1
  56. data/lib/devise/modules.rb +2 -0
  57. data/lib/devise/omniauth/config.rb +2 -0
  58. data/lib/devise/omniauth/url_helpers.rb +14 -5
  59. data/lib/devise/omniauth.rb +2 -0
  60. data/lib/devise/orm/active_record.rb +5 -1
  61. data/lib/devise/orm/mongoid.rb +6 -2
  62. data/lib/devise/parameter_filter.rb +4 -0
  63. data/lib/devise/parameter_sanitizer.rb +139 -65
  64. data/lib/devise/rails/routes.rb +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 +2 -0
  72. data/lib/devise/test/controller_helpers.rb +165 -0
  73. data/lib/devise/test/integration_helpers.rb +63 -0
  74. data/lib/devise/test_helpers.rb +7 -124
  75. data/lib/devise/time_inflector.rb +2 -0
  76. data/lib/devise/token_generator.rb +3 -41
  77. data/lib/devise/version.rb +3 -1
  78. data/lib/devise.rb +61 -40
  79. data/lib/generators/active_record/devise_generator.rb +29 -10
  80. data/lib/generators/active_record/templates/migration.rb +4 -2
  81. data/lib/generators/active_record/templates/migration_existing.rb +4 -2
  82. data/lib/generators/devise/controllers_generator.rb +3 -1
  83. data/lib/generators/devise/devise_generator.rb +4 -2
  84. data/lib/generators/devise/install_generator.rb +17 -0
  85. data/lib/generators/devise/orm_helpers.rb +10 -21
  86. data/lib/generators/devise/views_generator.rb +7 -8
  87. data/lib/generators/mongoid/devise_generator.rb +7 -5
  88. data/lib/generators/templates/README +1 -8
  89. data/lib/generators/templates/controllers/confirmations_controller.rb +2 -0
  90. data/lib/generators/templates/controllers/omniauth_callbacks_controller.rb +2 -0
  91. data/lib/generators/templates/controllers/passwords_controller.rb +2 -0
  92. data/lib/generators/templates/controllers/registrations_controller.rb +6 -4
  93. data/lib/generators/templates/controllers/sessions_controller.rb +4 -2
  94. data/lib/generators/templates/controllers/unlocks_controller.rb +2 -0
  95. data/lib/generators/templates/devise.rb +50 -20
  96. data/lib/generators/templates/markerb/email_changed.markerb +7 -0
  97. data/lib/generators/templates/markerb/password_change.markerb +2 -2
  98. data/lib/generators/templates/simple_form_for/confirmations/new.html.erb +5 -1
  99. data/lib/generators/templates/simple_form_for/passwords/edit.html.erb +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 -312
  106. data/.gitignore +0 -10
  107. data/.travis.yml +0 -44
  108. data/.yardopts +0 -9
  109. data/CODE_OF_CONDUCT.md +0 -22
  110. data/CONTRIBUTING.md +0 -16
  111. data/Gemfile +0 -30
  112. data/Gemfile.lock +0 -187
  113. data/Rakefile +0 -36
  114. data/devise.gemspec +0 -27
  115. data/devise.png +0 -0
  116. data/gemfiles/Gemfile.rails-3.2-stable +0 -29
  117. data/gemfiles/Gemfile.rails-3.2-stable.lock +0 -172
  118. data/gemfiles/Gemfile.rails-4.0-stable +0 -30
  119. data/gemfiles/Gemfile.rails-4.0-stable.lock +0 -166
  120. data/gemfiles/Gemfile.rails-4.1-stable +0 -30
  121. data/gemfiles/Gemfile.rails-4.1-stable.lock +0 -171
  122. data/gemfiles/Gemfile.rails-4.2-stable +0 -30
  123. data/gemfiles/Gemfile.rails-4.2-stable.lock +0 -193
  124. data/script/cached-bundle +0 -49
  125. data/script/s3-put +0 -71
  126. data/test/controllers/custom_registrations_controller_test.rb +0 -40
  127. data/test/controllers/custom_strategy_test.rb +0 -62
  128. data/test/controllers/helper_methods_test.rb +0 -21
  129. data/test/controllers/helpers_test.rb +0 -316
  130. data/test/controllers/inherited_controller_i18n_messages_test.rb +0 -51
  131. data/test/controllers/internal_helpers_test.rb +0 -129
  132. data/test/controllers/load_hooks_controller_test.rb +0 -19
  133. data/test/controllers/passwords_controller_test.rb +0 -31
  134. data/test/controllers/sessions_controller_test.rb +0 -103
  135. data/test/controllers/url_helpers_test.rb +0 -65
  136. data/test/delegator_test.rb +0 -19
  137. data/test/devise_test.rb +0 -107
  138. data/test/failure_app_test.rb +0 -315
  139. data/test/generators/active_record_generator_test.rb +0 -109
  140. data/test/generators/controllers_generator_test.rb +0 -48
  141. data/test/generators/devise_generator_test.rb +0 -39
  142. data/test/generators/install_generator_test.rb +0 -13
  143. data/test/generators/mongoid_generator_test.rb +0 -23
  144. data/test/generators/views_generator_test.rb +0 -103
  145. data/test/helpers/devise_helper_test.rb +0 -49
  146. data/test/integration/authenticatable_test.rb +0 -729
  147. data/test/integration/confirmable_test.rb +0 -324
  148. data/test/integration/database_authenticatable_test.rb +0 -95
  149. data/test/integration/http_authenticatable_test.rb +0 -105
  150. data/test/integration/lockable_test.rb +0 -239
  151. data/test/integration/omniauthable_test.rb +0 -135
  152. data/test/integration/recoverable_test.rb +0 -347
  153. data/test/integration/registerable_test.rb +0 -359
  154. data/test/integration/rememberable_test.rb +0 -214
  155. data/test/integration/timeoutable_test.rb +0 -184
  156. data/test/integration/trackable_test.rb +0 -92
  157. data/test/mailers/confirmation_instructions_test.rb +0 -115
  158. data/test/mailers/reset_password_instructions_test.rb +0 -96
  159. data/test/mailers/unlock_instructions_test.rb +0 -91
  160. data/test/mapping_test.rb +0 -134
  161. data/test/models/authenticatable_test.rb +0 -23
  162. data/test/models/confirmable_test.rb +0 -511
  163. data/test/models/database_authenticatable_test.rb +0 -269
  164. data/test/models/lockable_test.rb +0 -350
  165. data/test/models/omniauthable_test.rb +0 -7
  166. data/test/models/recoverable_test.rb +0 -251
  167. data/test/models/registerable_test.rb +0 -7
  168. data/test/models/rememberable_test.rb +0 -169
  169. data/test/models/serializable_test.rb +0 -49
  170. data/test/models/timeoutable_test.rb +0 -51
  171. data/test/models/trackable_test.rb +0 -41
  172. data/test/models/validatable_test.rb +0 -127
  173. data/test/models_test.rb +0 -153
  174. data/test/omniauth/config_test.rb +0 -57
  175. data/test/omniauth/url_helpers_test.rb +0 -54
  176. data/test/orm/active_record.rb +0 -10
  177. data/test/orm/mongoid.rb +0 -13
  178. data/test/parameter_sanitizer_test.rb +0 -81
  179. data/test/rails_app/Rakefile +0 -6
  180. data/test/rails_app/app/active_record/admin.rb +0 -6
  181. data/test/rails_app/app/active_record/shim.rb +0 -2
  182. data/test/rails_app/app/active_record/user.rb +0 -6
  183. data/test/rails_app/app/active_record/user_on_engine.rb +0 -7
  184. data/test/rails_app/app/active_record/user_on_main_app.rb +0 -7
  185. data/test/rails_app/app/active_record/user_without_email.rb +0 -8
  186. data/test/rails_app/app/controllers/admins/sessions_controller.rb +0 -6
  187. data/test/rails_app/app/controllers/admins_controller.rb +0 -6
  188. data/test/rails_app/app/controllers/application_controller.rb +0 -12
  189. data/test/rails_app/app/controllers/application_with_fake_engine.rb +0 -30
  190. data/test/rails_app/app/controllers/custom/registrations_controller.rb +0 -31
  191. data/test/rails_app/app/controllers/home_controller.rb +0 -25
  192. data/test/rails_app/app/controllers/publisher/registrations_controller.rb +0 -2
  193. data/test/rails_app/app/controllers/publisher/sessions_controller.rb +0 -2
  194. data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +0 -14
  195. data/test/rails_app/app/controllers/users_controller.rb +0 -31
  196. data/test/rails_app/app/helpers/application_helper.rb +0 -3
  197. data/test/rails_app/app/mailers/users/from_proc_mailer.rb +0 -3
  198. data/test/rails_app/app/mailers/users/mailer.rb +0 -3
  199. data/test/rails_app/app/mailers/users/reply_to_mailer.rb +0 -4
  200. data/test/rails_app/app/mongoid/admin.rb +0 -29
  201. data/test/rails_app/app/mongoid/shim.rb +0 -23
  202. data/test/rails_app/app/mongoid/user.rb +0 -39
  203. data/test/rails_app/app/mongoid/user_on_engine.rb +0 -39
  204. data/test/rails_app/app/mongoid/user_on_main_app.rb +0 -39
  205. data/test/rails_app/app/mongoid/user_without_email.rb +0 -33
  206. data/test/rails_app/app/views/admins/index.html.erb +0 -1
  207. data/test/rails_app/app/views/admins/sessions/new.html.erb +0 -2
  208. data/test/rails_app/app/views/home/admin_dashboard.html.erb +0 -1
  209. data/test/rails_app/app/views/home/index.html.erb +0 -1
  210. data/test/rails_app/app/views/home/join.html.erb +0 -1
  211. data/test/rails_app/app/views/home/private.html.erb +0 -1
  212. data/test/rails_app/app/views/home/user_dashboard.html.erb +0 -1
  213. data/test/rails_app/app/views/layouts/application.html.erb +0 -24
  214. data/test/rails_app/app/views/users/edit_form.html.erb +0 -1
  215. data/test/rails_app/app/views/users/index.html.erb +0 -1
  216. data/test/rails_app/app/views/users/mailer/confirmation_instructions.erb +0 -1
  217. data/test/rails_app/app/views/users/sessions/new.html.erb +0 -1
  218. data/test/rails_app/bin/bundle +0 -3
  219. data/test/rails_app/bin/rails +0 -4
  220. data/test/rails_app/bin/rake +0 -4
  221. data/test/rails_app/config/application.rb +0 -40
  222. data/test/rails_app/config/boot.rb +0 -14
  223. data/test/rails_app/config/database.yml +0 -18
  224. data/test/rails_app/config/environment.rb +0 -5
  225. data/test/rails_app/config/environments/development.rb +0 -30
  226. data/test/rails_app/config/environments/production.rb +0 -84
  227. data/test/rails_app/config/environments/test.rb +0 -41
  228. data/test/rails_app/config/initializers/backtrace_silencers.rb +0 -7
  229. data/test/rails_app/config/initializers/devise.rb +0 -180
  230. data/test/rails_app/config/initializers/inflections.rb +0 -2
  231. data/test/rails_app/config/initializers/secret_token.rb +0 -8
  232. data/test/rails_app/config/initializers/session_store.rb +0 -1
  233. data/test/rails_app/config/routes.rb +0 -125
  234. data/test/rails_app/config.ru +0 -4
  235. data/test/rails_app/db/migrate/20100401102949_create_tables.rb +0 -71
  236. data/test/rails_app/db/schema.rb +0 -55
  237. data/test/rails_app/lib/shared_admin.rb +0 -17
  238. data/test/rails_app/lib/shared_user.rb +0 -29
  239. data/test/rails_app/lib/shared_user_without_email.rb +0 -26
  240. data/test/rails_app/lib/shared_user_without_omniauth.rb +0 -13
  241. data/test/rails_app/public/404.html +0 -26
  242. data/test/rails_app/public/422.html +0 -26
  243. data/test/rails_app/public/500.html +0 -26
  244. data/test/rails_app/public/favicon.ico +0 -0
  245. data/test/rails_test.rb +0 -9
  246. data/test/routes_test.rb +0 -264
  247. data/test/support/action_controller/record_identifier.rb +0 -10
  248. data/test/support/assertions.rb +0 -39
  249. data/test/support/helpers.rb +0 -77
  250. data/test/support/integration.rb +0 -92
  251. data/test/support/locale/en.yml +0 -8
  252. data/test/support/mongoid.yml +0 -6
  253. data/test/support/webrat/integrations/rails.rb +0 -24
  254. data/test/test_helper.rb +0 -34
  255. data/test/test_helpers_test.rb +0 -178
  256. data/test/test_models.rb +0 -33
  257. data/test/time_helpers.rb +0 -137
@@ -1,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,169 +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 authenticatable_salt is nil or empty' do
103
- user = User.new
104
- def user.authenticable_salt; nil; end
105
- assert_raise RuntimeError do
106
- user.rememberable_value
107
- end
108
-
109
- user = User.new
110
- def user.authenticable_salt; ""; end
111
- assert_raise RuntimeError do
112
- user.rememberable_value
113
- end
114
- end
115
-
116
- test 'should respond to remember_me attribute' do
117
- assert resource_class.new.respond_to?(:remember_me)
118
- assert resource_class.new.respond_to?(:remember_me=)
119
- end
120
-
121
- test 'forget_me should clear remember_created_at if expire_all_remember_me_on_sign_out is true' do
122
- swap Devise, expire_all_remember_me_on_sign_out: true do
123
- resource = create_resource
124
- resource.remember_me!
125
- assert_not_nil resource.remember_created_at
126
-
127
- resource.forget_me!
128
- assert_nil resource.remember_created_at
129
- end
130
- end
131
-
132
- test 'forget_me should not clear remember_created_at if expire_all_remember_me_on_sign_out is false' do
133
- swap Devise, expire_all_remember_me_on_sign_out: false do
134
- resource = create_resource
135
- resource.remember_me!
136
-
137
- assert_not_nil resource.remember_created_at
138
-
139
- resource.forget_me!
140
- assert_not_nil resource.remember_created_at
141
- end
142
- end
143
-
144
- test 'forget_me should not try to update resource if it has been destroyed' do
145
- resource = create_resource
146
- resource.expects(:remember_created_at).never
147
- resource.expects(:save).never
148
-
149
- resource.destroy
150
- resource.forget_me!
151
- end
152
-
153
- test 'remember expires at uses remember for configuration' do
154
- swap Devise, remember_for: 3.days do
155
- resource = create_resource
156
- resource.remember_me!
157
- assert_equal 3.days.from_now.to_date, resource.remember_expires_at.to_date
158
-
159
- Devise.remember_for = 5.days
160
- assert_equal 5.days.from_now.to_date, resource.remember_expires_at.to_date
161
- end
162
- end
163
-
164
- test 'should have the required_fields array' do
165
- assert_same_content Devise::Models::Rememberable.required_fields(User), [
166
- :remember_created_at
167
- ]
168
- end
169
- 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
@@ -1,127 +0,0 @@
1
- # encoding: UTF-8
2
- require 'test_helper'
3
-
4
- class ValidatableTest < ActiveSupport::TestCase
5
- test 'should require email to be set' do
6
- user = new_user(email: nil)
7
- assert user.invalid?
8
- assert user.errors[:email]
9
- assert_equal 'can\'t be blank', user.errors[:email].join
10
- end
11
-
12
- test 'should require uniqueness of email if email has changed, allowing blank' do
13
- existing_user = create_user
14
-
15
- user = new_user(email: '')
16
- assert user.invalid?
17
- assert_no_match(/taken/, user.errors[:email].join)
18
-
19
- user.email = existing_user.email
20
- assert user.invalid?
21
- assert_match(/taken/, user.errors[:email].join)
22
-
23
- user.save(validate: false)
24
- assert user.valid?
25
- end
26
-
27
- test 'should require correct email format if email has changed, allowing blank' do
28
- user = new_user(email: '')
29
- assert user.invalid?
30
- assert_not_equal 'is invalid', user.errors[:email].join
31
-
32
- %w{invalid_email_format 123 $$$ () ☃ bla@bla.}.each do |email|
33
- user.email = email
34
- assert user.invalid?, 'should be invalid with email ' << email
35
- assert_equal 'is invalid', user.errors[:email].join
36
- end
37
-
38
- user.save(validate: false)
39
- assert user.valid?
40
- end
41
-
42
- test 'should accept valid emails' do
43
- %w(a.b.c@example.com test_mail@gmail.com any@any.net email@test.br 123@mail.test 1☃3@mail.test).each do |email|
44
- user = new_user(email: email)
45
- assert user.valid?, 'should be valid with email ' << email
46
- assert_blank user.errors[:email]
47
- end
48
- end
49
-
50
- test 'should require password to be set when creating a new record' do
51
- user = new_user(password: '', password_confirmation: '')
52
- assert user.invalid?
53
- assert_equal 'can\'t be blank', user.errors[:password].join
54
- end
55
-
56
- test 'should require confirmation to be set when creating a new record' do
57
- user = new_user(password: 'new_password', password_confirmation: 'blabla')
58
- assert user.invalid?
59
-
60
- if Devise.rails4?
61
- assert_equal 'doesn\'t match Password', user.errors[:password_confirmation].join
62
- else
63
- assert_equal 'doesn\'t match confirmation', user.errors[:password].join
64
- end
65
- end
66
-
67
- test 'should require password when updating/resetting password' do
68
- user = create_user
69
-
70
- user.password = ''
71
- user.password_confirmation = ''
72
-
73
- assert user.invalid?
74
- assert_equal 'can\'t be blank', user.errors[:password].join
75
- end
76
-
77
- test 'should require confirmation when updating/resetting password' do
78
- user = create_user
79
- user.password_confirmation = 'another_password'
80
- assert user.invalid?
81
-
82
- if Devise.rails4?
83
- assert_equal 'doesn\'t match Password', user.errors[:password_confirmation].join
84
- else
85
- assert_equal 'doesn\'t match confirmation', user.errors[:password].join
86
- end
87
- end
88
-
89
- test 'should require a password with minimum of 7 characters' do
90
- user = new_user(password: '12345', password_confirmation: '12345')
91
- assert user.invalid?
92
- assert_equal 'is too short (minimum is 7 characters)', user.errors[:password].join
93
- end
94
-
95
- test 'should require a password with maximum of 72 characters long' do
96
- user = new_user(password: 'x'*73, password_confirmation: 'x'*73)
97
- assert user.invalid?
98
- assert_equal 'is too long (maximum is 72 characters)', user.errors[:password].join
99
- end
100
-
101
- test 'should not require password length when it\'s not changed' do
102
- user = create_user.reload
103
- user.password = user.password_confirmation = nil
104
- assert user.valid?
105
-
106
- user.password_confirmation = 'confirmation'
107
- assert user.invalid?
108
- assert_not (user.errors[:password].join =~ /is too long/)
109
- end
110
-
111
- test 'should complain about length even if password is not required' do
112
- user = new_user(password: 'x'*73, password_confirmation: 'x'*73)
113
- user.stubs(:password_required?).returns(false)
114
- assert user.invalid?
115
- assert_equal 'is too long (maximum is 72 characters)', user.errors[:password].join
116
- end
117
-
118
- test 'should not be included in objects with invalid API' do
119
- assert_raise RuntimeError do
120
- Class.new.send :include, Devise::Models::Validatable
121
- end
122
- end
123
-
124
- test 'required_fields should be an empty array' do
125
- assert_equal Devise::Models::Validatable.required_fields(User), []
126
- end
127
- end