devise 4.3.0 → 4.9.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (259) hide show
  1. checksums.yaml +5 -5
  2. data/CHANGELOG.md +205 -2
  3. data/MIT-LICENSE +2 -1
  4. data/README.md +214 -57
  5. data/app/controllers/devise/confirmations_controller.rb +3 -0
  6. data/app/controllers/devise/omniauth_callbacks_controller.rb +3 -1
  7. data/app/controllers/devise/passwords_controller.rb +5 -2
  8. data/app/controllers/devise/registrations_controller.rb +32 -12
  9. data/app/controllers/devise/sessions_controller.rb +4 -2
  10. data/app/controllers/devise/unlocks_controller.rb +3 -0
  11. data/app/controllers/devise_controller.rb +6 -3
  12. data/app/helpers/devise_helper.rb +23 -18
  13. data/app/mailers/devise/mailer.rb +7 -5
  14. data/app/views/devise/confirmations/new.html.erb +2 -2
  15. data/app/views/devise/passwords/edit.html.erb +3 -3
  16. data/app/views/devise/passwords/new.html.erb +2 -2
  17. data/app/views/devise/registrations/edit.html.erb +6 -6
  18. data/app/views/devise/registrations/new.html.erb +4 -4
  19. data/app/views/devise/sessions/new.html.erb +4 -4
  20. data/app/views/devise/shared/_error_messages.html.erb +15 -0
  21. data/app/views/devise/shared/_links.html.erb +8 -8
  22. data/app/views/devise/unlocks/new.html.erb +2 -2
  23. data/config/locales/en.yml +3 -2
  24. data/lib/devise/controllers/helpers.rb +10 -8
  25. data/lib/devise/controllers/rememberable.rb +2 -0
  26. data/lib/devise/controllers/responder.rb +35 -0
  27. data/lib/devise/controllers/scoped_views.rb +2 -0
  28. data/lib/devise/controllers/sign_in_out.rb +14 -4
  29. data/lib/devise/controllers/store_location.rb +24 -6
  30. data/lib/devise/controllers/url_helpers.rb +3 -1
  31. data/lib/devise/delegator.rb +2 -0
  32. data/lib/devise/encryptor.rb +2 -0
  33. data/lib/devise/failure_app.rb +33 -7
  34. data/lib/devise/hooks/activatable.rb +2 -0
  35. data/lib/devise/hooks/csrf_cleaner.rb +8 -1
  36. data/lib/devise/hooks/forgetable.rb +2 -0
  37. data/lib/devise/hooks/lockable.rb +4 -5
  38. data/lib/devise/hooks/proxy.rb +2 -0
  39. data/lib/devise/hooks/rememberable.rb +2 -0
  40. data/lib/devise/hooks/timeoutable.rb +4 -2
  41. data/lib/devise/hooks/trackable.rb +2 -0
  42. data/lib/devise/mailers/helpers.rb +2 -0
  43. data/lib/devise/mapping.rb +3 -1
  44. data/lib/devise/models/authenticatable.rb +55 -50
  45. data/lib/devise/models/confirmable.rb +36 -40
  46. data/lib/devise/models/database_authenticatable.rb +57 -36
  47. data/lib/devise/models/lockable.rb +18 -4
  48. data/lib/devise/models/omniauthable.rb +4 -2
  49. data/lib/devise/models/recoverable.rb +10 -19
  50. data/lib/devise/models/registerable.rb +4 -0
  51. data/lib/devise/models/rememberable.rb +5 -3
  52. data/lib/devise/models/timeoutable.rb +3 -1
  53. data/lib/devise/models/trackable.rb +15 -1
  54. data/lib/devise/models/validatable.rb +7 -10
  55. data/lib/devise/models.rb +3 -0
  56. data/lib/devise/modules.rb +2 -0
  57. data/lib/devise/omniauth/config.rb +2 -0
  58. data/lib/devise/omniauth/url_helpers.rb +2 -0
  59. data/lib/devise/omniauth.rb +4 -5
  60. data/lib/devise/orm/active_record.rb +2 -0
  61. data/lib/devise/orm/mongoid.rb +2 -0
  62. data/lib/devise/orm.rb +71 -0
  63. data/lib/devise/parameter_filter.rb +4 -0
  64. data/lib/devise/parameter_sanitizer.rb +15 -1
  65. data/lib/devise/rails/deprecated_constant_accessor.rb +39 -0
  66. data/lib/devise/rails/routes.rb +8 -6
  67. data/lib/devise/rails/warden_compat.rb +2 -0
  68. data/lib/devise/rails.rb +3 -5
  69. data/lib/devise/secret_key_finder.rb +27 -0
  70. data/lib/devise/strategies/authenticatable.rb +3 -1
  71. data/lib/devise/strategies/base.rb +2 -0
  72. data/lib/devise/strategies/database_authenticatable.rb +8 -1
  73. data/lib/devise/strategies/rememberable.rb +2 -0
  74. data/lib/devise/test/controller_helpers.rb +6 -1
  75. data/lib/devise/test/integration_helpers.rb +3 -1
  76. data/lib/devise/test_helpers.rb +2 -0
  77. data/lib/devise/time_inflector.rb +2 -0
  78. data/lib/devise/token_generator.rb +2 -0
  79. data/lib/devise/version.rb +3 -1
  80. data/lib/devise.rb +38 -12
  81. data/lib/generators/active_record/devise_generator.rb +40 -12
  82. data/lib/generators/active_record/templates/migration.rb +3 -1
  83. data/lib/generators/active_record/templates/migration_existing.rb +2 -0
  84. data/lib/generators/devise/controllers_generator.rb +3 -1
  85. data/lib/generators/devise/devise_generator.rb +5 -3
  86. data/lib/generators/devise/install_generator.rb +3 -5
  87. data/lib/generators/devise/orm_helpers.rb +9 -3
  88. data/lib/generators/devise/views_generator.rb +8 -9
  89. data/lib/generators/mongoid/devise_generator.rb +7 -5
  90. data/lib/generators/templates/README +9 -1
  91. data/lib/generators/templates/controllers/confirmations_controller.rb +2 -0
  92. data/lib/generators/templates/controllers/omniauth_callbacks_controller.rb +3 -1
  93. data/lib/generators/templates/controllers/passwords_controller.rb +2 -0
  94. data/lib/generators/templates/controllers/registrations_controller.rb +2 -0
  95. data/lib/generators/templates/controllers/sessions_controller.rb +2 -0
  96. data/lib/generators/templates/controllers/unlocks_controller.rb +2 -0
  97. data/lib/generators/templates/devise.rb +43 -7
  98. data/lib/generators/templates/simple_form_for/confirmations/new.html.erb +5 -1
  99. data/lib/generators/templates/simple_form_for/passwords/edit.html.erb +10 -2
  100. data/lib/generators/templates/simple_form_for/passwords/new.html.erb +4 -1
  101. data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +12 -4
  102. data/lib/generators/templates/simple_form_for/registrations/new.html.erb +11 -3
  103. data/lib/generators/templates/simple_form_for/sessions/new.html.erb +7 -2
  104. data/lib/generators/templates/simple_form_for/unlocks/new.html.erb +4 -1
  105. metadata +24 -307
  106. data/.gitignore +0 -10
  107. data/.travis.yml +0 -58
  108. data/.yardopts +0 -9
  109. data/CODE_OF_CONDUCT.md +0 -22
  110. data/CONTRIBUTING.md +0 -79
  111. data/Gemfile +0 -40
  112. data/Gemfile.lock +0 -194
  113. data/Rakefile +0 -36
  114. data/bin/test +0 -13
  115. data/devise.gemspec +0 -26
  116. data/devise.png +0 -0
  117. data/gemfiles/Gemfile.rails-4.1-stable +0 -30
  118. data/gemfiles/Gemfile.rails-4.1-stable.lock +0 -171
  119. data/gemfiles/Gemfile.rails-4.2-stable +0 -30
  120. data/gemfiles/Gemfile.rails-4.2-stable.lock +0 -192
  121. data/gemfiles/Gemfile.rails-5.0-stable +0 -34
  122. data/gemfiles/Gemfile.rails-5.0-stable.lock +0 -193
  123. data/guides/bug_report_templates/integration_test.rb +0 -104
  124. data/test/controllers/custom_registrations_controller_test.rb +0 -40
  125. data/test/controllers/custom_strategy_test.rb +0 -64
  126. data/test/controllers/helper_methods_test.rb +0 -22
  127. data/test/controllers/helpers_test.rb +0 -316
  128. data/test/controllers/inherited_controller_i18n_messages_test.rb +0 -51
  129. data/test/controllers/internal_helpers_test.rb +0 -127
  130. data/test/controllers/load_hooks_controller_test.rb +0 -19
  131. data/test/controllers/passwords_controller_test.rb +0 -32
  132. data/test/controllers/sessions_controller_test.rb +0 -106
  133. data/test/controllers/url_helpers_test.rb +0 -65
  134. data/test/delegator_test.rb +0 -19
  135. data/test/devise_test.rb +0 -107
  136. data/test/failure_app_test.rb +0 -338
  137. data/test/generators/active_record_generator_test.rb +0 -83
  138. data/test/generators/controllers_generator_test.rb +0 -48
  139. data/test/generators/devise_generator_test.rb +0 -39
  140. data/test/generators/install_generator_test.rb +0 -24
  141. data/test/generators/mongoid_generator_test.rb +0 -23
  142. data/test/generators/views_generator_test.rb +0 -103
  143. data/test/helpers/devise_helper_test.rb +0 -49
  144. data/test/integration/authenticatable_test.rb +0 -698
  145. data/test/integration/confirmable_test.rb +0 -324
  146. data/test/integration/database_authenticatable_test.rb +0 -95
  147. data/test/integration/http_authenticatable_test.rb +0 -106
  148. data/test/integration/lockable_test.rb +0 -240
  149. data/test/integration/mounted_engine_test.rb +0 -36
  150. data/test/integration/omniauthable_test.rb +0 -135
  151. data/test/integration/recoverable_test.rb +0 -347
  152. data/test/integration/registerable_test.rb +0 -363
  153. data/test/integration/rememberable_test.rb +0 -217
  154. data/test/integration/timeoutable_test.rb +0 -184
  155. data/test/integration/trackable_test.rb +0 -92
  156. data/test/mailers/confirmation_instructions_test.rb +0 -115
  157. data/test/mailers/email_changed_test.rb +0 -130
  158. data/test/mailers/mailer_test.rb +0 -18
  159. data/test/mailers/reset_password_instructions_test.rb +0 -96
  160. data/test/mailers/unlock_instructions_test.rb +0 -91
  161. data/test/mapping_test.rb +0 -134
  162. data/test/models/authenticatable_test.rb +0 -23
  163. data/test/models/confirmable_test.rb +0 -536
  164. data/test/models/database_authenticatable_test.rb +0 -281
  165. data/test/models/lockable_test.rb +0 -350
  166. data/test/models/omniauthable_test.rb +0 -7
  167. data/test/models/recoverable_test.rb +0 -261
  168. data/test/models/registerable_test.rb +0 -7
  169. data/test/models/rememberable_test.rb +0 -182
  170. data/test/models/serializable_test.rb +0 -54
  171. data/test/models/timeoutable_test.rb +0 -51
  172. data/test/models/trackable_test.rb +0 -41
  173. data/test/models/validatable_test.rb +0 -119
  174. data/test/models_test.rb +0 -153
  175. data/test/omniauth/config_test.rb +0 -59
  176. data/test/omniauth/url_helpers_test.rb +0 -51
  177. data/test/orm/active_record.rb +0 -17
  178. data/test/orm/mongoid.rb +0 -13
  179. data/test/parameter_sanitizer_test.rb +0 -75
  180. data/test/rails_app/Rakefile +0 -6
  181. data/test/rails_app/app/active_record/admin.rb +0 -6
  182. data/test/rails_app/app/active_record/shim.rb +0 -2
  183. data/test/rails_app/app/active_record/user.rb +0 -7
  184. data/test/rails_app/app/active_record/user_on_engine.rb +0 -7
  185. data/test/rails_app/app/active_record/user_on_main_app.rb +0 -7
  186. data/test/rails_app/app/active_record/user_without_email.rb +0 -8
  187. data/test/rails_app/app/controllers/admins/sessions_controller.rb +0 -6
  188. data/test/rails_app/app/controllers/admins_controller.rb +0 -6
  189. data/test/rails_app/app/controllers/application_controller.rb +0 -11
  190. data/test/rails_app/app/controllers/application_with_fake_engine.rb +0 -30
  191. data/test/rails_app/app/controllers/custom/registrations_controller.rb +0 -31
  192. data/test/rails_app/app/controllers/home_controller.rb +0 -29
  193. data/test/rails_app/app/controllers/publisher/registrations_controller.rb +0 -2
  194. data/test/rails_app/app/controllers/publisher/sessions_controller.rb +0 -2
  195. data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +0 -14
  196. data/test/rails_app/app/controllers/users_controller.rb +0 -31
  197. data/test/rails_app/app/helpers/application_helper.rb +0 -3
  198. data/test/rails_app/app/mailers/users/from_proc_mailer.rb +0 -3
  199. data/test/rails_app/app/mailers/users/mailer.rb +0 -3
  200. data/test/rails_app/app/mailers/users/reply_to_mailer.rb +0 -4
  201. data/test/rails_app/app/mongoid/admin.rb +0 -29
  202. data/test/rails_app/app/mongoid/shim.rb +0 -23
  203. data/test/rails_app/app/mongoid/user.rb +0 -39
  204. data/test/rails_app/app/mongoid/user_on_engine.rb +0 -39
  205. data/test/rails_app/app/mongoid/user_on_main_app.rb +0 -39
  206. data/test/rails_app/app/mongoid/user_without_email.rb +0 -33
  207. data/test/rails_app/app/views/admins/index.html.erb +0 -1
  208. data/test/rails_app/app/views/admins/sessions/new.html.erb +0 -2
  209. data/test/rails_app/app/views/home/admin_dashboard.html.erb +0 -1
  210. data/test/rails_app/app/views/home/index.html.erb +0 -1
  211. data/test/rails_app/app/views/home/join.html.erb +0 -1
  212. data/test/rails_app/app/views/home/private.html.erb +0 -1
  213. data/test/rails_app/app/views/home/user_dashboard.html.erb +0 -1
  214. data/test/rails_app/app/views/layouts/application.html.erb +0 -24
  215. data/test/rails_app/app/views/users/edit_form.html.erb +0 -1
  216. data/test/rails_app/app/views/users/index.html.erb +0 -1
  217. data/test/rails_app/app/views/users/mailer/confirmation_instructions.erb +0 -1
  218. data/test/rails_app/app/views/users/sessions/new.html.erb +0 -1
  219. data/test/rails_app/bin/bundle +0 -3
  220. data/test/rails_app/bin/rails +0 -4
  221. data/test/rails_app/bin/rake +0 -4
  222. data/test/rails_app/config/application.rb +0 -44
  223. data/test/rails_app/config/boot.rb +0 -20
  224. data/test/rails_app/config/database.yml +0 -18
  225. data/test/rails_app/config/environment.rb +0 -5
  226. data/test/rails_app/config/environments/development.rb +0 -30
  227. data/test/rails_app/config/environments/production.rb +0 -86
  228. data/test/rails_app/config/environments/test.rb +0 -45
  229. data/test/rails_app/config/initializers/backtrace_silencers.rb +0 -7
  230. data/test/rails_app/config/initializers/devise.rb +0 -180
  231. data/test/rails_app/config/initializers/inflections.rb +0 -2
  232. data/test/rails_app/config/initializers/secret_token.rb +0 -3
  233. data/test/rails_app/config/initializers/session_store.rb +0 -1
  234. data/test/rails_app/config/routes.rb +0 -126
  235. data/test/rails_app/config.ru +0 -4
  236. data/test/rails_app/db/migrate/20100401102949_create_tables.rb +0 -75
  237. data/test/rails_app/db/schema.rb +0 -55
  238. data/test/rails_app/lib/shared_admin.rb +0 -21
  239. data/test/rails_app/lib/shared_user.rb +0 -30
  240. data/test/rails_app/lib/shared_user_without_email.rb +0 -26
  241. data/test/rails_app/lib/shared_user_without_omniauth.rb +0 -13
  242. data/test/rails_app/public/404.html +0 -26
  243. data/test/rails_app/public/422.html +0 -26
  244. data/test/rails_app/public/500.html +0 -26
  245. data/test/rails_app/public/favicon.ico +0 -0
  246. data/test/rails_test.rb +0 -9
  247. data/test/routes_test.rb +0 -279
  248. data/test/support/action_controller/record_identifier.rb +0 -10
  249. data/test/support/assertions.rb +0 -28
  250. data/test/support/helpers.rb +0 -77
  251. data/test/support/http_method_compatibility.rb +0 -51
  252. data/test/support/integration.rb +0 -92
  253. data/test/support/locale/en.yml +0 -8
  254. data/test/support/mongoid.yml +0 -6
  255. data/test/support/webrat/integrations/rails.rb +0 -33
  256. data/test/test/controller_helpers_test.rb +0 -186
  257. data/test/test/integration_helpers_test.rb +0 -32
  258. data/test/test_helper.rb +0 -34
  259. data/test/test_models.rb +0 -33
@@ -1,536 +0,0 @@
1
- require 'test_helper'
2
-
3
- class ConfirmableTest < ActiveSupport::TestCase
4
-
5
- def setup
6
- setup_mailer
7
- end
8
-
9
- test 'should generate confirmation token after creating a record' do
10
- assert_nil new_user.confirmation_token
11
- assert_not_nil create_user.confirmation_token
12
- end
13
-
14
- test 'should never generate the same confirmation token for different users' do
15
- confirmation_tokens = []
16
- 3.times do
17
- token = create_user.confirmation_token
18
- assert !confirmation_tokens.include?(token)
19
- confirmation_tokens << token
20
- end
21
- end
22
-
23
- test 'should confirm a user by updating confirmed at' do
24
- user = create_user
25
- assert_nil user.confirmed_at
26
- assert user.confirm
27
- assert_not_nil user.confirmed_at
28
- end
29
-
30
- test 'should verify whether a user is confirmed or not' do
31
- refute new_user.confirmed?
32
- user = create_user
33
- refute user.confirmed?
34
- user.confirm
35
- assert user.confirmed?
36
- end
37
-
38
- test 'should not confirm a user already confirmed' do
39
- user = create_user
40
- assert user.confirm
41
- assert_blank user.errors[:email]
42
-
43
- refute user.confirm
44
- assert_equal "was already confirmed, please try signing in", user.errors[:email].join
45
- end
46
-
47
- test 'should find and confirm a user automatically based on the raw token' do
48
- user = create_user
49
- raw = user.raw_confirmation_token
50
- confirmed_user = User.confirm_by_token(raw)
51
- assert_equal confirmed_user, user
52
- assert user.reload.confirmed?
53
- end
54
-
55
- test 'should return a new record with errors when a invalid token is given' do
56
- confirmed_user = User.confirm_by_token('invalid_confirmation_token')
57
- refute confirmed_user.persisted?
58
- assert_equal "is invalid", confirmed_user.errors[:confirmation_token].join
59
- end
60
-
61
- test 'should return a new record with errors when a blank token is given' do
62
- confirmed_user = User.confirm_by_token('')
63
- refute confirmed_user.persisted?
64
- assert_equal "can't be blank", confirmed_user.errors[:confirmation_token].join
65
- end
66
-
67
- test 'should generate errors for a user email if user is already confirmed' do
68
- user = create_user
69
- user.confirmed_at = Time.now
70
- user.save
71
- confirmed_user = User.confirm_by_token(user.raw_confirmation_token)
72
- assert confirmed_user.confirmed?
73
- assert_equal "was already confirmed, please try signing in", confirmed_user.errors[:email].join
74
- end
75
-
76
- test 'should show error when a token has already been used' do
77
- user = create_user
78
- raw = user.raw_confirmation_token
79
- User.confirm_by_token(raw)
80
- assert user.reload.confirmed?
81
-
82
- confirmed_user = User.confirm_by_token(raw)
83
- assert_equal "was already confirmed, please try signing in", confirmed_user.errors[:email].join
84
- end
85
-
86
- test 'should send confirmation instructions by email' do
87
- assert_email_sent "mynewuser@example.com" do
88
- create_user email: "mynewuser@example.com"
89
- end
90
- end
91
-
92
- test 'should not send confirmation when trying to save an invalid user' do
93
- assert_email_not_sent do
94
- user = new_user
95
- user.stubs(:valid?).returns(false)
96
- user.save
97
- end
98
- end
99
-
100
- test 'should not generate a new token neither send e-mail if skip_confirmation! is invoked' do
101
- user = new_user
102
- user.skip_confirmation!
103
-
104
- assert_email_not_sent do
105
- user.save!
106
- assert_nil user.confirmation_token
107
- assert_not_nil user.confirmed_at
108
- end
109
- end
110
-
111
- test 'should skip confirmation e-mail without confirming if skip_confirmation_notification! is invoked' do
112
- user = new_user
113
- user.skip_confirmation_notification!
114
-
115
- assert_email_not_sent do
116
- user.save!
117
- refute user.confirmed?
118
- end
119
- end
120
-
121
- test 'should not send confirmation when no email is provided' do
122
- assert_email_not_sent do
123
- user = new_user
124
- user.email = ''
125
- user.save(validate: false)
126
- end
127
- end
128
-
129
- test 'should find a user to send confirmation instructions' do
130
- user = create_user
131
- confirmation_user = User.send_confirmation_instructions(email: user.email)
132
- assert_equal confirmation_user, user
133
- end
134
-
135
- test 'should return a new user if no email was found' do
136
- confirmation_user = User.send_confirmation_instructions(email: "invalid@example.com")
137
- refute confirmation_user.persisted?
138
- end
139
-
140
- test 'should add error to new user email if no email was found' do
141
- confirmation_user = User.send_confirmation_instructions(email: "invalid@example.com")
142
- assert confirmation_user.errors[:email]
143
- assert_equal "not found", confirmation_user.errors[:email].join
144
- end
145
-
146
- test 'should send email instructions for the user confirm its email' do
147
- user = create_user
148
- assert_email_sent user.email do
149
- User.send_confirmation_instructions(email: user.email)
150
- end
151
- end
152
-
153
- test 'should always have confirmation token when email is sent' do
154
- user = new_user
155
- user.instance_eval { def confirmation_required?; false end }
156
- user.save
157
- user.send_confirmation_instructions
158
- assert_not_nil user.reload.confirmation_token
159
- end
160
-
161
- test 'should not resend email instructions if the user change their email' do
162
- user = create_user
163
- user.email = 'new_test@example.com'
164
- assert_email_not_sent do
165
- user.save!
166
- end
167
- end
168
-
169
- test 'should not reset confirmation status or token when updating email' do
170
- user = create_user
171
- original_token = user.confirmation_token
172
- user.confirm
173
- user.email = 'new_test@example.com'
174
- user.save!
175
-
176
- user.reload
177
- assert user.confirmed?
178
- assert_equal original_token, user.confirmation_token
179
- end
180
-
181
- test 'should not be able to send instructions if the user is already confirmed' do
182
- user = create_user
183
- user.confirm
184
- refute user.resend_confirmation_instructions
185
- assert user.confirmed?
186
- assert_equal 'was already confirmed, please try signing in', user.errors[:email].join
187
- end
188
-
189
- test 'confirm time should fallback to devise confirm in default configuration' do
190
- swap Devise, allow_unconfirmed_access_for: 1.day do
191
- user = create_user
192
- user.confirmation_sent_at = 2.days.ago
193
- refute user.active_for_authentication?
194
-
195
- Devise.allow_unconfirmed_access_for = 3.days
196
- assert user.active_for_authentication?
197
- end
198
- end
199
-
200
- test 'should be active when confirmation sent at is not overpast' do
201
- swap Devise, allow_unconfirmed_access_for: 5.days do
202
- Devise.allow_unconfirmed_access_for = 5.days
203
- user = create_user
204
-
205
- user.confirmation_sent_at = 4.days.ago
206
- assert user.active_for_authentication?
207
-
208
- user.confirmation_sent_at = 5.days.ago
209
- refute user.active_for_authentication?
210
- end
211
- end
212
-
213
- test 'should be active when already confirmed' do
214
- user = create_user
215
- refute user.confirmed?
216
- refute user.active_for_authentication?
217
-
218
- user.confirm
219
- assert user.confirmed?
220
- assert user.active_for_authentication?
221
- end
222
-
223
- test 'should not be active when confirm in is zero' do
224
- Devise.allow_unconfirmed_access_for = 0.days
225
- user = create_user
226
- user.confirmation_sent_at = Time.zone.today
227
- refute user.active_for_authentication?
228
- end
229
-
230
- test 'should be active when we set allow_unconfirmed_access_for to nil' do
231
- swap Devise, allow_unconfirmed_access_for: nil do
232
- user = create_user
233
- user.confirmation_sent_at = Time.zone.today
234
- assert user.active_for_authentication?
235
- end
236
- end
237
-
238
- test 'should not be active without confirmation' do
239
- user = create_user
240
- user.confirmation_sent_at = nil
241
- user.save
242
- refute user.reload.active_for_authentication?
243
- end
244
-
245
- test 'should be active without confirmation when confirmation is not required' do
246
- user = create_user
247
- user.instance_eval { def confirmation_required?; false end }
248
- user.confirmation_sent_at = nil
249
- user.save
250
- assert user.reload.active_for_authentication?
251
- end
252
-
253
- test 'should not break when a user tries to reset their password in the case where confirmation is not required and confirm_within is set' do
254
- swap Devise, confirm_within: 3.days do
255
- user = create_user
256
- user.instance_eval { def confirmation_required?; false end }
257
- user.confirmation_sent_at = nil
258
- user.save
259
- assert user.reload.confirm
260
- end
261
- end
262
-
263
- test 'should find a user to send email instructions for the user confirm its email by authentication_keys' do
264
- swap Devise, authentication_keys: [:username, :email] do
265
- user = create_user
266
- confirm_user = User.send_confirmation_instructions(email: user.email, username: user.username)
267
- assert_equal confirm_user, user
268
- end
269
- end
270
-
271
- test 'should require all confirmation_keys' do
272
- swap Devise, confirmation_keys: [:username, :email] do
273
- user = create_user
274
- confirm_user = User.send_confirmation_instructions(email: user.email)
275
- refute confirm_user.persisted?
276
- assert_equal "can't be blank", confirm_user.errors[:username].join
277
- end
278
- end
279
-
280
- def confirm_user_by_token_with_confirmation_sent_at(confirmation_sent_at)
281
- user = create_user
282
- user.update_attribute(:confirmation_sent_at, confirmation_sent_at)
283
- confirmed_user = User.confirm_by_token(user.raw_confirmation_token)
284
- assert_equal confirmed_user, user
285
- user.reload.confirmed?
286
- end
287
-
288
- test 'should accept confirmation email token even after 5 years when no expiration is set' do
289
- assert confirm_user_by_token_with_confirmation_sent_at(5.years.ago)
290
- end
291
-
292
- test 'should accept confirmation email token after 2 days when expiration is set to 3 days' do
293
- swap Devise, confirm_within: 3.days do
294
- assert confirm_user_by_token_with_confirmation_sent_at(2.days.ago)
295
- end
296
- end
297
-
298
- test 'should not accept confirmation email token after 4 days when expiration is set to 3 days' do
299
- swap Devise, confirm_within: 3.days do
300
- refute confirm_user_by_token_with_confirmation_sent_at(4.days.ago)
301
- end
302
- end
303
-
304
- test 'do not generate a new token on resend' do
305
- user = create_user
306
- old = user.confirmation_token
307
- user = User.find(user.id)
308
- user.resend_confirmation_instructions
309
- assert_equal user.confirmation_token, old
310
- end
311
-
312
- test 'generate a new token after first has expired' do
313
- swap Devise, confirm_within: 3.days do
314
- user = create_user
315
- old = user.confirmation_token
316
- user.update_attribute(:confirmation_sent_at, 4.days.ago)
317
- user = User.find(user.id)
318
- user.resend_confirmation_instructions
319
- assert_not_equal user.confirmation_token, old
320
- end
321
- end
322
-
323
- test 'should call after_confirmation if confirmed' do
324
- user = create_user
325
- user.define_singleton_method :after_confirmation do
326
- self.username = self.username.to_s + 'updated'
327
- end
328
- old = user.username
329
- assert user.confirm
330
- assert_not_equal user.username, old
331
- end
332
-
333
- test 'should not call after_confirmation if not confirmed' do
334
- user = create_user
335
- assert user.confirm
336
- user.define_singleton_method :after_confirmation do
337
- self.username = self.username.to_s + 'updated'
338
- end
339
- old = user.username
340
- refute user.confirm
341
- assert_equal user.username, old
342
- end
343
-
344
- test 'should always perform validations upon confirm when ensure valid true' do
345
- admin = create_admin
346
- admin.stubs(:valid?).returns(false)
347
- refute admin.confirm(ensure_valid: true)
348
- end
349
- end
350
-
351
- class ReconfirmableTest < ActiveSupport::TestCase
352
- test 'should not worry about validations on confirm even with reconfirmable' do
353
- admin = create_admin
354
- admin.reset_password_token = "a"
355
- assert admin.confirm
356
- end
357
-
358
- test 'should generate confirmation token after changing email' do
359
- admin = create_admin
360
- assert admin.confirm
361
- residual_token = admin.confirmation_token
362
- assert admin.update_attributes(email: 'new_test@example.com')
363
- assert_not_equal residual_token, admin.confirmation_token
364
- end
365
-
366
- test 'should not regenerate confirmation token or require reconfirmation if skipping reconfirmation after changing email' do
367
- admin = create_admin
368
- original_token = admin.confirmation_token
369
- assert admin.confirm
370
- admin.skip_reconfirmation!
371
- assert admin.update_attributes(email: 'new_test@example.com')
372
- assert admin.confirmed?
373
- refute admin.pending_reconfirmation?
374
- assert_equal original_token, admin.confirmation_token
375
- end
376
-
377
- test 'should skip sending reconfirmation email when email is changed and skip_confirmation_notification! is invoked' do
378
- admin = create_admin
379
- admin.skip_confirmation_notification!
380
-
381
- assert_email_not_sent do
382
- admin.update_attributes(email: 'new_test@example.com')
383
- end
384
- end
385
-
386
- test 'should regenerate confirmation token after changing email' do
387
- admin = create_admin
388
- assert admin.confirm
389
- assert admin.update_attributes(email: 'old_test@example.com')
390
- token = admin.confirmation_token
391
- assert admin.update_attributes(email: 'new_test@example.com')
392
- assert_not_equal token, admin.confirmation_token
393
- end
394
-
395
- test 'should send confirmation instructions by email after changing email' do
396
- admin = create_admin
397
- assert admin.confirm
398
- assert_email_sent "new_test@example.com" do
399
- assert admin.update_attributes(email: 'new_test@example.com')
400
- end
401
- assert_match "new_test@example.com", ActionMailer::Base.deliveries.last.body.encoded
402
- end
403
-
404
- test 'should send confirmation instructions by email after changing email from nil' do
405
- admin = create_admin(email: nil)
406
- assert_email_sent "new_test@example.com" do
407
- assert admin.update_attributes(email: 'new_test@example.com')
408
- end
409
- assert_match "new_test@example.com", ActionMailer::Base.deliveries.last.body.encoded
410
- end
411
-
412
- test 'should not send confirmation by email after changing password' do
413
- admin = create_admin
414
- assert admin.confirm
415
- assert_email_not_sent do
416
- assert admin.update_attributes(password: 'newpass', password_confirmation: 'newpass')
417
- end
418
- end
419
-
420
- test 'should not send confirmation by email after changing to a blank email' do
421
- admin = create_admin
422
- assert admin.confirm
423
- assert_email_not_sent do
424
- admin.email = ''
425
- admin.save(validate: false)
426
- end
427
- end
428
-
429
- test 'should stay confirmed when email is changed' do
430
- admin = create_admin
431
- assert admin.confirm
432
- assert admin.update_attributes(email: 'new_test@example.com')
433
- assert admin.confirmed?
434
- end
435
-
436
- test 'should update email only when it is confirmed' do
437
- admin = create_admin
438
- assert admin.confirm
439
- assert admin.update_attributes(email: 'new_test@example.com')
440
- assert_not_equal 'new_test@example.com', admin.email
441
- assert admin.confirm
442
- assert_equal 'new_test@example.com', admin.email
443
- end
444
-
445
- test 'should not allow admin to get past confirmation email by resubmitting their new address' do
446
- admin = create_admin
447
- assert admin.confirm
448
- assert admin.update_attributes(email: 'new_test@example.com')
449
- assert_not_equal 'new_test@example.com', admin.email
450
- assert admin.update_attributes(email: 'new_test@example.com')
451
- assert_not_equal 'new_test@example.com', admin.email
452
- end
453
-
454
- test 'should find a admin by send confirmation instructions with unconfirmed_email' do
455
- admin = create_admin
456
- assert admin.confirm
457
- assert admin.update_attributes(email: 'new_test@example.com')
458
- confirmation_admin = Admin.send_confirmation_instructions(email: admin.unconfirmed_email)
459
- assert_equal confirmation_admin, admin
460
- end
461
-
462
- test 'should return a new admin if no email or unconfirmed_email was found' do
463
- confirmation_admin = Admin.send_confirmation_instructions(email: "invalid@email.com")
464
- refute confirmation_admin.persisted?
465
- end
466
-
467
- test 'should add error to new admin email if no email or unconfirmed_email was found' do
468
- confirmation_admin = Admin.send_confirmation_instructions(email: "invalid@email.com")
469
- assert confirmation_admin.errors[:email]
470
- assert_equal "not found", confirmation_admin.errors[:email].join
471
- end
472
-
473
- test 'should find admin with email in unconfirmed_emails' do
474
- admin = create_admin
475
- admin.unconfirmed_email = "new_test@email.com"
476
- assert admin.save
477
- admin = Admin.find_by_unconfirmed_email_with_errors(email: "new_test@email.com")
478
- assert admin.persisted?
479
- end
480
-
481
- test 'required_fields should contain the fields that Devise uses' do
482
- assert_equal Devise::Models::Confirmable.required_fields(User), [
483
- :confirmation_token,
484
- :confirmed_at,
485
- :confirmation_sent_at
486
- ]
487
- end
488
-
489
- test 'required_fields should also contain unconfirmable when reconfirmable_email is true' do
490
- assert_equal Devise::Models::Confirmable.required_fields(Admin), [
491
- :confirmation_token,
492
- :confirmed_at,
493
- :confirmation_sent_at,
494
- :unconfirmed_email
495
- ]
496
- end
497
-
498
- test 'should not require reconfirmation after creating a record' do
499
- admin = create_admin
500
- assert !admin.pending_reconfirmation?
501
- end
502
-
503
- test 'should not require reconfirmation after creating a record with #save called in callback' do
504
- class Admin::WithSaveInCallback < Admin
505
- after_create :save
506
- end
507
-
508
- admin = Admin::WithSaveInCallback.create(valid_attributes.except(:username))
509
- assert !admin.pending_reconfirmation?
510
- end
511
-
512
- test 'should require reconfirmation after creating a record and updating the email' do
513
- admin = create_admin
514
- assert !admin.instance_variable_get(:@bypass_confirmation_postpone)
515
- admin.email = "new_test@email.com"
516
- admin.save
517
- assert admin.pending_reconfirmation?
518
- end
519
-
520
- test 'should notify previous email on email change when configured' do
521
- swap Devise, send_email_changed_notification: true do
522
- admin = create_admin
523
- original_email = admin.email
524
-
525
- assert_difference 'ActionMailer::Base.deliveries.size', 2 do
526
- assert admin.update_attributes(email: 'new-email@example.com')
527
- end
528
- assert_equal original_email, ActionMailer::Base.deliveries[-2]['to'].to_s
529
- assert_equal 'new-email@example.com', ActionMailer::Base.deliveries[-1]['to'].to_s
530
-
531
- assert_email_not_sent do
532
- assert admin.confirm
533
- end
534
- end
535
- end
536
- end