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
@@ -0,0 +1,53 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
class SessionsInheritedController < Devise::SessionsController
|
6
|
+
def test_i18n_scope
|
7
|
+
set_flash_message(:notice, :signed_in)
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class AnotherInheritedController < SessionsInheritedController
|
12
|
+
protected
|
13
|
+
|
14
|
+
def translation_scope
|
15
|
+
'another'
|
16
|
+
end
|
17
|
+
end
|
18
|
+
|
19
|
+
class InheritedControllerTest < Devise::ControllerTestCase
|
20
|
+
tests SessionsInheritedController
|
21
|
+
|
22
|
+
def setup
|
23
|
+
@mock_warden = OpenStruct.new
|
24
|
+
@controller.request.env['warden'] = @mock_warden
|
25
|
+
@controller.request.env['devise.mapping'] = Devise.mappings[:user]
|
26
|
+
end
|
27
|
+
|
28
|
+
test 'I18n scope is inherited from Devise::Sessions' do
|
29
|
+
I18n.expects(:t).with do |message, options|
|
30
|
+
message == 'user.signed_in' &&
|
31
|
+
options[:scope] == 'devise.sessions'
|
32
|
+
end
|
33
|
+
@controller.test_i18n_scope
|
34
|
+
end
|
35
|
+
end
|
36
|
+
|
37
|
+
class AnotherInheritedControllerTest < Devise::ControllerTestCase
|
38
|
+
tests AnotherInheritedController
|
39
|
+
|
40
|
+
def setup
|
41
|
+
@mock_warden = OpenStruct.new
|
42
|
+
@controller.request.env['warden'] = @mock_warden
|
43
|
+
@controller.request.env['devise.mapping'] = Devise.mappings[:user]
|
44
|
+
end
|
45
|
+
|
46
|
+
test 'I18n scope is overridden' do
|
47
|
+
I18n.expects(:t).with do |message, options|
|
48
|
+
message == 'user.signed_in' &&
|
49
|
+
options[:scope] == 'another'
|
50
|
+
end
|
51
|
+
@controller.test_i18n_scope
|
52
|
+
end
|
53
|
+
end
|
@@ -1,9 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
|
3
5
|
class MyController < DeviseController
|
4
6
|
end
|
5
7
|
|
6
|
-
class HelpersTest <
|
8
|
+
class HelpersTest < Devise::ControllerTestCase
|
7
9
|
tests MyController
|
8
10
|
|
9
11
|
def setup
|
@@ -13,16 +15,16 @@ class HelpersTest < ActionController::TestCase
|
|
13
15
|
end
|
14
16
|
|
15
17
|
test 'get resource name from env' do
|
16
|
-
assert_equal :user, @controller.resource_name
|
18
|
+
assert_equal :user, @controller.send(:resource_name)
|
17
19
|
end
|
18
20
|
|
19
21
|
test 'get resource class from env' do
|
20
|
-
assert_equal User, @controller.resource_class
|
22
|
+
assert_equal User, @controller.send(:resource_class)
|
21
23
|
end
|
22
24
|
|
23
25
|
test 'get resource instance variable from env' do
|
24
26
|
@controller.instance_variable_set(:@user, user = User.new)
|
25
|
-
assert_equal user, @controller.resource
|
27
|
+
assert_equal user, @controller.send(:resource)
|
26
28
|
end
|
27
29
|
|
28
30
|
test 'set resource instance variable from env' do
|
@@ -36,26 +38,24 @@ class HelpersTest < ActionController::TestCase
|
|
36
38
|
test 'get resource params from request params using resource name as key' do
|
37
39
|
user_params = {'email' => 'shirley@templar.com'}
|
38
40
|
|
39
|
-
|
40
|
-
|
41
|
-
|
42
|
-
|
41
|
+
# Stub controller name so strong parameters can filter properly.
|
42
|
+
# DeviseController does not allow any parameters by default.
|
43
|
+
@controller.stubs(:controller_name).returns(:sessions_controller)
|
44
|
+
|
45
|
+
params = ActionController::Parameters.new({'user' => user_params})
|
43
46
|
|
44
|
-
ActionController::Parameters.new({'user' => user_params})
|
45
|
-
else
|
46
|
-
HashWithIndifferentAccess.new({'user' => user_params})
|
47
|
-
end
|
48
47
|
@controller.stubs(:params).returns(params)
|
49
48
|
|
50
|
-
|
49
|
+
res_params = @controller.send(:resource_params).permit!.to_h
|
50
|
+
assert_equal user_params, res_params
|
51
51
|
end
|
52
52
|
|
53
53
|
test 'resources methods are not controller actions' do
|
54
|
-
assert @controller.class.action_methods.empty?
|
54
|
+
assert @controller.class.action_methods.delete_if { |m| m.include? 'commenter' }.empty?
|
55
55
|
end
|
56
56
|
|
57
57
|
test 'require no authentication tests current mapping' do
|
58
|
-
@mock_warden.expects(:authenticate?).with(:rememberable, :
|
58
|
+
@mock_warden.expects(:authenticate?).with(:rememberable, scope: :user).returns(true)
|
59
59
|
@mock_warden.expects(:user).with(:user).returns(User.new)
|
60
60
|
@controller.expects(:redirect_to).with(root_path)
|
61
61
|
@controller.send :require_no_authentication
|
@@ -71,7 +71,7 @@ class HelpersTest < ActionController::TestCase
|
|
71
71
|
end
|
72
72
|
|
73
73
|
test 'require no authentication sets a flash message' do
|
74
|
-
@mock_warden.expects(:authenticate?).with(:rememberable, :
|
74
|
+
@mock_warden.expects(:authenticate?).with(:rememberable, scope: :user).returns(true)
|
75
75
|
@mock_warden.expects(:user).with(:user).returns(User.new)
|
76
76
|
@controller.expects(:redirect_to).with(root_path)
|
77
77
|
@controller.send :require_no_authentication
|
@@ -79,8 +79,8 @@ class HelpersTest < ActionController::TestCase
|
|
79
79
|
end
|
80
80
|
|
81
81
|
test 'signed in resource returns signed in resource for current scope' do
|
82
|
-
@mock_warden.expects(:authenticate).with(:
|
83
|
-
assert_kind_of User, @controller.signed_in_resource
|
82
|
+
@mock_warden.expects(:authenticate).with(scope: :user).returns(User.new)
|
83
|
+
assert_kind_of User, @controller.send(:signed_in_resource)
|
84
84
|
end
|
85
85
|
|
86
86
|
test 'is a devise controller' do
|
@@ -99,22 +99,31 @@ class HelpersTest < ActionController::TestCase
|
|
99
99
|
assert_equal 'non-blank', flash[:notice]
|
100
100
|
end
|
101
101
|
|
102
|
+
test 'issues non-blank flash.now messages normally' do
|
103
|
+
I18n.stubs(:t).returns('non-blank')
|
104
|
+
@controller.send :set_flash_message, :notice, :send_instructions, { now: true }
|
105
|
+
assert_equal 'non-blank', flash.now[:notice]
|
106
|
+
end
|
107
|
+
|
102
108
|
test 'uses custom i18n options' do
|
103
|
-
@controller.stubs(:devise_i18n_options).returns(:
|
109
|
+
@controller.stubs(:devise_i18n_options).returns(default: "devise custom options")
|
104
110
|
@controller.send :set_flash_message, :notice, :invalid_i18n_messagesend_instructions
|
105
111
|
assert_equal 'devise custom options', flash[:notice]
|
106
112
|
end
|
107
113
|
|
108
114
|
test 'allows custom i18n options to override resource_name' do
|
109
115
|
I18n.expects(:t).with("custom_resource_name.confirmed", anything)
|
110
|
-
@controller.stubs(:devise_i18n_options).returns(:
|
116
|
+
@controller.stubs(:devise_i18n_options).returns(resource_name: "custom_resource_name")
|
111
117
|
@controller.send :set_flash_message, :notice, :confirmed
|
112
118
|
end
|
113
119
|
|
114
120
|
test 'navigational_formats not returning a wild card' do
|
115
121
|
MyController.send(:public, :navigational_formats)
|
116
|
-
|
117
|
-
|
122
|
+
|
123
|
+
swap Devise, navigational_formats: ['*/*', :html] do
|
124
|
+
refute @controller.navigational_formats.include?("*/*")
|
125
|
+
end
|
126
|
+
|
118
127
|
MyController.send(:protected, :navigational_formats)
|
119
128
|
end
|
120
129
|
end
|
@@ -0,0 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
class LoadHooksControllerTest < Devise::ControllerTestCase
|
6
|
+
setup do
|
7
|
+
ActiveSupport.on_load(:devise_controller) do
|
8
|
+
define_method :defined_by_load_hook do
|
9
|
+
puts 'I am defined dynamically by activesupport load hook'
|
10
|
+
end
|
11
|
+
end
|
12
|
+
end
|
13
|
+
|
14
|
+
teardown do
|
15
|
+
DeviseController.class_eval { undef :defined_by_load_hook }
|
16
|
+
end
|
17
|
+
|
18
|
+
test 'load hook called when controller is loaded' do
|
19
|
+
assert DeviseController.instance_methods.include? :defined_by_load_hook
|
20
|
+
end
|
21
|
+
end
|
@@ -1,18 +1,21 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
|
3
|
-
class PasswordsControllerTest <
|
5
|
+
class PasswordsControllerTest < Devise::ControllerTestCase
|
4
6
|
tests Devise::PasswordsController
|
5
|
-
include Devise::
|
7
|
+
include Devise::Test::ControllerHelpers
|
6
8
|
|
7
9
|
setup do
|
8
10
|
request.env["devise.mapping"] = Devise.mappings[:user]
|
9
|
-
@user = create_user.tap(&:confirm
|
11
|
+
@user = create_user.tap(&:confirm)
|
10
12
|
@raw = @user.send_reset_password_instructions
|
11
13
|
end
|
12
14
|
|
13
15
|
def put_update_with_params
|
14
|
-
put :update, "user" => {
|
15
|
-
|
16
|
+
put :update, params: { "user" => {
|
17
|
+
"reset_password_token" => @raw, "password" => "1234567", "password_confirmation" => "1234567"
|
18
|
+
}
|
16
19
|
}
|
17
20
|
end
|
18
21
|
|
@@ -1,25 +1,32 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
|
3
|
-
class SessionsControllerTest <
|
5
|
+
class SessionsControllerTest < Devise::ControllerTestCase
|
4
6
|
tests Devise::SessionsController
|
5
|
-
include Devise::
|
7
|
+
include Devise::Test::ControllerHelpers
|
6
8
|
|
7
9
|
test "#create doesn't raise unpermitted params when sign in fails" do
|
8
|
-
|
9
|
-
|
10
|
+
begin
|
11
|
+
subscriber = ActiveSupport::Notifications.subscribe %r{unpermitted_parameters} do |name, start, finish, id, payload|
|
12
|
+
flunk "Unpermitted params: #{payload}"
|
13
|
+
end
|
14
|
+
request.env["devise.mapping"] = Devise.mappings[:user]
|
15
|
+
request.session["user_return_to"] = 'foo.bar'
|
16
|
+
create_user
|
17
|
+
post :create, params: { user: {
|
18
|
+
email: "wrong@email.com",
|
19
|
+
password: "wrongpassword"
|
20
|
+
}
|
21
|
+
}
|
22
|
+
assert_equal 200, @response.status
|
23
|
+
ensure
|
24
|
+
ActiveSupport::Notifications.unsubscribe(subscriber)
|
10
25
|
end
|
11
|
-
request.env["devise.mapping"] = Devise.mappings[:user]
|
12
|
-
request.session["user_return_to"] = 'foo.bar'
|
13
|
-
create_user
|
14
|
-
post :create, :user => {
|
15
|
-
:email => "wrong@email.com",
|
16
|
-
:password => "wrongpassword"
|
17
|
-
}
|
18
|
-
assert_equal 200, @response.status
|
19
26
|
end
|
20
27
|
|
21
28
|
test "#create works even with scoped views" do
|
22
|
-
swap Devise, :
|
29
|
+
swap Devise, scoped_views: true do
|
23
30
|
request.env["devise.mapping"] = Devise.mappings[:user]
|
24
31
|
post :create
|
25
32
|
assert_equal 200, @response.status
|
@@ -32,12 +39,12 @@ class SessionsControllerTest < ActionController::TestCase
|
|
32
39
|
request.session["user_return_to"] = 'foo.bar'
|
33
40
|
|
34
41
|
user = create_user
|
35
|
-
user.confirm
|
36
|
-
post :create, :user
|
37
|
-
|
38
|
-
|
42
|
+
user.confirm
|
43
|
+
post :create, params: { user: {
|
44
|
+
email: user.email,
|
45
|
+
password: user.password
|
46
|
+
}
|
39
47
|
}
|
40
|
-
|
41
48
|
assert_nil request.session["user_return_to"]
|
42
49
|
end
|
43
50
|
|
@@ -46,10 +53,11 @@ class SessionsControllerTest < ActionController::TestCase
|
|
46
53
|
request.session["user_return_to"] = 'foo.bar'
|
47
54
|
|
48
55
|
user = create_user
|
49
|
-
user.confirm
|
50
|
-
post :create, :format
|
51
|
-
|
52
|
-
|
56
|
+
user.confirm
|
57
|
+
post :create, params: { format: 'json', user: {
|
58
|
+
email: user.email,
|
59
|
+
password: user.password
|
60
|
+
}
|
53
61
|
}
|
54
62
|
|
55
63
|
assert_equal 'foo.bar', request.session["user_return_to"]
|
@@ -57,9 +65,10 @@ class SessionsControllerTest < ActionController::TestCase
|
|
57
65
|
|
58
66
|
test "#create doesn't raise exception after Warden authentication fails when TestHelpers included" do
|
59
67
|
request.env["devise.mapping"] = Devise.mappings[:user]
|
60
|
-
post :create, :user
|
61
|
-
|
62
|
-
|
68
|
+
post :create, params: { user: {
|
69
|
+
email: "nosuchuser@example.com",
|
70
|
+
password: "wevdude"
|
71
|
+
}
|
63
72
|
}
|
64
73
|
assert_equal 200, @response.status
|
65
74
|
assert_template "devise/sessions/new"
|
@@ -68,13 +77,13 @@ class SessionsControllerTest < ActionController::TestCase
|
|
68
77
|
test "#destroy doesn't set the flash if the requested format is not navigational" do
|
69
78
|
request.env["devise.mapping"] = Devise.mappings[:user]
|
70
79
|
user = create_user
|
71
|
-
user.confirm
|
72
|
-
post :create, :format
|
73
|
-
|
74
|
-
|
80
|
+
user.confirm
|
81
|
+
post :create, params: { format: 'json', user: {
|
82
|
+
email: user.email,
|
83
|
+
password: user.password
|
84
|
+
}
|
75
85
|
}
|
76
|
-
|
77
|
-
delete :destroy, :format => 'json'
|
86
|
+
delete :destroy, format: 'json'
|
78
87
|
assert flash[:notice].blank?, "flash[:notice] should be blank, not #{flash[:notice].inspect}"
|
79
88
|
assert_equal 204, @response.status
|
80
89
|
end
|
@@ -87,8 +96,8 @@ class SessionsControllerTest < ActionController::TestCase
|
|
87
96
|
User.class_eval { attr_protected :email }
|
88
97
|
|
89
98
|
begin
|
90
|
-
assert_nothing_raised
|
91
|
-
get :new, :
|
99
|
+
assert_nothing_raised do
|
100
|
+
get :new, user: { email: "allez viens!" }
|
92
101
|
end
|
93
102
|
ensure
|
94
103
|
ActiveRecord::Base.mass_assignment_sanitizer = :logger
|
@@ -1,6 +1,8 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
|
3
|
-
class RoutesTest <
|
5
|
+
class RoutesTest < Devise::ControllerTestCase
|
4
6
|
tests ApplicationController
|
5
7
|
|
6
8
|
def assert_path_and_url(name, prepend_path=nil)
|
@@ -13,11 +15,17 @@ class RoutesTest < ActionController::TestCase
|
|
13
15
|
assert_equal @controller.send(:"#{prepend_path}#{name}_url", :user),
|
14
16
|
send(:"#{prepend_path}user_#{name}_url")
|
15
17
|
|
18
|
+
# With string
|
19
|
+
assert_equal @controller.send(:"#{prepend_path}#{name}_path", "user"),
|
20
|
+
send(:"#{prepend_path}user_#{name}_path")
|
21
|
+
assert_equal @controller.send(:"#{prepend_path}#{name}_url", "user"),
|
22
|
+
send(:"#{prepend_path}user_#{name}_url")
|
23
|
+
|
16
24
|
# Default url params
|
17
|
-
assert_equal @controller.send(:"#{prepend_path}#{name}_path", :user, :
|
18
|
-
send(:"#{prepend_path}user_#{name}_path", :
|
19
|
-
assert_equal @controller.send(:"#{prepend_path}#{name}_url", :user, :
|
20
|
-
send(:"#{prepend_path}user_#{name}_url", :
|
25
|
+
assert_equal @controller.send(:"#{prepend_path}#{name}_path", :user, param: 123),
|
26
|
+
send(:"#{prepend_path}user_#{name}_path", param: 123)
|
27
|
+
assert_equal @controller.send(:"#{prepend_path}#{name}_url", :user, param: 123),
|
28
|
+
send(:"#{prepend_path}user_#{name}_url", param: 123)
|
21
29
|
|
22
30
|
@request.path = nil
|
23
31
|
# With an object
|
data/test/delegator_test.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
|
3
5
|
class DelegatorTest < ActiveSupport::TestCase
|
@@ -14,6 +16,6 @@ class DelegatorTest < ActiveSupport::TestCase
|
|
14
16
|
end
|
15
17
|
|
16
18
|
test 'failure_app returns associated failure app by scope in the given environment' do
|
17
|
-
assert_kind_of Proc, delegator.failure_app({"warden.options" => {:
|
19
|
+
assert_kind_of Proc, delegator.failure_app({"warden.options" => {scope: "manager"}})
|
18
20
|
end
|
19
21
|
end
|
data/test/devise_test.rb
CHANGED
@@ -1,12 +1,14 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
|
3
5
|
module Devise
|
4
6
|
def self.yield_and_restore
|
5
7
|
@@warden_configured = nil
|
6
|
-
c, b = @@warden_config, @@
|
8
|
+
c, b = @@warden_config, @@warden_config_blocks
|
7
9
|
yield
|
8
10
|
ensure
|
9
|
-
@@warden_config, @@
|
11
|
+
@@warden_config, @@warden_config_blocks = c, b
|
10
12
|
end
|
11
13
|
end
|
12
14
|
|
@@ -14,16 +16,16 @@ class DeviseTest < ActiveSupport::TestCase
|
|
14
16
|
test 'bcrypt on the class' do
|
15
17
|
password = "super secret"
|
16
18
|
klass = Struct.new(:pepper, :stretches).new("blahblah", 2)
|
17
|
-
hash = Devise.
|
19
|
+
hash = Devise::Encryptor.digest(klass, password)
|
18
20
|
assert_equal ::BCrypt::Password.create(hash), hash
|
19
21
|
|
20
22
|
klass = Struct.new(:pepper, :stretches).new("bla", 2)
|
21
|
-
hash = Devise.
|
23
|
+
hash = Devise::Encryptor.digest(klass, password)
|
22
24
|
assert_not_equal ::BCrypt::Password.new(hash), hash
|
23
25
|
end
|
24
26
|
|
25
27
|
test 'model options can be configured through Devise' do
|
26
|
-
swap Devise, :
|
28
|
+
swap Devise, allow_unconfirmed_access_for: 113, pepper: "foo" do
|
27
29
|
assert_equal 113, Devise.allow_unconfirmed_access_for
|
28
30
|
assert_equal "foo", Devise.pepper
|
29
31
|
end
|
@@ -42,30 +44,43 @@ class DeviseTest < ActiveSupport::TestCase
|
|
42
44
|
|
43
45
|
test 'warden manager user configuration through a block' do
|
44
46
|
Devise.yield_and_restore do
|
45
|
-
|
47
|
+
executed = false
|
46
48
|
Devise.warden do |config|
|
47
|
-
|
49
|
+
executed = true
|
48
50
|
assert_kind_of Warden::Config, config
|
49
51
|
end
|
50
52
|
|
51
53
|
Devise.configure_warden!
|
52
|
-
assert
|
54
|
+
assert executed
|
55
|
+
end
|
56
|
+
end
|
57
|
+
|
58
|
+
test 'warden manager user configuration through multiple blocks' do
|
59
|
+
Devise.yield_and_restore do
|
60
|
+
executed = 0
|
61
|
+
|
62
|
+
3.times do
|
63
|
+
Devise.warden { |config| executed += 1 }
|
64
|
+
end
|
65
|
+
|
66
|
+
Devise.configure_warden!
|
67
|
+
assert_equal 3, executed
|
53
68
|
end
|
54
69
|
end
|
55
70
|
|
56
71
|
test 'add new module using the helper method' do
|
57
|
-
|
72
|
+
Devise.add_module(:coconut)
|
58
73
|
assert_equal 1, Devise::ALL.select { |v| v == :coconut }.size
|
59
|
-
|
60
|
-
|
74
|
+
refute Devise::STRATEGIES.include?(:coconut)
|
75
|
+
refute defined?(Devise::Models::Coconut)
|
61
76
|
Devise::ALL.delete(:coconut)
|
62
77
|
|
63
|
-
|
78
|
+
Devise.add_module(:banana, strategy: :fruits)
|
64
79
|
assert_equal :fruits, Devise::STRATEGIES[:banana]
|
65
80
|
Devise::ALL.delete(:banana)
|
66
81
|
Devise::STRATEGIES.delete(:banana)
|
67
82
|
|
68
|
-
|
83
|
+
Devise.add_module(:kivi, controller: :fruits)
|
69
84
|
assert_equal :fruits, Devise::CONTROLLERS[:kivi]
|
70
85
|
Devise::ALL.delete(:kivi)
|
71
86
|
Devise::CONTROLLERS.delete(:kivi)
|
@@ -73,16 +88,16 @@ class DeviseTest < ActiveSupport::TestCase
|
|
73
88
|
|
74
89
|
test 'should complain when comparing empty or different sized passes' do
|
75
90
|
[nil, ""].each do |empty|
|
76
|
-
|
77
|
-
|
78
|
-
|
91
|
+
refute Devise.secure_compare(empty, "something")
|
92
|
+
refute Devise.secure_compare("something", empty)
|
93
|
+
refute Devise.secure_compare(empty, empty)
|
79
94
|
end
|
80
|
-
|
95
|
+
refute Devise.secure_compare("size_1", "size_four")
|
81
96
|
end
|
82
97
|
|
83
98
|
test 'Devise.email_regexp should match valid email addresses' do
|
84
|
-
valid_emails = ["test@example.com", "jo@jo.co", "f4$_m@you.com", "testing.example@example.com.ua"]
|
85
|
-
non_valid_emails = ["rex", "test
|
99
|
+
valid_emails = ["test@example.com", "jo@jo.co", "f4$_m@you.com", "testing.example@example.com.ua", "test@tt", "test@valid---domain.com"]
|
100
|
+
non_valid_emails = ["rex", "test user@example.com", "test_user@example server.com"]
|
86
101
|
|
87
102
|
valid_emails.each do |email|
|
88
103
|
assert_match Devise.email_regexp, email
|