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 SerializableTest < ActiveSupport::TestCase
|
@@ -11,13 +13,13 @@ class SerializableTest < ActiveSupport::TestCase
|
|
11
13
|
end
|
12
14
|
|
13
15
|
test 'should not include unsafe keys on XML even if a new except is provided' do
|
14
|
-
assert_no_match(/email/, @user.to_xml(:
|
15
|
-
assert_no_match(/confirmation-token/, @user.to_xml(:
|
16
|
+
assert_no_match(/email/, @user.to_xml(except: :email))
|
17
|
+
assert_no_match(/confirmation-token/, @user.to_xml(except: :email))
|
16
18
|
end
|
17
19
|
|
18
20
|
test 'should include unsafe keys on XML if a force_except is provided' do
|
19
|
-
assert_no_match(/<email/, @user.to_xml(:
|
20
|
-
assert_match(/confirmation-token/, @user.to_xml(:
|
21
|
+
assert_no_match(/<email/, @user.to_xml(force_except: :email))
|
22
|
+
assert_match(/confirmation-token/, @user.to_xml(force_except: :email))
|
21
23
|
end
|
22
24
|
|
23
25
|
test 'should not include unsafe keys on JSON' do
|
@@ -26,13 +28,22 @@ class SerializableTest < ActiveSupport::TestCase
|
|
26
28
|
end
|
27
29
|
|
28
30
|
test 'should not include unsafe keys on JSON even if a new except is provided' do
|
29
|
-
assert_no_key "email", from_json(:
|
30
|
-
assert_no_key "confirmation_token", from_json(:
|
31
|
+
assert_no_key "email", from_json(except: :email)
|
32
|
+
assert_no_key "confirmation_token", from_json(except: :email)
|
31
33
|
end
|
32
34
|
|
33
35
|
test 'should include unsafe keys on JSON if a force_except is provided' do
|
34
|
-
assert_no_key "email", from_json(:
|
35
|
-
assert_key "confirmation_token", from_json(:
|
36
|
+
assert_no_key "email", from_json(force_except: :email)
|
37
|
+
assert_key "confirmation_token", from_json(force_except: :email)
|
38
|
+
end
|
39
|
+
|
40
|
+
test 'should not include unsafe keys in inspect' do
|
41
|
+
assert_match(/email/, @user.inspect)
|
42
|
+
assert_no_match(/confirmation_token/, @user.inspect)
|
43
|
+
end
|
44
|
+
|
45
|
+
test 'should accept frozen options' do
|
46
|
+
assert_key "username", @user.as_json({only: :username}.freeze)["user"]
|
36
47
|
end
|
37
48
|
|
38
49
|
def assert_key(key, subject)
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
|
3
5
|
class TimeoutableTest < ActiveSupport::TestCase
|
@@ -7,11 +9,11 @@ class TimeoutableTest < ActiveSupport::TestCase
|
|
7
9
|
end
|
8
10
|
|
9
11
|
test 'should not be expired' do
|
10
|
-
|
12
|
+
refute new_user.timedout?(29.minutes.ago)
|
11
13
|
end
|
12
14
|
|
13
15
|
test 'should not be expired when params is nil' do
|
14
|
-
|
16
|
+
refute new_user.timedout?(nil)
|
15
17
|
end
|
16
18
|
|
17
19
|
test 'should use timeout_in method' do
|
@@ -19,29 +21,29 @@ class TimeoutableTest < ActiveSupport::TestCase
|
|
19
21
|
user.instance_eval { def timeout_in; 10.minutes end }
|
20
22
|
|
21
23
|
assert user.timedout?(12.minutes.ago)
|
22
|
-
|
24
|
+
refute user.timedout?(8.minutes.ago)
|
23
25
|
end
|
24
26
|
|
25
27
|
test 'should not be expired when timeout_in method returns nil' do
|
26
28
|
user = new_user
|
27
29
|
user.instance_eval { def timeout_in; nil end }
|
28
|
-
|
30
|
+
refute user.timedout?(10.hours.ago)
|
29
31
|
end
|
30
32
|
|
31
33
|
test 'fallback to Devise config option' do
|
32
|
-
swap Devise, :
|
34
|
+
swap Devise, timeout_in: 1.minute do
|
33
35
|
user = new_user
|
34
36
|
assert user.timedout?(2.minutes.ago)
|
35
|
-
|
37
|
+
refute user.timedout?(30.seconds.ago)
|
36
38
|
|
37
39
|
Devise.timeout_in = 5.minutes
|
38
|
-
|
40
|
+
refute user.timedout?(2.minutes.ago)
|
39
41
|
assert user.timedout?(6.minutes.ago)
|
40
42
|
end
|
41
43
|
end
|
42
44
|
|
43
45
|
test 'required_fields should contain the fields that Devise uses' do
|
44
|
-
|
46
|
+
assert_equal Devise::Models::Timeoutable.required_fields(User), []
|
45
47
|
end
|
46
48
|
|
47
49
|
test 'should not raise error if remember_created_at is not empty and rememberable is disabled' do
|
@@ -1,8 +1,10 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
|
3
5
|
class TrackableTest < ActiveSupport::TestCase
|
4
6
|
test 'required_fields should contain the fields that Devise uses' do
|
5
|
-
|
7
|
+
assert_equal Devise::Models::Trackable.required_fields(User), [
|
6
8
|
:current_sign_in_at,
|
7
9
|
:current_sign_in_ip,
|
8
10
|
:last_sign_in_at,
|
@@ -10,4 +12,51 @@ class TrackableTest < ActiveSupport::TestCase
|
|
10
12
|
:sign_in_count
|
11
13
|
]
|
12
14
|
end
|
15
|
+
|
16
|
+
test 'update_tracked_fields should only set attributes but not save the record' do
|
17
|
+
user = create_user
|
18
|
+
request = mock
|
19
|
+
request.stubs(:remote_ip).returns("127.0.0.1")
|
20
|
+
|
21
|
+
assert_nil user.current_sign_in_ip
|
22
|
+
assert_nil user.last_sign_in_ip
|
23
|
+
assert_nil user.current_sign_in_at
|
24
|
+
assert_nil user.last_sign_in_at
|
25
|
+
assert_equal 0, user.sign_in_count
|
26
|
+
|
27
|
+
user.update_tracked_fields(request)
|
28
|
+
|
29
|
+
assert_equal "127.0.0.1", user.current_sign_in_ip
|
30
|
+
assert_equal "127.0.0.1", user.last_sign_in_ip
|
31
|
+
assert_not_nil user.current_sign_in_at
|
32
|
+
assert_not_nil user.last_sign_in_at
|
33
|
+
assert_equal 1, user.sign_in_count
|
34
|
+
|
35
|
+
user.reload
|
36
|
+
|
37
|
+
assert_nil user.current_sign_in_ip
|
38
|
+
assert_nil user.last_sign_in_ip
|
39
|
+
assert_nil user.current_sign_in_at
|
40
|
+
assert_nil user.last_sign_in_at
|
41
|
+
assert_equal 0, user.sign_in_count
|
42
|
+
end
|
43
|
+
|
44
|
+
test "update_tracked_fields! should not persist invalid records" do
|
45
|
+
user = UserWithValidations.new
|
46
|
+
request = mock
|
47
|
+
request.stubs(:remote_ip).returns("127.0.0.1")
|
48
|
+
|
49
|
+
assert_not user.update_tracked_fields!(request)
|
50
|
+
assert_not user.persisted?
|
51
|
+
end
|
52
|
+
|
53
|
+
test "update_tracked_fields! should not run model validations" do
|
54
|
+
user = User.new
|
55
|
+
request = mock
|
56
|
+
request.stubs(:remote_ip).returns("127.0.0.1")
|
57
|
+
|
58
|
+
user.expects(:after_validation_callback).never
|
59
|
+
|
60
|
+
assert_not user.update_tracked_fields!(request)
|
61
|
+
end
|
13
62
|
end
|
@@ -1,9 +1,11 @@
|
|
1
1
|
# encoding: UTF-8
|
2
|
+
# frozen_string_literal: true
|
3
|
+
|
2
4
|
require 'test_helper'
|
3
5
|
|
4
6
|
class ValidatableTest < ActiveSupport::TestCase
|
5
7
|
test 'should require email to be set' do
|
6
|
-
user = new_user(:
|
8
|
+
user = new_user(email: nil)
|
7
9
|
assert user.invalid?
|
8
10
|
assert user.errors[:email]
|
9
11
|
assert_equal 'can\'t be blank', user.errors[:email].join
|
@@ -12,7 +14,7 @@ class ValidatableTest < ActiveSupport::TestCase
|
|
12
14
|
test 'should require uniqueness of email if email has changed, allowing blank' do
|
13
15
|
existing_user = create_user
|
14
16
|
|
15
|
-
user = new_user(:
|
17
|
+
user = new_user(email: '')
|
16
18
|
assert user.invalid?
|
17
19
|
assert_no_match(/taken/, user.errors[:email].join)
|
18
20
|
|
@@ -20,48 +22,44 @@ class ValidatableTest < ActiveSupport::TestCase
|
|
20
22
|
assert user.invalid?
|
21
23
|
assert_match(/taken/, user.errors[:email].join)
|
22
24
|
|
23
|
-
user.save(:
|
25
|
+
user.save(validate: false)
|
24
26
|
assert user.valid?
|
25
27
|
end
|
26
28
|
|
27
29
|
test 'should require correct email format if email has changed, allowing blank' do
|
28
|
-
user = new_user(:
|
30
|
+
user = new_user(email: '')
|
29
31
|
assert user.invalid?
|
30
32
|
assert_not_equal 'is invalid', user.errors[:email].join
|
31
33
|
|
32
|
-
%w{invalid_email_format 123 $$$ () ☃
|
34
|
+
%w{invalid_email_format 123 $$$ () ☃}.each do |email|
|
33
35
|
user.email = email
|
34
|
-
assert user.invalid?,
|
36
|
+
assert user.invalid?, "should be invalid with email #{email}"
|
35
37
|
assert_equal 'is invalid', user.errors[:email].join
|
36
38
|
end
|
37
39
|
|
38
|
-
user.save(:
|
40
|
+
user.save(validate: false)
|
39
41
|
assert user.valid?
|
40
42
|
end
|
41
43
|
|
42
44
|
test 'should accept valid emails' do
|
43
45
|
%w(a.b.c@example.com test_mail@gmail.com any@any.net email@test.br 123@mail.test 1☃3@mail.test).each do |email|
|
44
|
-
user = new_user(:
|
45
|
-
assert user.valid?,
|
46
|
+
user = new_user(email: email)
|
47
|
+
assert user.valid?, "should be valid with email #{email}"
|
46
48
|
assert_blank user.errors[:email]
|
47
49
|
end
|
48
50
|
end
|
49
51
|
|
50
52
|
test 'should require password to be set when creating a new record' do
|
51
|
-
user = new_user(:
|
53
|
+
user = new_user(password: '', password_confirmation: '')
|
52
54
|
assert user.invalid?
|
53
55
|
assert_equal 'can\'t be blank', user.errors[:password].join
|
54
56
|
end
|
55
57
|
|
56
58
|
test 'should require confirmation to be set when creating a new record' do
|
57
|
-
user = new_user(:
|
59
|
+
user = new_user(password: 'new_password', password_confirmation: 'blabla')
|
58
60
|
assert user.invalid?
|
59
61
|
|
60
|
-
|
61
|
-
assert_equal 'doesn\'t match Password', user.errors[:password_confirmation].join
|
62
|
-
else
|
63
|
-
assert_equal 'doesn\'t match confirmation', user.errors[:password].join
|
64
|
-
end
|
62
|
+
assert_equal 'doesn\'t match Password', user.errors[:password_confirmation].join
|
65
63
|
end
|
66
64
|
|
67
65
|
test 'should require password when updating/resetting password' do
|
@@ -79,23 +77,19 @@ class ValidatableTest < ActiveSupport::TestCase
|
|
79
77
|
user.password_confirmation = 'another_password'
|
80
78
|
assert user.invalid?
|
81
79
|
|
82
|
-
|
83
|
-
assert_equal 'doesn\'t match Password', user.errors[:password_confirmation].join
|
84
|
-
else
|
85
|
-
assert_equal 'doesn\'t match confirmation', user.errors[:password].join
|
86
|
-
end
|
80
|
+
assert_equal 'doesn\'t match Password', user.errors[:password_confirmation].join
|
87
81
|
end
|
88
82
|
|
89
|
-
test 'should require a password with minimum of
|
90
|
-
user = new_user(:
|
83
|
+
test 'should require a password with minimum of 7 characters' do
|
84
|
+
user = new_user(password: '12345', password_confirmation: '12345')
|
91
85
|
assert user.invalid?
|
92
|
-
assert_equal 'is too short (minimum is
|
86
|
+
assert_equal 'is too short (minimum is 7 characters)', user.errors[:password].join
|
93
87
|
end
|
94
88
|
|
95
|
-
test 'should require a password with maximum of
|
96
|
-
user = new_user(:
|
89
|
+
test 'should require a password with maximum of 72 characters long' do
|
90
|
+
user = new_user(password: 'x'*73, password_confirmation: 'x'*73)
|
97
91
|
assert user.invalid?
|
98
|
-
assert_equal 'is too long (maximum is
|
92
|
+
assert_equal 'is too long (maximum is 72 characters)', user.errors[:password].join
|
99
93
|
end
|
100
94
|
|
101
95
|
test 'should not require password length when it\'s not changed' do
|
@@ -105,14 +99,14 @@ class ValidatableTest < ActiveSupport::TestCase
|
|
105
99
|
|
106
100
|
user.password_confirmation = 'confirmation'
|
107
101
|
assert user.invalid?
|
108
|
-
|
102
|
+
refute (user.errors[:password].join =~ /is too long/)
|
109
103
|
end
|
110
104
|
|
111
105
|
test 'should complain about length even if password is not required' do
|
112
|
-
user = new_user(:
|
106
|
+
user = new_user(password: 'x'*73, password_confirmation: 'x'*73)
|
113
107
|
user.stubs(:password_required?).returns(false)
|
114
108
|
assert user.invalid?
|
115
|
-
assert_equal 'is too long (maximum is
|
109
|
+
assert_equal 'is too long (maximum is 72 characters)', user.errors[:password].join
|
116
110
|
end
|
117
111
|
|
118
112
|
test 'should not be included in objects with invalid API' do
|
data/test/models_test.rb
CHANGED
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
require 'test_models'
|
3
5
|
|
@@ -13,7 +15,7 @@ class ActiveRecordTest < ActiveSupport::TestCase
|
|
13
15
|
end
|
14
16
|
|
15
17
|
(Devise::ALL - modules).each do |mod|
|
16
|
-
|
18
|
+
refute include_module?(klass, mod)
|
17
19
|
end
|
18
20
|
end
|
19
21
|
|
@@ -92,20 +94,27 @@ class ActiveRecordTest < ActiveSupport::TestCase
|
|
92
94
|
end
|
93
95
|
end
|
94
96
|
|
97
|
+
module StubModelFilters
|
98
|
+
def stub_filter(name)
|
99
|
+
define_singleton_method(name) { |*| nil }
|
100
|
+
end
|
101
|
+
end
|
102
|
+
|
95
103
|
class CheckFieldsTest < ActiveSupport::TestCase
|
96
104
|
test 'checks if the class respond_to the required fields' do
|
97
105
|
Player = Class.new do
|
98
106
|
extend Devise::Models
|
107
|
+
extend StubModelFilters
|
99
108
|
|
100
|
-
|
101
|
-
|
109
|
+
stub_filter :before_validation
|
110
|
+
stub_filter :after_update
|
102
111
|
|
103
112
|
devise :database_authenticatable
|
104
113
|
|
105
114
|
attr_accessor :encrypted_password, :email
|
106
115
|
end
|
107
116
|
|
108
|
-
assert_nothing_raised
|
117
|
+
assert_nothing_raised do
|
109
118
|
Devise::Models.check_fields!(Player)
|
110
119
|
end
|
111
120
|
end
|
@@ -113,9 +122,10 @@ class CheckFieldsTest < ActiveSupport::TestCase
|
|
113
122
|
test 'raises Devise::Models::MissingAtrribute and shows the missing attribute if the class doesn\'t respond_to one of the attributes' do
|
114
123
|
Clown = Class.new do
|
115
124
|
extend Devise::Models
|
125
|
+
extend StubModelFilters
|
116
126
|
|
117
|
-
|
118
|
-
|
127
|
+
stub_filter :before_validation
|
128
|
+
stub_filter :after_update
|
119
129
|
|
120
130
|
devise :database_authenticatable
|
121
131
|
|
@@ -130,9 +140,10 @@ class CheckFieldsTest < ActiveSupport::TestCase
|
|
130
140
|
test 'raises Devise::Models::MissingAtrribute with all the missing attributes if there is more than one' do
|
131
141
|
Magician = Class.new do
|
132
142
|
extend Devise::Models
|
143
|
+
extend StubModelFilters
|
133
144
|
|
134
|
-
|
135
|
-
|
145
|
+
stub_filter :before_validation
|
146
|
+
stub_filter :after_update
|
136
147
|
|
137
148
|
devise :database_authenticatable
|
138
149
|
end
|
@@ -1,3 +1,5 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
|
3
5
|
class OmniAuthConfigTest < ActiveSupport::TestCase
|
@@ -11,12 +13,12 @@ class OmniAuthConfigTest < ActiveSupport::TestCase
|
|
11
13
|
end
|
12
14
|
|
13
15
|
test 'strategy_name returns provider if no name option are given' do
|
14
|
-
config = Devise::OmniAuth::Config.new :facebook, [{ :
|
16
|
+
config = Devise::OmniAuth::Config.new :facebook, [{ other: :option }]
|
15
17
|
assert_equal :facebook, config.strategy_name
|
16
18
|
end
|
17
19
|
|
18
20
|
test 'returns name option when have a name' do
|
19
|
-
config = Devise::OmniAuth::Config.new :facebook, [{ :
|
21
|
+
config = Devise::OmniAuth::Config.new :facebook, [{ name: :github }]
|
20
22
|
assert_equal :github, config.strategy_name
|
21
23
|
end
|
22
24
|
|
@@ -25,19 +27,21 @@ class OmniAuthConfigTest < ActiveSupport::TestCase
|
|
25
27
|
assert_equal OmniAuth::Strategies::Facebook, config.strategy_class
|
26
28
|
end
|
27
29
|
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
30
|
+
class NamedTestStrategy
|
31
|
+
include OmniAuth::Strategy
|
32
|
+
option :name, :the_one
|
33
|
+
end
|
32
34
|
|
35
|
+
test "finds the strategy in OmniAuth's list by name" do
|
33
36
|
config = Devise::OmniAuth::Config.new :the_one, [{}]
|
34
37
|
assert_equal NamedTestStrategy, config.strategy_class
|
35
38
|
end
|
36
39
|
|
37
|
-
|
38
|
-
|
39
|
-
|
40
|
+
class UnNamedTestStrategy
|
41
|
+
include OmniAuth::Strategy
|
42
|
+
end
|
40
43
|
|
44
|
+
test "finds the strategy in OmniAuth's list by class name" do
|
41
45
|
config = Devise::OmniAuth::Config.new :un_named_test_strategy, [{}]
|
42
46
|
assert_equal UnNamedTestStrategy, config.strategy_class
|
43
47
|
end
|
@@ -50,8 +54,8 @@ class OmniAuthConfigTest < ActiveSupport::TestCase
|
|
50
54
|
end
|
51
55
|
|
52
56
|
test 'allows the user to define a custom require path' do
|
53
|
-
config = Devise::OmniAuth::Config.new :my_strategy, [{:
|
57
|
+
config = Devise::OmniAuth::Config.new :my_strategy, [{strategy_class: MyStrategy}]
|
54
58
|
config_class = config.strategy_class
|
55
59
|
assert_equal MyStrategy, config_class
|
56
60
|
end
|
57
|
-
end
|
61
|
+
end
|
@@ -1,24 +1,23 @@
|
|
1
|
+
# frozen_string_literal: true
|
2
|
+
|
1
3
|
require 'test_helper'
|
2
4
|
|
3
5
|
class OmniAuthRoutesTest < ActionController::TestCase
|
4
|
-
ExpectedUrlGeneratiorError = Devise.rails4? ?
|
5
|
-
ActionController::UrlGenerationError : ActionController::RoutingError
|
6
|
-
|
7
6
|
tests ApplicationController
|
8
7
|
|
9
8
|
def assert_path(action, provider, with_param=true)
|
10
9
|
# Resource param
|
11
10
|
assert_equal @controller.send(action, :user, provider),
|
12
|
-
@controller.send("user_#{action}"
|
11
|
+
@controller.send("user_#{provider}_#{action}")
|
13
12
|
|
14
13
|
# With an object
|
15
14
|
assert_equal @controller.send(action, User.new, provider),
|
16
|
-
@controller.send("user_#{action}"
|
15
|
+
@controller.send("user_#{provider}_#{action}")
|
17
16
|
|
18
17
|
if with_param
|
19
18
|
# Default url params
|
20
|
-
assert_equal @controller.send(action, :user, provider, :
|
21
|
-
@controller.send("user_#{action}",
|
19
|
+
assert_equal @controller.send(action, :user, provider, param: 123),
|
20
|
+
@controller.send("user_#{provider}_#{action}", param: 123)
|
22
21
|
end
|
23
22
|
end
|
24
23
|
|
@@ -33,7 +32,7 @@ class OmniAuthRoutesTest < ActionController::TestCase
|
|
33
32
|
test 'should generate authorization path' do
|
34
33
|
assert_match "/users/auth/facebook", @controller.omniauth_authorize_path(:user, :facebook)
|
35
34
|
|
36
|
-
assert_raise
|
35
|
+
assert_raise NoMethodError do
|
37
36
|
@controller.omniauth_authorize_path(:user, :github)
|
38
37
|
end
|
39
38
|
end
|
@@ -44,7 +43,7 @@ class OmniAuthRoutesTest < ActionController::TestCase
|
|
44
43
|
|
45
44
|
test 'should generate authorization path with params' do
|
46
45
|
assert_match "/users/auth/openid?openid_url=http%3A%2F%2Fyahoo.com",
|
47
|
-
@controller.omniauth_authorize_path(:user, :openid, :
|
46
|
+
@controller.omniauth_authorize_path(:user, :openid, openid_url: "http://yahoo.com")
|
48
47
|
end
|
49
48
|
|
50
49
|
test 'should not add a "?" if no param was sent' do
|