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,14 +1,20 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SharedAdmin
|
2
4
|
extend ActiveSupport::Concern
|
3
5
|
|
4
6
|
included do
|
5
7
|
devise :database_authenticatable, :registerable,
|
6
8
|
:timeoutable, :recoverable, :lockable, :confirmable,
|
7
|
-
:
|
8
|
-
:
|
9
|
+
unlock_strategy: :time, lock_strategy: :none,
|
10
|
+
allow_unconfirmed_access_for: 2.weeks, reconfirmable: true
|
9
11
|
|
10
|
-
validates_length_of :reset_password_token, :
|
11
|
-
|
12
|
+
validates_length_of :reset_password_token, minimum: 3, allow_blank: true
|
13
|
+
if Devise::Test.rails51?
|
14
|
+
validates_uniqueness_of :email, allow_blank: true, if: :will_save_change_to_email?
|
15
|
+
else
|
16
|
+
validates_uniqueness_of :email, allow_blank: true, if: :email_changed?
|
17
|
+
end
|
12
18
|
end
|
13
19
|
|
14
20
|
def raw_confirmation_token
|
@@ -1,10 +1,13 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
module SharedUser
|
2
4
|
extend ActiveSupport::Concern
|
3
5
|
|
4
6
|
included do
|
5
7
|
devise :database_authenticatable, :confirmable, :lockable, :recoverable,
|
6
8
|
:registerable, :rememberable, :timeoutable,
|
7
|
-
:trackable, :validatable, :omniauthable
|
9
|
+
:trackable, :validatable, :omniauthable, password_length: 7..72,
|
10
|
+
reconfirmable: false
|
8
11
|
|
9
12
|
attr_accessor :other_key
|
10
13
|
|
@@ -0,0 +1,28 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SharedUserWithoutEmail
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
# NOTE: This is missing :validatable and :confirmable, as they both require
|
8
|
+
# an email field at the moment. It is also missing :omniauthable because that
|
9
|
+
# adds unnecessary complexity to the setup
|
10
|
+
devise :database_authenticatable, :lockable, :recoverable,
|
11
|
+
:registerable, :rememberable, :timeoutable,
|
12
|
+
:trackable
|
13
|
+
end
|
14
|
+
|
15
|
+
# This test stub is a bit rubbish because it's tied very closely to the
|
16
|
+
# implementation where we care about this one case. However, completely
|
17
|
+
# removing the email field breaks "recoverable" tests completely, so we are
|
18
|
+
# just taking the approach here that "email" is something that is a not an
|
19
|
+
# ActiveRecord field.
|
20
|
+
def email_changed?
|
21
|
+
raise NoMethodError
|
22
|
+
end
|
23
|
+
|
24
|
+
def respond_to?(method_name, include_all=false)
|
25
|
+
return false if method_name.to_sym == :email_changed?
|
26
|
+
super(method_name, include_all)
|
27
|
+
end
|
28
|
+
end
|
@@ -0,0 +1,15 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
module SharedUserWithoutOmniauth
|
4
|
+
extend ActiveSupport::Concern
|
5
|
+
|
6
|
+
included do
|
7
|
+
devise :database_authenticatable, :confirmable, :lockable, :recoverable,
|
8
|
+
:registerable, :rememberable, :timeoutable,
|
9
|
+
:trackable, :validatable, reconfirmable: false
|
10
|
+
end
|
11
|
+
|
12
|
+
def raw_confirmation_token
|
13
|
+
@raw_confirmation_token
|
14
|
+
end
|
15
|
+
end
|
data/test/rails_test.rb
ADDED
@@ -0,0 +1,11 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
class RailsTest < ActiveSupport::TestCase
|
6
|
+
test 'correct initializer position' do
|
7
|
+
initializer = Devise::Engine.initializers.detect { |i| i.name == 'devise.omniauth' }
|
8
|
+
assert_equal :load_config_initializers, initializer.after
|
9
|
+
assert_equal :build_middleware_stack, initializer.before
|
10
|
+
end
|
11
|
+
end
|
data/test/routes_test.rb
CHANGED
@@ -1,110 +1,112 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
|
3
|
-
ExpectedRoutingError =
|
5
|
+
ExpectedRoutingError = MiniTest::Assertion
|
4
6
|
|
5
7
|
class DefaultRoutingTest < ActionController::TestCase
|
6
8
|
test 'map new user session' do
|
7
|
-
assert_recognizes({:
|
9
|
+
assert_recognizes({controller: 'devise/sessions', action: 'new'}, {path: 'users/sign_in', method: :get})
|
8
10
|
assert_named_route "/users/sign_in", :new_user_session_path
|
9
11
|
end
|
10
12
|
|
11
13
|
test 'map create user session' do
|
12
|
-
assert_recognizes({:
|
14
|
+
assert_recognizes({controller: 'devise/sessions', action: 'create'}, {path: 'users/sign_in', method: :post})
|
13
15
|
assert_named_route "/users/sign_in", :user_session_path
|
14
16
|
end
|
15
17
|
|
16
18
|
test 'map destroy user session' do
|
17
|
-
assert_recognizes({:
|
19
|
+
assert_recognizes({controller: 'devise/sessions', action: 'destroy'}, {path: 'users/sign_out', method: :delete})
|
18
20
|
assert_named_route "/users/sign_out", :destroy_user_session_path
|
19
21
|
end
|
20
22
|
|
21
23
|
test 'map new user confirmation' do
|
22
|
-
assert_recognizes({:
|
24
|
+
assert_recognizes({controller: 'devise/confirmations', action: 'new'}, 'users/confirmation/new')
|
23
25
|
assert_named_route "/users/confirmation/new", :new_user_confirmation_path
|
24
26
|
end
|
25
27
|
|
26
28
|
test 'map create user confirmation' do
|
27
|
-
assert_recognizes({:
|
29
|
+
assert_recognizes({controller: 'devise/confirmations', action: 'create'}, {path: 'users/confirmation', method: :post})
|
28
30
|
assert_named_route "/users/confirmation", :user_confirmation_path
|
29
31
|
end
|
30
32
|
|
31
33
|
test 'map show user confirmation' do
|
32
|
-
assert_recognizes({:
|
34
|
+
assert_recognizes({controller: 'devise/confirmations', action: 'show'}, {path: 'users/confirmation', method: :get})
|
33
35
|
end
|
34
36
|
|
35
37
|
test 'map new user password' do
|
36
|
-
assert_recognizes({:
|
38
|
+
assert_recognizes({controller: 'devise/passwords', action: 'new'}, 'users/password/new')
|
37
39
|
assert_named_route "/users/password/new", :new_user_password_path
|
38
40
|
end
|
39
41
|
|
40
42
|
test 'map create user password' do
|
41
|
-
assert_recognizes({:
|
43
|
+
assert_recognizes({controller: 'devise/passwords', action: 'create'}, {path: 'users/password', method: :post})
|
42
44
|
assert_named_route "/users/password", :user_password_path
|
43
45
|
end
|
44
46
|
|
45
47
|
test 'map edit user password' do
|
46
|
-
assert_recognizes({:
|
48
|
+
assert_recognizes({controller: 'devise/passwords', action: 'edit'}, 'users/password/edit')
|
47
49
|
assert_named_route "/users/password/edit", :edit_user_password_path
|
48
50
|
end
|
49
51
|
|
50
52
|
test 'map update user password' do
|
51
|
-
assert_recognizes({:
|
53
|
+
assert_recognizes({controller: 'devise/passwords', action: 'update'}, {path: 'users/password', method: :put})
|
52
54
|
end
|
53
55
|
|
54
56
|
test 'map new user unlock' do
|
55
|
-
assert_recognizes({:
|
57
|
+
assert_recognizes({controller: 'devise/unlocks', action: 'new'}, 'users/unlock/new')
|
56
58
|
assert_named_route "/users/unlock/new", :new_user_unlock_path
|
57
59
|
end
|
58
60
|
|
59
61
|
test 'map create user unlock' do
|
60
|
-
assert_recognizes({:
|
62
|
+
assert_recognizes({controller: 'devise/unlocks', action: 'create'}, {path: 'users/unlock', method: :post})
|
61
63
|
assert_named_route "/users/unlock", :user_unlock_path
|
62
64
|
end
|
63
65
|
|
64
66
|
test 'map show user unlock' do
|
65
|
-
assert_recognizes({:
|
67
|
+
assert_recognizes({controller: 'devise/unlocks', action: 'show'}, {path: 'users/unlock', method: :get})
|
66
68
|
end
|
67
69
|
|
68
70
|
test 'map new user registration' do
|
69
|
-
assert_recognizes({:
|
71
|
+
assert_recognizes({controller: 'devise/registrations', action: 'new'}, 'users/sign_up')
|
70
72
|
assert_named_route "/users/sign_up", :new_user_registration_path
|
71
73
|
end
|
72
74
|
|
73
75
|
test 'map create user registration' do
|
74
|
-
assert_recognizes({:
|
76
|
+
assert_recognizes({controller: 'devise/registrations', action: 'create'}, {path: 'users', method: :post})
|
75
77
|
assert_named_route "/users", :user_registration_path
|
76
78
|
end
|
77
79
|
|
78
80
|
test 'map edit user registration' do
|
79
|
-
assert_recognizes({:
|
81
|
+
assert_recognizes({controller: 'devise/registrations', action: 'edit'}, {path: 'users/edit', method: :get})
|
80
82
|
assert_named_route "/users/edit", :edit_user_registration_path
|
81
83
|
end
|
82
84
|
|
83
85
|
test 'map update user registration' do
|
84
|
-
assert_recognizes({:
|
86
|
+
assert_recognizes({controller: 'devise/registrations', action: 'update'}, {path: 'users', method: :put})
|
85
87
|
end
|
86
88
|
|
87
89
|
test 'map destroy user registration' do
|
88
|
-
assert_recognizes({:
|
90
|
+
assert_recognizes({controller: 'devise/registrations', action: 'destroy'}, {path: 'users', method: :delete})
|
89
91
|
end
|
90
92
|
|
91
93
|
test 'map cancel user registration' do
|
92
|
-
assert_recognizes({:
|
94
|
+
assert_recognizes({controller: 'devise/registrations', action: 'cancel'}, {path: 'users/cancel', method: :get})
|
93
95
|
assert_named_route "/users/cancel", :cancel_user_registration_path
|
94
96
|
end
|
95
97
|
|
96
98
|
test 'map omniauth callbacks' do
|
97
|
-
assert_recognizes({:
|
98
|
-
assert_recognizes({:
|
99
|
-
assert_named_route "/users/auth/facebook/callback", :
|
99
|
+
assert_recognizes({controller: 'users/omniauth_callbacks', action: 'facebook'}, {path: 'users/auth/facebook/callback', method: :get})
|
100
|
+
assert_recognizes({controller: 'users/omniauth_callbacks', action: 'facebook'}, {path: 'users/auth/facebook/callback', method: :post})
|
101
|
+
assert_named_route "/users/auth/facebook/callback", :user_facebook_omniauth_callback_path
|
100
102
|
|
101
103
|
# named open_id
|
102
|
-
assert_recognizes({:
|
103
|
-
assert_recognizes({:
|
104
|
-
assert_named_route "/users/auth/google/callback", :
|
104
|
+
assert_recognizes({controller: 'users/omniauth_callbacks', action: 'google'}, {path: 'users/auth/google/callback', method: :get})
|
105
|
+
assert_recognizes({controller: 'users/omniauth_callbacks', action: 'google'}, {path: 'users/auth/google/callback', method: :post})
|
106
|
+
assert_named_route "/users/auth/google/callback", :user_google_omniauth_callback_path
|
105
107
|
|
106
108
|
assert_raise ExpectedRoutingError do
|
107
|
-
assert_recognizes({:
|
109
|
+
assert_recognizes({controller: 'ysers/omniauth_callbacks', action: 'twitter'}, {path: 'users/auth/twitter/callback', method: :get})
|
108
110
|
end
|
109
111
|
end
|
110
112
|
|
@@ -117,134 +119,163 @@ end
|
|
117
119
|
|
118
120
|
class CustomizedRoutingTest < ActionController::TestCase
|
119
121
|
test 'map admin with :path option' do
|
120
|
-
assert_recognizes({:
|
122
|
+
assert_recognizes({controller: 'devise/registrations', action: 'new'}, {path: 'admin_area/sign_up', method: :get})
|
121
123
|
end
|
122
124
|
|
123
125
|
test 'map admin with :controllers option' do
|
124
|
-
assert_recognizes({:
|
126
|
+
assert_recognizes({controller: 'admins/sessions', action: 'new'}, {path: 'admin_area/sign_in', method: :get})
|
125
127
|
end
|
126
128
|
|
127
129
|
test 'does not map admin password' do
|
128
130
|
assert_raise ExpectedRoutingError do
|
129
|
-
assert_recognizes({:
|
131
|
+
assert_recognizes({controller: 'devise/passwords', action: 'new'}, 'admin_area/password/new')
|
130
132
|
end
|
131
133
|
end
|
132
134
|
|
133
135
|
test 'subdomain admin' do
|
134
|
-
assert_recognizes({"host"=>"sub.example.com", :
|
136
|
+
assert_recognizes({"host"=>"sub.example.com", controller: 'devise/sessions', action: 'new'}, {host: "sub.example.com", path: '/sub_admin/sign_in', method: :get})
|
135
137
|
end
|
136
138
|
|
137
139
|
test 'does only map reader password' do
|
138
140
|
assert_raise ExpectedRoutingError do
|
139
|
-
assert_recognizes({:
|
141
|
+
assert_recognizes({controller: 'devise/sessions', action: 'new'}, 'reader/sessions/new')
|
140
142
|
end
|
141
|
-
assert_recognizes({:
|
143
|
+
assert_recognizes({controller: 'devise/passwords', action: 'new'}, 'reader/password/new')
|
142
144
|
end
|
143
145
|
|
144
146
|
test 'map account with custom path name for session sign in' do
|
145
|
-
assert_recognizes({:
|
147
|
+
assert_recognizes({controller: 'devise/sessions', action: 'new', locale: 'en'}, '/en/accounts/login')
|
146
148
|
end
|
147
149
|
|
148
150
|
test 'map account with custom path name for session sign out' do
|
149
|
-
assert_recognizes({:
|
151
|
+
assert_recognizes({controller: 'devise/sessions', action: 'destroy', locale: 'en'}, {path: '/en/accounts/logout', method: :delete })
|
150
152
|
end
|
151
153
|
|
152
154
|
test 'map account with custom path name for password' do
|
153
|
-
assert_recognizes({:
|
155
|
+
assert_recognizes({controller: 'devise/passwords', action: 'new', locale: 'en'}, '/en/accounts/secret/new')
|
154
156
|
end
|
155
157
|
|
156
158
|
test 'map account with custom path name for registration' do
|
157
|
-
assert_recognizes({:
|
159
|
+
assert_recognizes({controller: 'devise/registrations', action: 'new', locale: 'en'}, '/en/accounts/management/register')
|
160
|
+
end
|
161
|
+
|
162
|
+
test 'map account with custom path name for edit registration' do
|
163
|
+
assert_recognizes({controller: 'devise/registrations', action: 'edit', locale: 'en'}, '/en/accounts/management/edit/profile')
|
158
164
|
end
|
159
165
|
|
160
166
|
test 'map account with custom path name for cancel registration' do
|
161
|
-
assert_recognizes({:
|
167
|
+
assert_recognizes({controller: 'devise/registrations', action: 'cancel', locale: 'en'}, '/en/accounts/management/giveup')
|
162
168
|
end
|
163
169
|
|
164
170
|
test 'map deletes with :sign_out_via option' do
|
165
|
-
assert_recognizes({:
|
171
|
+
assert_recognizes({controller: 'devise/sessions', action: 'destroy'}, {path: '/sign_out_via/deletes/sign_out', method: :delete})
|
166
172
|
assert_raise ExpectedRoutingError do
|
167
|
-
assert_recognizes({:
|
173
|
+
assert_recognizes({controller: 'devise/sessions', action: 'destroy'}, {path: '/sign_out_via/deletes/sign_out', method: :get})
|
168
174
|
end
|
169
175
|
end
|
170
176
|
|
171
177
|
test 'map posts with :sign_out_via option' do
|
172
|
-
assert_recognizes({:
|
178
|
+
assert_recognizes({controller: 'devise/sessions', action: 'destroy'}, {path: '/sign_out_via/posts/sign_out', method: :post})
|
173
179
|
assert_raise ExpectedRoutingError do
|
174
|
-
assert_recognizes({:
|
180
|
+
assert_recognizes({controller: 'devise/sessions', action: 'destroy'}, {path: '/sign_out_via/posts/sign_out', method: :get})
|
175
181
|
end
|
176
182
|
end
|
177
183
|
|
178
184
|
test 'map delete_or_posts with :sign_out_via option' do
|
179
|
-
assert_recognizes({:
|
180
|
-
assert_recognizes({:
|
185
|
+
assert_recognizes({controller: 'devise/sessions', action: 'destroy'}, {path: '/sign_out_via/delete_or_posts/sign_out', method: :post})
|
186
|
+
assert_recognizes({controller: 'devise/sessions', action: 'destroy'}, {path: '/sign_out_via/delete_or_posts/sign_out', method: :delete})
|
181
187
|
assert_raise ExpectedRoutingError do
|
182
|
-
assert_recognizes({:
|
188
|
+
assert_recognizes({controller: 'devise/sessions', action: 'destroy'}, {path: '/sign_out_via/delete_or_posts/sign_out', method: :get})
|
183
189
|
end
|
184
190
|
end
|
185
191
|
|
186
192
|
test 'map with constraints defined in hash' do
|
187
|
-
assert_recognizes({:
|
193
|
+
assert_recognizes({controller: 'devise/registrations', action: 'new'}, {path: 'http://192.168.1.100/headquarters/sign_up', method: :get})
|
188
194
|
assert_raise ExpectedRoutingError do
|
189
|
-
assert_recognizes({:
|
195
|
+
assert_recognizes({controller: 'devise/registrations', action: 'new'}, {path: 'http://10.0.0.100/headquarters/sign_up', method: :get})
|
190
196
|
end
|
191
197
|
end
|
192
198
|
|
193
199
|
test 'map with constraints defined in block' do
|
194
|
-
assert_recognizes({:
|
200
|
+
assert_recognizes({controller: 'devise/registrations', action: 'new'}, {path: 'http://192.168.1.100/homebase/sign_up', method: :get})
|
195
201
|
assert_raise ExpectedRoutingError do
|
196
|
-
assert_recognizes({:
|
202
|
+
assert_recognizes({controller: 'devise/registrations', action: 'new'}, {path: 'http://10.0.0.100//homebase/sign_up', method: :get})
|
197
203
|
end
|
198
204
|
end
|
199
205
|
|
200
206
|
test 'map with format false for sessions' do
|
201
|
-
|
207
|
+
expected_params = {controller: 'devise/sessions', action: 'new'}
|
208
|
+
expected_params[:format] = false if Devise::Test.rails5?
|
209
|
+
|
210
|
+
assert_recognizes(expected_params, {path: '/htmlonly_admin/sign_in', method: :get})
|
202
211
|
assert_raise ExpectedRoutingError do
|
203
|
-
assert_recognizes(
|
212
|
+
assert_recognizes(expected_params, {path: '/htmlonly_admin/sign_in.xml', method: :get})
|
204
213
|
end
|
205
214
|
end
|
206
215
|
|
207
216
|
test 'map with format false for passwords' do
|
208
|
-
|
217
|
+
expected_params = {controller: 'devise/passwords', action: 'create'}
|
218
|
+
expected_params[:format] = false if Devise::Test.rails5?
|
219
|
+
|
220
|
+
assert_recognizes(expected_params, {path: '/htmlonly_admin/password', method: :post})
|
209
221
|
assert_raise ExpectedRoutingError do
|
210
|
-
assert_recognizes(
|
222
|
+
assert_recognizes(expected_params, {path: '/htmlonly_admin/password.xml', method: :post})
|
211
223
|
end
|
212
224
|
end
|
213
225
|
|
214
226
|
test 'map with format false for registrations' do
|
215
|
-
|
227
|
+
expected_params = {controller: 'devise/registrations', action: 'new'}
|
228
|
+
expected_params[:format] = false if Devise::Test.rails5?
|
229
|
+
|
230
|
+
assert_recognizes(expected_params, {path: '/htmlonly_admin/sign_up', method: :get})
|
216
231
|
assert_raise ExpectedRoutingError do
|
217
|
-
assert_recognizes(
|
232
|
+
assert_recognizes(expected_params, {path: '/htmlonly_admin/sign_up.xml', method: :get})
|
218
233
|
end
|
219
234
|
end
|
220
235
|
|
221
236
|
test 'map with format false for confirmations' do
|
222
|
-
|
237
|
+
expected_params = {controller: 'devise/confirmations', action: 'show'}
|
238
|
+
expected_params[:format] = false if Devise::Test.rails5?
|
239
|
+
|
240
|
+
assert_recognizes(expected_params, {path: '/htmlonly_users/confirmation', method: :get})
|
223
241
|
assert_raise ExpectedRoutingError do
|
224
|
-
assert_recognizes(
|
242
|
+
assert_recognizes(expected_params, {path: '/htmlonly_users/confirmation.xml', method: :get})
|
225
243
|
end
|
226
244
|
end
|
227
245
|
|
228
246
|
test 'map with format false for unlocks' do
|
229
|
-
|
247
|
+
expected_params = {controller: 'devise/unlocks', action: 'show'}
|
248
|
+
expected_params[:format] = false if Devise::Test.rails5?
|
249
|
+
|
250
|
+
assert_recognizes(expected_params, {path: '/htmlonly_users/unlock', method: :get})
|
230
251
|
assert_raise ExpectedRoutingError do
|
231
|
-
assert_recognizes(
|
252
|
+
assert_recognizes(expected_params, {path: '/htmlonly_users/unlock.xml', method: :get})
|
232
253
|
end
|
233
254
|
end
|
234
255
|
|
235
256
|
test 'map with format false is not permanent' do
|
236
257
|
assert_equal "/set.xml", @routes.url_helpers.set_path(:xml)
|
237
258
|
end
|
259
|
+
|
260
|
+
test 'checks if mapping has proper configuration for omniauth callback' do
|
261
|
+
e = assert_raise ArgumentError do
|
262
|
+
routes = ActionDispatch::Routing::RouteSet.new
|
263
|
+
routes.draw do
|
264
|
+
devise_for :not_omniauthable, class_name: 'Admin', controllers: {omniauth_callbacks: "users/omniauth_callbacks"}
|
265
|
+
end
|
266
|
+
end
|
267
|
+
assert_match "Mapping omniauth_callbacks on a resource that is not omniauthable", e.message
|
268
|
+
end
|
238
269
|
end
|
239
270
|
|
240
271
|
class ScopedRoutingTest < ActionController::TestCase
|
241
272
|
test 'map publisher account' do
|
242
|
-
assert_recognizes({:
|
273
|
+
assert_recognizes({controller: 'publisher/registrations', action: 'new'}, {path: '/publisher/accounts/sign_up', method: :get})
|
243
274
|
assert_equal '/publisher/accounts/sign_up', @routes.url_helpers.new_publisher_account_registration_path
|
244
275
|
end
|
245
276
|
|
246
277
|
test 'map publisher account merges path names' do
|
247
|
-
assert_recognizes({:
|
278
|
+
assert_recognizes({controller: 'publisher/sessions', action: 'new'}, {path: '/publisher/accounts/get_in', method: :get})
|
248
279
|
assert_equal '/publisher/accounts/get_in', @routes.url_helpers.new_publisher_account_session_path
|
249
280
|
end
|
250
281
|
end
|
@@ -0,0 +1,97 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
3
|
+
require 'test_helper'
|
4
|
+
|
5
|
+
class Rails52Credentials
|
6
|
+
def credentials
|
7
|
+
OpenStruct.new(secret_key_base: 'credentials')
|
8
|
+
end
|
9
|
+
end
|
10
|
+
|
11
|
+
class Rails52Secrets
|
12
|
+
def credentials
|
13
|
+
OpenStruct.new(secret_key_base: nil)
|
14
|
+
end
|
15
|
+
|
16
|
+
def secrets
|
17
|
+
OpenStruct.new(secret_key_base: 'secrets')
|
18
|
+
end
|
19
|
+
end
|
20
|
+
|
21
|
+
class Rails52Config
|
22
|
+
def credentials
|
23
|
+
OpenStruct.new(secret_key_base: nil)
|
24
|
+
end
|
25
|
+
|
26
|
+
def secrets
|
27
|
+
OpenStruct.new(secret_key_base: nil)
|
28
|
+
end
|
29
|
+
|
30
|
+
def config
|
31
|
+
OpenStruct.new(secret_key_base: 'config')
|
32
|
+
end
|
33
|
+
end
|
34
|
+
|
35
|
+
class Rails41Secrets
|
36
|
+
def secrets
|
37
|
+
OpenStruct.new(secret_key_base: 'secrets')
|
38
|
+
end
|
39
|
+
|
40
|
+
def config
|
41
|
+
OpenStruct.new(secret_key_base: nil)
|
42
|
+
end
|
43
|
+
end
|
44
|
+
|
45
|
+
class Rails41Config
|
46
|
+
def secrets
|
47
|
+
OpenStruct.new(secret_key_base: nil)
|
48
|
+
end
|
49
|
+
|
50
|
+
def config
|
51
|
+
OpenStruct.new(secret_key_base: 'config')
|
52
|
+
end
|
53
|
+
end
|
54
|
+
|
55
|
+
class Rails40Config
|
56
|
+
def config
|
57
|
+
OpenStruct.new(secret_key_base: 'config')
|
58
|
+
end
|
59
|
+
end
|
60
|
+
|
61
|
+
class SecretKeyFinderTest < ActiveSupport::TestCase
|
62
|
+
test "rails 5.2 uses credentials when they're available" do
|
63
|
+
secret_key_finder = Devise::SecretKeyFinder.new(Rails52Credentials.new)
|
64
|
+
|
65
|
+
assert_equal 'credentials', secret_key_finder.find
|
66
|
+
end
|
67
|
+
|
68
|
+
test "rails 5.2 uses secrets when credentials are empty" do
|
69
|
+
secret_key_finder = Devise::SecretKeyFinder.new(Rails52Secrets.new)
|
70
|
+
|
71
|
+
assert_equal 'secrets', secret_key_finder.find
|
72
|
+
end
|
73
|
+
|
74
|
+
test "rails 5.2 uses config when secrets are empty" do
|
75
|
+
secret_key_finder = Devise::SecretKeyFinder.new(Rails52Config.new)
|
76
|
+
|
77
|
+
assert_equal 'config', secret_key_finder.find
|
78
|
+
end
|
79
|
+
|
80
|
+
test "rails 4.1 uses secrets" do
|
81
|
+
secret_key_finder = Devise::SecretKeyFinder.new(Rails41Secrets.new)
|
82
|
+
|
83
|
+
assert_equal 'secrets', secret_key_finder.find
|
84
|
+
end
|
85
|
+
|
86
|
+
test "rails 4.1 uses config when secrets are empty" do
|
87
|
+
secret_key_finder = Devise::SecretKeyFinder.new(Rails41Config.new)
|
88
|
+
|
89
|
+
assert_equal 'config', secret_key_finder.find
|
90
|
+
end
|
91
|
+
|
92
|
+
test "rails 4.0 uses config" do
|
93
|
+
secret_key_finder = Devise::SecretKeyFinder.new(Rails40Config.new)
|
94
|
+
|
95
|
+
assert_equal 'config', secret_key_finder.find
|
96
|
+
end
|
97
|
+
end
|