devise 4.4.0 → 4.7.3

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