devise 3.2.1 → 4.4.3
Sign up to get free protection for your applications and to get access to all the features.
Potentially problematic release.
This version of devise might be problematic. Click here for more details.
- checksums.yaml +7 -0
- data/.travis.yml +58 -10
- data/CHANGELOG.md +199 -979
- data/CODE_OF_CONDUCT.md +22 -0
- data/CONTRIBUTING.md +73 -8
- data/Gemfile +19 -11
- data/Gemfile.lock +152 -119
- data/ISSUE_TEMPLATE.md +19 -0
- data/MIT-LICENSE +1 -1
- data/README.md +347 -93
- data/Rakefile +4 -2
- data/app/controllers/devise/confirmations_controller.rb +11 -5
- data/app/controllers/devise/omniauth_callbacks_controller.rb +12 -6
- data/app/controllers/devise/passwords_controller.rb +20 -8
- data/app/controllers/devise/registrations_controller.rb +34 -19
- data/app/controllers/devise/sessions_controller.rb +47 -17
- data/app/controllers/devise/unlocks_controller.rb +9 -4
- data/app/controllers/devise_controller.rb +67 -31
- data/app/helpers/devise_helper.rb +4 -2
- data/app/mailers/devise/mailer.rb +10 -0
- data/app/views/devise/confirmations/new.html.erb +8 -4
- data/app/views/devise/mailer/confirmation_instructions.html.erb +1 -1
- data/app/views/devise/mailer/email_changed.html.erb +7 -0
- data/app/views/devise/mailer/password_change.html.erb +3 -0
- data/app/views/devise/mailer/reset_password_instructions.html.erb +1 -1
- data/app/views/devise/mailer/unlock_instructions.html.erb +1 -1
- data/app/views/devise/passwords/edit.html.erb +15 -6
- data/app/views/devise/passwords/new.html.erb +8 -4
- data/app/views/devise/registrations/edit.html.erb +28 -14
- data/app/views/devise/registrations/new.html.erb +19 -8
- data/app/views/devise/sessions/new.html.erb +17 -8
- data/app/views/devise/shared/{_links.erb → _links.html.erb} +2 -2
- data/app/views/devise/unlocks/new.html.erb +8 -4
- data/bin/test +13 -0
- data/config/locales/en.yml +22 -17
- data/devise.gemspec +7 -6
- data/gemfiles/Gemfile.rails-4.1-stable +32 -0
- data/gemfiles/Gemfile.rails-4.1-stable.lock +171 -0
- data/gemfiles/Gemfile.rails-4.2-stable +32 -0
- data/gemfiles/Gemfile.rails-4.2-stable.lock +192 -0
- data/gemfiles/Gemfile.rails-5.0-stable +33 -0
- data/gemfiles/Gemfile.rails-5.0-stable.lock +192 -0
- data/gemfiles/Gemfile.rails-5.2-rc1 +26 -0
- data/gemfiles/Gemfile.rails-5.2-rc1.lock +201 -0
- data/guides/bug_report_templates/integration_test.rb +106 -0
- data/lib/devise.rb +107 -84
- data/lib/devise/controllers/helpers.rb +111 -31
- data/lib/devise/controllers/rememberable.rb +15 -6
- data/lib/devise/controllers/scoped_views.rb +3 -1
- data/lib/devise/controllers/sign_in_out.rb +39 -26
- data/lib/devise/controllers/store_location.rb +31 -2
- data/lib/devise/controllers/url_helpers.rb +9 -7
- data/lib/devise/delegator.rb +2 -0
- data/lib/devise/encryptor.rb +24 -0
- data/lib/devise/failure_app.rb +98 -39
- data/lib/devise/hooks/activatable.rb +7 -6
- data/lib/devise/hooks/csrf_cleaner.rb +5 -1
- data/lib/devise/hooks/forgetable.rb +2 -0
- data/lib/devise/hooks/lockable.rb +7 -2
- data/lib/devise/hooks/proxy.rb +4 -2
- data/lib/devise/hooks/rememberable.rb +4 -2
- data/lib/devise/hooks/timeoutable.rb +16 -9
- data/lib/devise/hooks/trackable.rb +3 -1
- data/lib/devise/mailers/helpers.rb +15 -12
- data/lib/devise/mapping.rb +8 -2
- data/lib/devise/models.rb +3 -1
- data/lib/devise/models/authenticatable.rb +63 -36
- data/lib/devise/models/confirmable.rb +121 -41
- data/lib/devise/models/database_authenticatable.rb +66 -23
- data/lib/devise/models/lockable.rb +30 -17
- data/lib/devise/models/omniauthable.rb +3 -1
- data/lib/devise/models/recoverable.rb +62 -26
- data/lib/devise/models/registerable.rb +2 -0
- data/lib/devise/models/rememberable.rb +62 -33
- data/lib/devise/models/timeoutable.rb +4 -8
- data/lib/devise/models/trackable.rb +12 -3
- data/lib/devise/models/validatable.rb +16 -9
- data/lib/devise/modules.rb +12 -10
- data/lib/devise/omniauth.rb +2 -0
- data/lib/devise/omniauth/config.rb +2 -0
- data/lib/devise/omniauth/url_helpers.rb +14 -5
- data/lib/devise/orm/active_record.rb +5 -1
- data/lib/devise/orm/mongoid.rb +6 -2
- data/lib/devise/parameter_filter.rb +2 -0
- data/lib/devise/parameter_sanitizer.rb +131 -69
- data/lib/devise/rails.rb +10 -13
- data/lib/devise/rails/routes.rb +147 -116
- data/lib/devise/rails/warden_compat.rb +3 -10
- data/lib/devise/secret_key_finder.rb +25 -0
- data/lib/devise/strategies/authenticatable.rb +20 -9
- data/lib/devise/strategies/base.rb +3 -1
- data/lib/devise/strategies/database_authenticatable.rb +8 -5
- data/lib/devise/strategies/rememberable.rb +15 -3
- data/lib/devise/test/controller_helpers.rb +165 -0
- data/lib/devise/test/integration_helpers.rb +63 -0
- data/lib/devise/test_helpers.rb +7 -124
- data/lib/devise/time_inflector.rb +4 -2
- data/lib/devise/token_generator.rb +3 -41
- data/lib/devise/version.rb +3 -1
- data/lib/generators/active_record/devise_generator.rb +47 -10
- data/lib/generators/active_record/templates/migration.rb +9 -7
- data/lib/generators/active_record/templates/migration_existing.rb +9 -7
- data/lib/generators/devise/controllers_generator.rb +46 -0
- data/lib/generators/devise/devise_generator.rb +9 -5
- data/lib/generators/devise/install_generator.rb +22 -0
- data/lib/generators/devise/orm_helpers.rb +8 -19
- data/lib/generators/devise/views_generator.rb +51 -28
- data/lib/generators/mongoid/devise_generator.rb +22 -19
- data/lib/generators/templates/README +5 -12
- data/lib/generators/templates/controllers/README +14 -0
- data/lib/generators/templates/controllers/confirmations_controller.rb +30 -0
- data/lib/generators/templates/controllers/omniauth_callbacks_controller.rb +30 -0
- data/lib/generators/templates/controllers/passwords_controller.rb +34 -0
- data/lib/generators/templates/controllers/registrations_controller.rb +62 -0
- data/lib/generators/templates/controllers/sessions_controller.rb +27 -0
- data/lib/generators/templates/controllers/unlocks_controller.rb +30 -0
- data/lib/generators/templates/devise.rb +64 -35
- data/lib/generators/templates/markerb/confirmation_instructions.markerb +1 -1
- data/lib/generators/templates/markerb/email_changed.markerb +7 -0
- data/lib/generators/templates/markerb/password_change.markerb +3 -0
- data/lib/generators/templates/markerb/reset_password_instructions.markerb +1 -1
- data/lib/generators/templates/markerb/unlock_instructions.markerb +1 -1
- data/lib/generators/templates/simple_form_for/confirmations/new.html.erb +2 -2
- data/lib/generators/templates/simple_form_for/passwords/edit.html.erb +4 -4
- data/lib/generators/templates/simple_form_for/passwords/new.html.erb +2 -2
- data/lib/generators/templates/simple_form_for/registrations/edit.html.erb +6 -6
- data/lib/generators/templates/simple_form_for/registrations/new.html.erb +4 -4
- data/lib/generators/templates/simple_form_for/sessions/new.html.erb +6 -6
- data/lib/generators/templates/simple_form_for/unlocks/new.html.erb +2 -2
- data/test/controllers/custom_registrations_controller_test.rb +42 -0
- data/test/controllers/custom_strategy_test.rb +10 -6
- data/test/controllers/helper_methods_test.rb +24 -0
- data/test/controllers/helpers_test.rb +88 -40
- data/test/controllers/inherited_controller_i18n_messages_test.rb +53 -0
- data/test/controllers/internal_helpers_test.rb +31 -22
- data/test/controllers/load_hooks_controller_test.rb +21 -0
- data/test/controllers/passwords_controller_test.rb +8 -5
- data/test/controllers/sessions_controller_test.rb +42 -33
- data/test/controllers/url_helpers_test.rb +13 -5
- data/test/delegator_test.rb +3 -1
- data/test/devise_test.rb +34 -19
- data/test/failure_app_test.rb +150 -42
- data/test/generators/active_record_generator_test.rb +58 -31
- data/test/generators/controllers_generator_test.rb +50 -0
- data/test/generators/devise_generator_test.rb +4 -2
- data/test/generators/install_generator_test.rb +16 -3
- data/test/generators/mongoid_generator_test.rb +5 -3
- data/test/generators/views_generator_test.rb +40 -2
- data/test/helpers/devise_helper_test.rb +20 -20
- data/test/integration/authenticatable_test.rb +134 -141
- data/test/integration/confirmable_test.rb +109 -67
- data/test/integration/database_authenticatable_test.rb +36 -23
- data/test/integration/http_authenticatable_test.rb +29 -20
- data/test/integration/lockable_test.rb +52 -49
- data/test/integration/mounted_engine_test.rb +38 -0
- data/test/integration/omniauthable_test.rb +30 -15
- data/test/integration/recoverable_test.rb +76 -61
- data/test/integration/registerable_test.rb +107 -91
- data/test/integration/rememberable_test.rb +82 -30
- data/test/integration/timeoutable_test.rb +48 -40
- data/test/integration/trackable_test.rb +15 -8
- data/test/mailers/confirmation_instructions_test.rb +16 -14
- data/test/mailers/email_changed_test.rb +132 -0
- data/test/mailers/mailer_test.rb +20 -0
- data/test/mailers/reset_password_instructions_test.rb +13 -11
- data/test/mailers/unlock_instructions_test.rb +12 -10
- data/test/mapping_test.rb +15 -6
- data/test/models/authenticatable_test.rb +15 -3
- data/test/models/confirmable_test.rb +190 -95
- data/test/models/database_authenticatable_test.rb +75 -41
- data/test/models/lockable_test.rb +115 -61
- data/test/models/omniauthable_test.rb +3 -1
- data/test/models/recoverable_test.rb +116 -37
- data/test/models/registerable_test.rb +3 -1
- data/test/models/rememberable_test.rb +95 -94
- data/test/models/serializable_test.rb +19 -8
- data/test/models/timeoutable_test.rb +10 -8
- data/test/models/trackable_test.rb +50 -1
- data/test/models/validatable_test.rb +24 -30
- data/test/models_test.rb +19 -8
- data/test/omniauth/config_test.rb +15 -11
- data/test/omniauth/url_helpers_test.rb +8 -9
- data/test/orm/active_record.rb +16 -2
- data/test/orm/mongoid.rb +4 -2
- data/test/parameter_sanitizer_test.rb +53 -57
- data/test/rails_app/app/active_record/admin.rb +2 -0
- data/test/rails_app/app/active_record/shim.rb +3 -1
- data/test/rails_app/app/active_record/user.rb +14 -0
- data/test/rails_app/app/active_record/user_on_engine.rb +9 -0
- data/test/rails_app/app/active_record/user_on_main_app.rb +9 -0
- data/test/rails_app/app/active_record/user_with_validations.rb +12 -0
- data/test/rails_app/app/active_record/user_without_email.rb +10 -0
- data/test/rails_app/app/controllers/admins/sessions_controller.rb +3 -1
- data/test/rails_app/app/controllers/admins_controller.rb +3 -6
- data/test/rails_app/app/controllers/application_controller.rb +7 -3
- data/test/rails_app/app/controllers/application_with_fake_engine.rb +32 -0
- data/test/rails_app/app/controllers/custom/registrations_controller.rb +33 -0
- data/test/rails_app/app/controllers/home_controller.rb +7 -1
- data/test/rails_app/app/controllers/publisher/registrations_controller.rb +3 -1
- data/test/rails_app/app/controllers/publisher/sessions_controller.rb +3 -1
- data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +7 -5
- data/test/rails_app/app/controllers/users_controller.rb +8 -6
- data/test/rails_app/app/helpers/application_helper.rb +2 -0
- data/test/rails_app/app/mailers/users/from_proc_mailer.rb +5 -0
- data/test/rails_app/app/mailers/users/mailer.rb +3 -10
- data/test/rails_app/app/mailers/users/reply_to_mailer.rb +6 -0
- data/test/rails_app/app/mongoid/admin.rb +13 -11
- data/test/rails_app/app/mongoid/shim.rb +4 -2
- data/test/rails_app/app/mongoid/user.rb +30 -19
- data/test/rails_app/app/mongoid/user_on_engine.rb +41 -0
- data/test/rails_app/app/mongoid/user_on_main_app.rb +41 -0
- data/test/rails_app/app/mongoid/user_with_validations.rb +37 -0
- data/test/rails_app/app/mongoid/user_without_email.rb +35 -0
- data/test/rails_app/app/views/admins/sessions/new.html.erb +1 -1
- data/test/rails_app/app/views/home/admin_dashboard.html.erb +1 -1
- data/test/rails_app/app/views/home/index.html.erb +1 -1
- data/test/rails_app/app/views/home/join.html.erb +1 -1
- data/test/rails_app/app/views/home/user_dashboard.html.erb +1 -1
- data/test/rails_app/app/views/layouts/application.html.erb +1 -1
- data/test/rails_app/config/application.rb +13 -5
- data/test/rails_app/config/boot.rb +17 -4
- data/test/rails_app/config/environment.rb +2 -0
- data/test/rails_app/config/environments/development.rb +2 -0
- data/test/rails_app/config/environments/production.rb +10 -2
- data/test/rails_app/config/environments/test.rb +14 -3
- data/test/rails_app/config/initializers/backtrace_silencers.rb +2 -0
- data/test/rails_app/config/initializers/devise.rb +22 -21
- data/test/rails_app/config/initializers/inflections.rb +2 -0
- data/test/rails_app/config/initializers/secret_token.rb +3 -6
- data/test/rails_app/config/initializers/session_store.rb +2 -0
- data/test/rails_app/config/routes.rb +67 -43
- data/test/rails_app/db/migrate/20100401102949_create_tables.rb +16 -10
- data/test/rails_app/db/schema.rb +2 -0
- data/test/rails_app/lib/shared_admin.rb +10 -4
- data/test/rails_app/lib/shared_user.rb +4 -1
- data/test/rails_app/lib/shared_user_without_email.rb +28 -0
- data/test/rails_app/lib/shared_user_without_omniauth.rb +15 -0
- data/test/rails_test.rb +11 -0
- data/test/routes_test.rb +92 -61
- data/test/secret_key_finder_test.rb +97 -0
- data/test/support/action_controller/record_identifier.rb +12 -0
- data/test/support/assertions.rb +4 -14
- data/test/support/helpers.rb +23 -10
- data/test/support/http_method_compatibility.rb +53 -0
- data/test/support/integration.rb +19 -16
- data/test/support/mongoid.yml +6 -0
- data/test/support/webrat/integrations/rails.rb +11 -0
- data/test/{test_helpers_test.rb → test/controller_helpers_test.rb} +60 -40
- data/test/test/integration_helpers_test.rb +34 -0
- data/test/test_helper.rb +9 -0
- data/test/test_models.rb +8 -6
- metadata +123 -53
- data/gemfiles/Gemfile.rails-3.2.x +0 -31
- data/gemfiles/Gemfile.rails-3.2.x.lock +0 -159
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
|
3
5
|
class ConfirmationInstructionsTest < ActionMailer::TestCase
|
@@ -37,43 +39,43 @@ class ConfirmationInstructionsTest < ActionMailer::TestCase
|
|
37
39
|
assert_equal [user.email], mail.to
|
38
40
|
end
|
39
41
|
|
40
|
-
test '
|
42
|
+
test 'set up sender from configuration' do
|
41
43
|
assert_equal ['test@example.com'], mail.from
|
42
44
|
end
|
43
45
|
|
44
|
-
test '
|
46
|
+
test 'set up sender from custom mailer defaults' do
|
45
47
|
Devise.mailer = 'Users::Mailer'
|
46
48
|
assert_equal ['custom@example.com'], mail.from
|
47
49
|
end
|
48
50
|
|
49
|
-
test '
|
51
|
+
test 'set up sender from custom mailer defaults with proc' do
|
50
52
|
Devise.mailer = 'Users::FromProcMailer'
|
51
53
|
assert_equal ['custom@example.com'], mail.from
|
52
54
|
end
|
53
55
|
|
54
56
|
test 'custom mailer renders parent mailer template' do
|
55
57
|
Devise.mailer = 'Users::Mailer'
|
56
|
-
|
58
|
+
assert_present mail.body.encoded
|
57
59
|
end
|
58
60
|
|
59
|
-
test '
|
61
|
+
test 'set up reply to as copy from sender' do
|
60
62
|
assert_equal ['test@example.com'], mail.reply_to
|
61
63
|
end
|
62
64
|
|
63
|
-
test '
|
65
|
+
test 'set up reply to as different if set in defaults' do
|
64
66
|
Devise.mailer = 'Users::ReplyToMailer'
|
65
67
|
assert_equal ['custom@example.com'], mail.from
|
66
68
|
assert_equal ['custom_reply_to@example.com'], mail.reply_to
|
67
69
|
end
|
68
70
|
|
69
|
-
test '
|
70
|
-
store_translations :en, :
|
71
|
+
test 'set up subject from I18n' do
|
72
|
+
store_translations :en, devise: { mailer: { confirmation_instructions: { subject: 'Account Confirmation' } } } do
|
71
73
|
assert_equal 'Account Confirmation', mail.subject
|
72
74
|
end
|
73
75
|
end
|
74
76
|
|
75
77
|
test 'subject namespaced by model' do
|
76
|
-
store_translations :en, :
|
78
|
+
store_translations :en, devise: { mailer: { confirmation_instructions: { user_subject: 'User Account Confirmation' } } } do
|
77
79
|
assert_equal 'User Account Confirmation', mail.subject
|
78
80
|
end
|
79
81
|
end
|
@@ -83,17 +85,17 @@ class ConfirmationInstructionsTest < ActionMailer::TestCase
|
|
83
85
|
end
|
84
86
|
|
85
87
|
test 'body should have link to confirm the account' do
|
86
|
-
host = ActionMailer::Base.default_url_options
|
88
|
+
host, port = ActionMailer::Base.default_url_options.values_at :host, :port
|
87
89
|
|
88
|
-
if mail.body.encoded =~ %r{<a href=\"http://#{host}/users/confirmation\?confirmation_token=([^"]+)">}
|
89
|
-
assert_equal
|
90
|
+
if mail.body.encoded =~ %r{<a href=\"http://#{host}:#{port}/users/confirmation\?confirmation_token=([^"]+)">}
|
91
|
+
assert_equal $1, user.confirmation_token
|
90
92
|
else
|
91
93
|
flunk "expected confirmation url regex to match"
|
92
94
|
end
|
93
95
|
end
|
94
96
|
|
95
97
|
test 'renders a scoped if scoped_views is set to true' do
|
96
|
-
swap Devise, :
|
98
|
+
swap Devise, scoped_views: true do
|
97
99
|
assert_equal user.email, mail.body.decoded
|
98
100
|
end
|
99
101
|
end
|
@@ -108,7 +110,7 @@ class ConfirmationInstructionsTest < ActionMailer::TestCase
|
|
108
110
|
end
|
109
111
|
|
110
112
|
test 'mailer sender accepts a proc' do
|
111
|
-
swap Devise, :
|
113
|
+
swap Devise, mailer_sender: proc { "another@example.com" } do
|
112
114
|
assert_equal ['another@example.com'], mail.from
|
113
115
|
end
|
114
116
|
end
|
@@ -0,0 +1,132 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
class EmailChangedTest < ActionMailer::TestCase
|
6
|
+
def setup
|
7
|
+
setup_mailer
|
8
|
+
Devise.mailer = 'Devise::Mailer'
|
9
|
+
Devise.mailer_sender = 'test@example.com'
|
10
|
+
Devise.send_email_changed_notification = true
|
11
|
+
end
|
12
|
+
|
13
|
+
def teardown
|
14
|
+
Devise.mailer = 'Devise::Mailer'
|
15
|
+
Devise.mailer_sender = 'please-change-me@config-initializers-devise.com'
|
16
|
+
Devise.send_email_changed_notification = false
|
17
|
+
end
|
18
|
+
|
19
|
+
def user
|
20
|
+
@user ||= create_user.tap { |u|
|
21
|
+
@original_user_email = u.email
|
22
|
+
u.update_attributes!(email: 'new-email@example.com')
|
23
|
+
}
|
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 changing the user email' 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 email changed to the original user email' do
|
42
|
+
mail
|
43
|
+
assert_equal [@original_user_email], mail.to
|
44
|
+
end
|
45
|
+
|
46
|
+
test 'set up sender from configuration' do
|
47
|
+
assert_equal ['test@example.com'], mail.from
|
48
|
+
end
|
49
|
+
|
50
|
+
test 'set up sender from custom mailer defaults' do
|
51
|
+
Devise.mailer = 'Users::Mailer'
|
52
|
+
assert_equal ['custom@example.com'], mail.from
|
53
|
+
end
|
54
|
+
|
55
|
+
test 'set up sender from custom mailer defaults with proc' do
|
56
|
+
Devise.mailer = 'Users::FromProcMailer'
|
57
|
+
assert_equal ['custom@example.com'], mail.from
|
58
|
+
end
|
59
|
+
|
60
|
+
test 'custom mailer renders parent mailer template' do
|
61
|
+
Devise.mailer = 'Users::Mailer'
|
62
|
+
assert_present mail.body.encoded
|
63
|
+
end
|
64
|
+
|
65
|
+
test 'set up reply to as copy from sender' do
|
66
|
+
assert_equal ['test@example.com'], mail.reply_to
|
67
|
+
end
|
68
|
+
|
69
|
+
test 'set up reply to as different if set in defaults' do
|
70
|
+
Devise.mailer = 'Users::ReplyToMailer'
|
71
|
+
assert_equal ['custom@example.com'], mail.from
|
72
|
+
assert_equal ['custom_reply_to@example.com'], mail.reply_to
|
73
|
+
end
|
74
|
+
|
75
|
+
test 'set up subject from I18n' do
|
76
|
+
store_translations :en, devise: { mailer: { email_changed: { subject: 'Email Has Changed' } } } do
|
77
|
+
assert_equal 'Email Has Changed', mail.subject
|
78
|
+
end
|
79
|
+
end
|
80
|
+
|
81
|
+
test 'subject namespaced by model' do
|
82
|
+
store_translations :en, devise: { mailer: { email_changed: { user_subject: 'User Email Has Changed' } } } do
|
83
|
+
assert_equal 'User Email Has Changed', mail.subject
|
84
|
+
end
|
85
|
+
end
|
86
|
+
|
87
|
+
test 'body should have user info' do
|
88
|
+
body = mail.body.encoded
|
89
|
+
assert_match "Hello #{@original_user_email}", body
|
90
|
+
assert_match "has been changed to #{user.email}", body
|
91
|
+
end
|
92
|
+
end
|
93
|
+
|
94
|
+
class EmailChangedReconfirmationTest < ActionMailer::TestCase
|
95
|
+
def setup
|
96
|
+
setup_mailer
|
97
|
+
Devise.mailer = 'Devise::Mailer'
|
98
|
+
Devise.mailer_sender = 'test@example.com'
|
99
|
+
Devise.send_email_changed_notification = true
|
100
|
+
end
|
101
|
+
|
102
|
+
def teardown
|
103
|
+
Devise.mailer = 'Devise::Mailer'
|
104
|
+
Devise.mailer_sender = 'please-change-me@config-initializers-devise.com'
|
105
|
+
Devise.send_email_changed_notification = false
|
106
|
+
end
|
107
|
+
|
108
|
+
def admin
|
109
|
+
@admin ||= create_admin.tap { |u|
|
110
|
+
@original_admin_email = u.email
|
111
|
+
u.update_attributes!(email: 'new-email@example.com')
|
112
|
+
}
|
113
|
+
end
|
114
|
+
|
115
|
+
def mail
|
116
|
+
@mail ||= begin
|
117
|
+
admin
|
118
|
+
ActionMailer::Base.deliveries[-2]
|
119
|
+
end
|
120
|
+
end
|
121
|
+
|
122
|
+
test 'send email changed to the original user email' do
|
123
|
+
mail
|
124
|
+
assert_equal [@original_admin_email], mail.to
|
125
|
+
end
|
126
|
+
|
127
|
+
test 'body should have unconfirmed user info' do
|
128
|
+
body = mail.body.encoded
|
129
|
+
assert_match admin.email, body
|
130
|
+
assert_match "is being changed to #{admin.unconfirmed_email}", body
|
131
|
+
end
|
132
|
+
end
|
@@ -0,0 +1,20 @@
|
|
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,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
|
3
5
|
class ResetPasswordInstructionsTest < ActionMailer::TestCase
|
@@ -39,37 +41,37 @@ class ResetPasswordInstructionsTest < ActionMailer::TestCase
|
|
39
41
|
assert_equal [user.email], mail.to
|
40
42
|
end
|
41
43
|
|
42
|
-
test '
|
44
|
+
test 'set up sender from configuration' do
|
43
45
|
assert_equal ['test@example.com'], mail.from
|
44
46
|
end
|
45
47
|
|
46
|
-
test '
|
48
|
+
test 'set up sender from custom mailer defaults' do
|
47
49
|
Devise.mailer = 'Users::Mailer'
|
48
50
|
assert_equal ['custom@example.com'], mail.from
|
49
51
|
end
|
50
52
|
|
51
|
-
test '
|
53
|
+
test 'set up sender from custom mailer defaults with proc' do
|
52
54
|
Devise.mailer = 'Users::FromProcMailer'
|
53
55
|
assert_equal ['custom@example.com'], mail.from
|
54
56
|
end
|
55
57
|
|
56
58
|
test 'custom mailer renders parent mailer template' do
|
57
59
|
Devise.mailer = 'Users::Mailer'
|
58
|
-
|
60
|
+
assert_present mail.body.encoded
|
59
61
|
end
|
60
62
|
|
61
|
-
test '
|
63
|
+
test 'set up reply to as copy from sender' do
|
62
64
|
assert_equal ['test@example.com'], mail.reply_to
|
63
65
|
end
|
64
66
|
|
65
|
-
test '
|
66
|
-
store_translations :en, :
|
67
|
+
test 'set up subject from I18n' do
|
68
|
+
store_translations :en, devise: { mailer: { reset_password_instructions: { subject: 'Reset instructions' } } } do
|
67
69
|
assert_equal 'Reset instructions', mail.subject
|
68
70
|
end
|
69
71
|
end
|
70
72
|
|
71
73
|
test 'subject namespaced by model' do
|
72
|
-
store_translations :en, :
|
74
|
+
store_translations :en, devise: { mailer: { reset_password_instructions: { user_subject: 'User Reset Instructions' } } } do
|
73
75
|
assert_equal 'User Reset Instructions', mail.subject
|
74
76
|
end
|
75
77
|
end
|
@@ -79,9 +81,9 @@ class ResetPasswordInstructionsTest < ActionMailer::TestCase
|
|
79
81
|
end
|
80
82
|
|
81
83
|
test 'body should have link to confirm the account' do
|
82
|
-
host = ActionMailer::Base.default_url_options
|
84
|
+
host, port = ActionMailer::Base.default_url_options.values_at :host, :port
|
83
85
|
|
84
|
-
if mail.body.encoded =~ %r{<a href=\"http://#{host}/users/password/edit\?reset_password_token=([^"]+)">}
|
86
|
+
if mail.body.encoded =~ %r{<a href=\"http://#{host}:#{port}/users/password/edit\?reset_password_token=([^"]+)">}
|
85
87
|
assert_equal Devise.token_generator.digest(user.class, :reset_password_token, $1), user.reset_password_token
|
86
88
|
else
|
87
89
|
flunk "expected reset password url regex to match"
|
@@ -89,7 +91,7 @@ class ResetPasswordInstructionsTest < ActionMailer::TestCase
|
|
89
91
|
end
|
90
92
|
|
91
93
|
test 'mailer sender accepts a proc' do
|
92
|
-
swap Devise, :
|
94
|
+
swap Devise, mailer_sender: proc { "another@example.com" } do
|
93
95
|
assert_equal ['another@example.com'], mail.from
|
94
96
|
end
|
95
97
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
|
3
5
|
class UnlockInstructionsTest < ActionMailer::TestCase
|
@@ -40,37 +42,37 @@ class UnlockInstructionsTest < ActionMailer::TestCase
|
|
40
42
|
assert_equal [user.email], mail.to
|
41
43
|
end
|
42
44
|
|
43
|
-
test '
|
45
|
+
test 'set up sender from configuration' do
|
44
46
|
assert_equal ['test@example.com'], mail.from
|
45
47
|
end
|
46
48
|
|
47
|
-
test '
|
49
|
+
test 'set up sender from custom mailer defaults' do
|
48
50
|
Devise.mailer = 'Users::Mailer'
|
49
51
|
assert_equal ['custom@example.com'], mail.from
|
50
52
|
end
|
51
53
|
|
52
|
-
test '
|
54
|
+
test 'set up sender from custom mailer defaults with proc' do
|
53
55
|
Devise.mailer = 'Users::FromProcMailer'
|
54
56
|
assert_equal ['custom@example.com'], mail.from
|
55
57
|
end
|
56
58
|
|
57
59
|
test 'custom mailer renders parent mailer template' do
|
58
60
|
Devise.mailer = 'Users::Mailer'
|
59
|
-
|
61
|
+
assert_present mail.body.encoded
|
60
62
|
end
|
61
63
|
|
62
|
-
test '
|
64
|
+
test 'set up reply to as copy from sender' do
|
63
65
|
assert_equal ['test@example.com'], mail.reply_to
|
64
66
|
end
|
65
67
|
|
66
|
-
test '
|
67
|
-
store_translations :en, :
|
68
|
+
test 'set up subject from I18n' do
|
69
|
+
store_translations :en, devise: { mailer: { unlock_instructions: { subject: 'Yo unlock instructions' } } } do
|
68
70
|
assert_equal 'Yo unlock instructions', mail.subject
|
69
71
|
end
|
70
72
|
end
|
71
73
|
|
72
74
|
test 'subject namespaced by model' do
|
73
|
-
store_translations :en, :
|
75
|
+
store_translations :en, devise: { mailer: { unlock_instructions: { user_subject: 'User Unlock Instructions' } } } do
|
74
76
|
assert_equal 'User Unlock Instructions', mail.subject
|
75
77
|
end
|
76
78
|
end
|
@@ -80,9 +82,9 @@ class UnlockInstructionsTest < ActionMailer::TestCase
|
|
80
82
|
end
|
81
83
|
|
82
84
|
test 'body should have link to unlock the account' do
|
83
|
-
host = ActionMailer::Base.default_url_options
|
85
|
+
host, port = ActionMailer::Base.default_url_options.values_at :host, :port
|
84
86
|
|
85
|
-
if mail.body.encoded =~ %r{<a href=\"http://#{host}/users/unlock\?unlock_token=([^"]+)">}
|
87
|
+
if mail.body.encoded =~ %r{<a href=\"http://#{host}:#{port}/users/unlock\?unlock_token=([^"]+)">}
|
86
88
|
assert_equal Devise.token_generator.digest(user.class, :unlock_token, $1), user.unlock_token
|
87
89
|
else
|
88
90
|
flunk "expected unlock url regex to match"
|
data/test/mapping_test.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
|
3
5
|
class FakeRequest < Struct.new(:path_info, :params)
|
@@ -35,8 +37,8 @@ class MappingTest < ActiveSupport::TestCase
|
|
35
37
|
assert_equal [], Devise.mappings[:skip_admin].used_routes
|
36
38
|
end
|
37
39
|
|
38
|
-
test 'sign_out_via defaults to :
|
39
|
-
assert_equal :
|
40
|
+
test 'sign_out_via defaults to :delete' do
|
41
|
+
assert_equal :delete, Devise.mappings[:user].sign_out_via
|
40
42
|
end
|
41
43
|
|
42
44
|
test 'allows custom sign_out_via to be given' do
|
@@ -62,6 +64,7 @@ class MappingTest < ActiveSupport::TestCase
|
|
62
64
|
test 'find scope for a given object' do
|
63
65
|
assert_equal :user, Devise::Mapping.find_scope!(User)
|
64
66
|
assert_equal :user, Devise::Mapping.find_scope!(:user)
|
67
|
+
assert_equal :user, Devise::Mapping.find_scope!("user")
|
65
68
|
assert_equal :user, Devise::Mapping.find_scope!(User.new)
|
66
69
|
end
|
67
70
|
|
@@ -70,6 +73,12 @@ class MappingTest < ActiveSupport::TestCase
|
|
70
73
|
assert_equal :user, Devise::Mapping.find_scope!(Class.new(User).new)
|
71
74
|
end
|
72
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
|
+
|
73
82
|
test 'find scope raises an error if cannot be found' do
|
74
83
|
assert_raise RuntimeError do
|
75
84
|
Devise::Mapping.find_scope!(String)
|
@@ -108,14 +117,14 @@ class MappingTest < ActiveSupport::TestCase
|
|
108
117
|
assert mapping.authenticatable?
|
109
118
|
assert mapping.recoverable?
|
110
119
|
assert mapping.lockable?
|
111
|
-
|
120
|
+
refute mapping.omniauthable?
|
112
121
|
end
|
113
|
-
|
122
|
+
|
114
123
|
test 'find mapping by path' do
|
115
124
|
assert_raise RuntimeError do
|
116
125
|
Devise::Mapping.find_by_path!('/accounts/facebook/callback')
|
117
126
|
end
|
118
|
-
|
127
|
+
|
119
128
|
assert_nothing_raised do
|
120
129
|
Devise::Mapping.find_by_path!('/:locale/accounts/login')
|
121
130
|
end
|
@@ -123,5 +132,5 @@ class MappingTest < ActiveSupport::TestCase
|
|
123
132
|
assert_nothing_raised do
|
124
133
|
Devise::Mapping.find_by_path!('/accounts/facebook/callback', :path)
|
125
134
|
end
|
126
|
-
end
|
135
|
+
end
|
127
136
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
|
3
5
|
class AuthenticatableTest < ActiveSupport::TestCase
|
@@ -6,8 +8,18 @@ class AuthenticatableTest < ActiveSupport::TestCase
|
|
6
8
|
end
|
7
9
|
|
8
10
|
test 'find_first_by_auth_conditions allows custom filtering parameters' do
|
9
|
-
user = User.create!(:
|
10
|
-
assert_equal User.find_first_by_auth_conditions({ :
|
11
|
-
assert_nil User.find_first_by_auth_conditions({ :
|
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
|
12
24
|
end
|
13
25
|
end
|