devise 3.5.2 → 4.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- checksums.yaml +4 -4
- data/.travis.yml +14 -15
- data/CHANGELOG.md +57 -1125
- data/CODE_OF_CONDUCT.md +22 -0
- data/CONTRIBUTING.md +2 -0
- data/Gemfile +3 -3
- data/Gemfile.lock +80 -80
- data/MIT-LICENSE +1 -1
- data/README.md +27 -18
- data/app/controllers/devise/confirmations_controller.rb +1 -1
- data/app/controllers/devise/omniauth_callbacks_controller.rb +4 -4
- data/app/controllers/devise/passwords_controller.rb +5 -4
- data/app/controllers/devise/registrations_controller.rb +5 -5
- data/app/controllers/devise/sessions_controller.rb +7 -7
- data/app/controllers/devise/unlocks_controller.rb +2 -2
- data/app/controllers/devise_controller.rb +20 -9
- data/app/mailers/devise/mailer.rb +4 -0
- data/app/views/devise/confirmations/new.html.erb +1 -1
- data/app/views/devise/mailer/password_change.html.erb +3 -0
- data/app/views/devise/shared/_links.html.erb +1 -1
- data/bin/test +13 -0
- data/config/locales/en.yml +2 -0
- data/devise.gemspec +2 -3
- data/gemfiles/Gemfile.rails-4.1-stable +4 -4
- data/gemfiles/Gemfile.rails-4.1-stable.lock +69 -71
- data/gemfiles/Gemfile.rails-4.2-stable +4 -4
- data/gemfiles/Gemfile.rails-4.2-stable.lock +81 -83
- data/gemfiles/{Gemfile.rails-3.2-stable → Gemfile.rails-5.0-beta} +15 -7
- data/gemfiles/Gemfile.rails-5.0-beta.lock +199 -0
- data/lib/devise/controllers/helpers.rb +20 -24
- data/lib/devise/controllers/rememberable.rb +8 -1
- data/lib/devise/encryptor.rb +4 -4
- data/lib/devise/failure_app.rb +33 -12
- data/lib/devise/hooks/timeoutable.rb +5 -3
- data/lib/devise/mailers/helpers.rb +1 -1
- data/lib/devise/models/authenticatable.rb +5 -1
- data/lib/devise/models/confirmable.rb +6 -6
- data/lib/devise/models/database_authenticatable.rb +20 -7
- data/lib/devise/models/lockable.rb +1 -1
- data/lib/devise/models/recoverable.rb +3 -7
- data/lib/devise/models/rememberable.rb +38 -24
- data/lib/devise/models/timeoutable.rb +0 -6
- data/lib/devise/models.rb +1 -1
- data/lib/devise/omniauth/url_helpers.rb +62 -4
- data/lib/devise/parameter_sanitizer.rb +176 -61
- data/lib/devise/rails/routes.rb +54 -31
- data/lib/devise/rails/warden_compat.rb +1 -10
- data/lib/devise/rails.rb +1 -10
- data/lib/devise/strategies/authenticatable.rb +1 -1
- data/lib/devise/strategies/database_authenticatable.rb +3 -3
- data/lib/devise/strategies/rememberable.rb +3 -6
- data/lib/devise/test_helpers.rb +10 -5
- data/lib/devise/token_generator.rb +1 -41
- data/lib/devise/version.rb +1 -1
- data/lib/devise.rb +115 -20
- data/lib/generators/active_record/devise_generator.rb +11 -5
- data/lib/generators/active_record/templates/migration.rb +2 -2
- data/lib/generators/active_record/templates/migration_existing.rb +2 -2
- data/lib/generators/devise/install_generator.rb +15 -0
- data/lib/generators/devise/orm_helpers.rb +1 -18
- data/lib/generators/devise/views_generator.rb +14 -3
- data/lib/generators/templates/controllers/registrations_controller.rb +4 -4
- data/lib/generators/templates/controllers/sessions_controller.rb +2 -2
- data/lib/generators/templates/devise.rb +19 -17
- data/lib/generators/templates/markerb/confirmation_instructions.markerb +1 -1
- 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/test/controllers/custom_registrations_controller_test.rb +5 -5
- data/test/controllers/custom_strategy_test.rb +7 -5
- data/test/controllers/helper_methods_test.rb +22 -0
- data/test/controllers/helpers_test.rb +1 -1
- data/test/controllers/inherited_controller_i18n_messages_test.rb +2 -2
- data/test/controllers/internal_helpers_test.rb +8 -10
- data/test/controllers/load_hooks_controller_test.rb +1 -1
- data/test/controllers/passwords_controller_test.rb +4 -3
- data/test/controllers/sessions_controller_test.rb +21 -18
- data/test/controllers/url_helpers_test.rb +1 -1
- data/test/devise_test.rb +27 -0
- data/test/failure_app_test.rb +37 -15
- data/test/generators/active_record_generator_test.rb +0 -26
- data/test/generators/install_generator_test.rb +14 -3
- data/test/generators/views_generator_test.rb +7 -0
- data/test/helpers/devise_helper_test.rb +1 -1
- data/test/integration/authenticatable_test.rb +18 -18
- data/test/integration/confirmable_test.rb +5 -5
- data/test/integration/database_authenticatable_test.rb +1 -1
- data/test/integration/http_authenticatable_test.rb +4 -5
- data/test/integration/lockable_test.rb +4 -3
- data/test/integration/omniauthable_test.rb +12 -10
- data/test/integration/recoverable_test.rb +10 -10
- data/test/integration/registerable_test.rb +9 -11
- data/test/integration/rememberable_test.rb +42 -7
- data/test/integration/timeoutable_test.rb +16 -4
- data/test/integration/trackable_test.rb +1 -1
- data/test/mailers/confirmation_instructions_test.rb +6 -6
- data/test/mailers/reset_password_instructions_test.rb +5 -5
- data/test/mailers/unlock_instructions_test.rb +5 -5
- data/test/models/confirmable_test.rb +25 -1
- data/test/models/database_authenticatable_test.rb +26 -6
- data/test/models/lockable_test.rb +1 -1
- data/test/models/recoverable_test.rb +23 -0
- data/test/models/rememberable_test.rb +48 -95
- data/test/models/validatable_test.rb +2 -10
- data/test/models_test.rb +15 -6
- data/test/omniauth/url_helpers_test.rb +4 -7
- data/test/orm/active_record.rb +6 -1
- data/test/parameter_sanitizer_test.rb +103 -53
- data/test/rails_app/app/active_record/user.rb +1 -0
- data/test/rails_app/app/active_record/user_without_email.rb +8 -0
- data/test/rails_app/app/controllers/admins_controller.rb +1 -1
- data/test/rails_app/app/controllers/application_controller.rb +2 -2
- data/test/rails_app/app/controllers/home_controller.rb +5 -1
- data/test/rails_app/app/controllers/users/omniauth_callbacks_controller.rb +2 -2
- data/test/rails_app/app/controllers/users_controller.rb +5 -5
- data/test/rails_app/app/mongoid/user_without_email.rb +33 -0
- data/test/rails_app/config/application.rb +1 -1
- data/test/rails_app/config/boot.rb +4 -4
- data/test/rails_app/config/environments/test.rb +6 -1
- data/test/rails_app/config/initializers/devise.rb +1 -1
- data/test/rails_app/config/initializers/secret_token.rb +1 -6
- data/test/rails_app/config/routes.rb +5 -0
- data/test/rails_app/lib/shared_user_without_email.rb +26 -0
- data/test/routes_test.rb +28 -13
- data/test/support/helpers.rb +4 -0
- data/test/support/http_method_compatibility.rb +51 -0
- data/test/support/webrat/integrations/rails.rb +9 -0
- data/test/test_helpers_test.rb +5 -5
- data/test/test_models.rb +1 -1
- metadata +41 -45
- data/gemfiles/Gemfile.rails-3.2-stable.lock +0 -169
- data/gemfiles/Gemfile.rails-4.0-stable +0 -29
- data/gemfiles/Gemfile.rails-4.0-stable.lock +0 -163
- data/script/cached-bundle +0 -49
- data/script/s3-put +0 -71
|
@@ -37,16 +37,16 @@ class ConfirmationInstructionsTest < ActionMailer::TestCase
|
|
|
37
37
|
assert_equal [user.email], mail.to
|
|
38
38
|
end
|
|
39
39
|
|
|
40
|
-
test '
|
|
40
|
+
test 'set up sender from configuration' do
|
|
41
41
|
assert_equal ['test@example.com'], mail.from
|
|
42
42
|
end
|
|
43
43
|
|
|
44
|
-
test '
|
|
44
|
+
test 'set up sender from custom mailer defaults' do
|
|
45
45
|
Devise.mailer = 'Users::Mailer'
|
|
46
46
|
assert_equal ['custom@example.com'], mail.from
|
|
47
47
|
end
|
|
48
48
|
|
|
49
|
-
test '
|
|
49
|
+
test 'set up sender from custom mailer defaults with proc' do
|
|
50
50
|
Devise.mailer = 'Users::FromProcMailer'
|
|
51
51
|
assert_equal ['custom@example.com'], mail.from
|
|
52
52
|
end
|
|
@@ -56,17 +56,17 @@ class ConfirmationInstructionsTest < ActionMailer::TestCase
|
|
|
56
56
|
assert_present mail.body.encoded
|
|
57
57
|
end
|
|
58
58
|
|
|
59
|
-
test '
|
|
59
|
+
test 'set up reply to as copy from sender' do
|
|
60
60
|
assert_equal ['test@example.com'], mail.reply_to
|
|
61
61
|
end
|
|
62
62
|
|
|
63
|
-
test '
|
|
63
|
+
test 'set up reply to as different if set in defaults' do
|
|
64
64
|
Devise.mailer = 'Users::ReplyToMailer'
|
|
65
65
|
assert_equal ['custom@example.com'], mail.from
|
|
66
66
|
assert_equal ['custom_reply_to@example.com'], mail.reply_to
|
|
67
67
|
end
|
|
68
68
|
|
|
69
|
-
test '
|
|
69
|
+
test 'set up subject from I18n' do
|
|
70
70
|
store_translations :en, devise: { mailer: { confirmation_instructions: { subject: 'Account Confirmation' } } } do
|
|
71
71
|
assert_equal 'Account Confirmation', mail.subject
|
|
72
72
|
end
|
|
@@ -39,16 +39,16 @@ class ResetPasswordInstructionsTest < ActionMailer::TestCase
|
|
|
39
39
|
assert_equal [user.email], mail.to
|
|
40
40
|
end
|
|
41
41
|
|
|
42
|
-
test '
|
|
42
|
+
test 'set up sender from configuration' do
|
|
43
43
|
assert_equal ['test@example.com'], mail.from
|
|
44
44
|
end
|
|
45
45
|
|
|
46
|
-
test '
|
|
46
|
+
test 'set up sender from custom mailer defaults' do
|
|
47
47
|
Devise.mailer = 'Users::Mailer'
|
|
48
48
|
assert_equal ['custom@example.com'], mail.from
|
|
49
49
|
end
|
|
50
50
|
|
|
51
|
-
test '
|
|
51
|
+
test 'set up sender from custom mailer defaults with proc' do
|
|
52
52
|
Devise.mailer = 'Users::FromProcMailer'
|
|
53
53
|
assert_equal ['custom@example.com'], mail.from
|
|
54
54
|
end
|
|
@@ -58,11 +58,11 @@ class ResetPasswordInstructionsTest < ActionMailer::TestCase
|
|
|
58
58
|
assert_present mail.body.encoded
|
|
59
59
|
end
|
|
60
60
|
|
|
61
|
-
test '
|
|
61
|
+
test 'set up reply to as copy from sender' do
|
|
62
62
|
assert_equal ['test@example.com'], mail.reply_to
|
|
63
63
|
end
|
|
64
64
|
|
|
65
|
-
test '
|
|
65
|
+
test 'set up subject from I18n' do
|
|
66
66
|
store_translations :en, devise: { mailer: { reset_password_instructions: { subject: 'Reset instructions' } } } do
|
|
67
67
|
assert_equal 'Reset instructions', mail.subject
|
|
68
68
|
end
|
|
@@ -40,16 +40,16 @@ class UnlockInstructionsTest < ActionMailer::TestCase
|
|
|
40
40
|
assert_equal [user.email], mail.to
|
|
41
41
|
end
|
|
42
42
|
|
|
43
|
-
test '
|
|
43
|
+
test 'set up sender from configuration' do
|
|
44
44
|
assert_equal ['test@example.com'], mail.from
|
|
45
45
|
end
|
|
46
46
|
|
|
47
|
-
test '
|
|
47
|
+
test 'set up sender from custom mailer defaults' do
|
|
48
48
|
Devise.mailer = 'Users::Mailer'
|
|
49
49
|
assert_equal ['custom@example.com'], mail.from
|
|
50
50
|
end
|
|
51
51
|
|
|
52
|
-
test '
|
|
52
|
+
test 'set up sender from custom mailer defaults with proc' do
|
|
53
53
|
Devise.mailer = 'Users::FromProcMailer'
|
|
54
54
|
assert_equal ['custom@example.com'], mail.from
|
|
55
55
|
end
|
|
@@ -59,11 +59,11 @@ class UnlockInstructionsTest < ActionMailer::TestCase
|
|
|
59
59
|
assert_present mail.body.encoded
|
|
60
60
|
end
|
|
61
61
|
|
|
62
|
-
test '
|
|
62
|
+
test 'set up reply to as copy from sender' do
|
|
63
63
|
assert_equal ['test@example.com'], mail.reply_to
|
|
64
64
|
end
|
|
65
65
|
|
|
66
|
-
test '
|
|
66
|
+
test 'set up subject from I18n' do
|
|
67
67
|
store_translations :en, devise: { mailer: { unlock_instructions: { subject: 'Yo unlock instructions' } } } do
|
|
68
68
|
assert_equal 'Yo unlock instructions', mail.subject
|
|
69
69
|
end
|
|
@@ -188,7 +188,7 @@ class ConfirmableTest < ActiveSupport::TestCase
|
|
|
188
188
|
|
|
189
189
|
test 'confirm time should fallback to devise confirm in default configuration' do
|
|
190
190
|
swap Devise, allow_unconfirmed_access_for: 1.day do
|
|
191
|
-
user =
|
|
191
|
+
user = create_user
|
|
192
192
|
user.confirmation_sent_at = 2.days.ago
|
|
193
193
|
assert_not user.active_for_authentication?
|
|
194
194
|
|
|
@@ -250,6 +250,16 @@ class ConfirmableTest < ActiveSupport::TestCase
|
|
|
250
250
|
assert user.reload.active_for_authentication?
|
|
251
251
|
end
|
|
252
252
|
|
|
253
|
+
test 'should not break when a user tries to reset their password in the case where confirmation is not required and confirm_within is set' do
|
|
254
|
+
swap Devise, confirm_within: 3.days do
|
|
255
|
+
user = create_user
|
|
256
|
+
user.instance_eval { def confirmation_required?; false end }
|
|
257
|
+
user.confirmation_sent_at = nil
|
|
258
|
+
user.save
|
|
259
|
+
assert user.reload.confirm
|
|
260
|
+
end
|
|
261
|
+
end
|
|
262
|
+
|
|
253
263
|
test 'should find a user to send email instructions for the user confirm its email by authentication_keys' do
|
|
254
264
|
swap Devise, authentication_keys: [:username, :email] do
|
|
255
265
|
user = create_user
|
|
@@ -476,4 +486,18 @@ class ReconfirmableTest < ActiveSupport::TestCase
|
|
|
476
486
|
:unconfirmed_email
|
|
477
487
|
]
|
|
478
488
|
end
|
|
489
|
+
|
|
490
|
+
test 'should not require reconfirmation after creating a record' do
|
|
491
|
+
user = create_admin
|
|
492
|
+
assert !user.pending_reconfirmation?
|
|
493
|
+
end
|
|
494
|
+
|
|
495
|
+
test 'should not require reconfirmation after creating a record with #save called in callback' do
|
|
496
|
+
class Admin::WithSaveInCallback < Admin
|
|
497
|
+
after_create :save
|
|
498
|
+
end
|
|
499
|
+
|
|
500
|
+
user = Admin::WithSaveInCallback.create(valid_attributes.except(:username))
|
|
501
|
+
assert !user.pending_reconfirmation?
|
|
502
|
+
end
|
|
479
503
|
end
|
|
@@ -3,6 +3,10 @@ require 'test_models'
|
|
|
3
3
|
require 'digest/sha1'
|
|
4
4
|
|
|
5
5
|
class DatabaseAuthenticatableTest < ActiveSupport::TestCase
|
|
6
|
+
def setup
|
|
7
|
+
setup_mailer
|
|
8
|
+
end
|
|
9
|
+
|
|
6
10
|
test 'should downcase case insensitive keys when saving' do
|
|
7
11
|
# case_insensitive_keys is set to :email by default.
|
|
8
12
|
email = 'Foo@Bar.com'
|
|
@@ -88,28 +92,28 @@ class DatabaseAuthenticatableTest < ActiveSupport::TestCase
|
|
|
88
92
|
assert user.respond_to?(:password_confirmation)
|
|
89
93
|
end
|
|
90
94
|
|
|
91
|
-
test 'should generate
|
|
95
|
+
test 'should generate a hashed password while setting password' do
|
|
92
96
|
user = new_user
|
|
93
97
|
assert_present user.encrypted_password
|
|
94
98
|
end
|
|
95
99
|
|
|
96
|
-
test 'should support custom
|
|
97
|
-
user =
|
|
100
|
+
test 'should support custom hashing methods' do
|
|
101
|
+
user = UserWithCustomHashing.new(password: '654321')
|
|
98
102
|
assert_equal user.encrypted_password, '123456'
|
|
99
103
|
end
|
|
100
104
|
|
|
101
|
-
test 'allow authenticatable_salt to work even with nil
|
|
105
|
+
test 'allow authenticatable_salt to work even with nil hashed password' do
|
|
102
106
|
user = User.new
|
|
103
107
|
user.encrypted_password = nil
|
|
104
108
|
assert_nil user.authenticatable_salt
|
|
105
109
|
end
|
|
106
110
|
|
|
107
|
-
test 'should not generate
|
|
111
|
+
test 'should not generate a hashed password if password is blank' do
|
|
108
112
|
assert_blank new_user(password: nil).encrypted_password
|
|
109
113
|
assert_blank new_user(password: '').encrypted_password
|
|
110
114
|
end
|
|
111
115
|
|
|
112
|
-
test 'should
|
|
116
|
+
test 'should hash password again if password has changed' do
|
|
113
117
|
user = create_user
|
|
114
118
|
encrypted_password = user.encrypted_password
|
|
115
119
|
user.password = user.password_confirmation = 'new_password'
|
|
@@ -225,6 +229,22 @@ class DatabaseAuthenticatableTest < ActiveSupport::TestCase
|
|
|
225
229
|
assert_match "can't be blank", user.errors[:current_password].join
|
|
226
230
|
end
|
|
227
231
|
|
|
232
|
+
test 'should not email on password change' do
|
|
233
|
+
user = create_user
|
|
234
|
+
assert_email_not_sent do
|
|
235
|
+
assert user.update_attributes(password: 'newpass', password_confirmation: 'newpass')
|
|
236
|
+
end
|
|
237
|
+
end
|
|
238
|
+
|
|
239
|
+
test 'should email on password change when configured' do
|
|
240
|
+
swap Devise, send_password_change_notification: true do
|
|
241
|
+
user = create_user
|
|
242
|
+
assert_email_sent user.email do
|
|
243
|
+
assert user.update_attributes(password: 'newpass', password_confirmation: 'newpass')
|
|
244
|
+
end
|
|
245
|
+
end
|
|
246
|
+
end
|
|
247
|
+
|
|
228
248
|
test 'downcase_keys with validation' do
|
|
229
249
|
User.create(email: "HEllO@example.com", password: "123456")
|
|
230
250
|
user = User.create(email: "HEllO@example.com", password: "123456")
|
|
@@ -14,7 +14,7 @@ class LockableTest < ActiveSupport::TestCase
|
|
|
14
14
|
end
|
|
15
15
|
end
|
|
16
16
|
|
|
17
|
-
test "should increment failed_attempts on
|
|
17
|
+
test "should increment failed_attempts on successful validation if the user is already locked" do
|
|
18
18
|
user = create_user
|
|
19
19
|
user.confirm
|
|
20
20
|
|
|
@@ -42,6 +42,17 @@ class RecoverableTest < ActiveSupport::TestCase
|
|
|
42
42
|
assert_nil user.reset_password_token
|
|
43
43
|
end
|
|
44
44
|
|
|
45
|
+
test 'should not clear reset password token for new user' do
|
|
46
|
+
user = new_user
|
|
47
|
+
assert_nil user.reset_password_token
|
|
48
|
+
|
|
49
|
+
user.send_reset_password_instructions
|
|
50
|
+
assert_present user.reset_password_token
|
|
51
|
+
|
|
52
|
+
user.save
|
|
53
|
+
assert_present user.reset_password_token
|
|
54
|
+
end
|
|
55
|
+
|
|
45
56
|
test 'should clear reset password token if changing password' do
|
|
46
57
|
user = create_user
|
|
47
58
|
assert_nil user.reset_password_token
|
|
@@ -65,6 +76,18 @@ class RecoverableTest < ActiveSupport::TestCase
|
|
|
65
76
|
assert_nil user.reset_password_token
|
|
66
77
|
end
|
|
67
78
|
|
|
79
|
+
test 'should clear reset password successfully even if there is no email' do
|
|
80
|
+
user = create_user_without_email
|
|
81
|
+
assert_nil user.reset_password_token
|
|
82
|
+
|
|
83
|
+
user.send_reset_password_instructions
|
|
84
|
+
assert_present user.reset_password_token
|
|
85
|
+
user.password = "123456678"
|
|
86
|
+
user.password_confirmation = "123456678"
|
|
87
|
+
user.save!
|
|
88
|
+
assert_nil user.reset_password_token
|
|
89
|
+
end
|
|
90
|
+
|
|
68
91
|
test 'should not clear reset password token if record is invalid' do
|
|
69
92
|
user = create_user
|
|
70
93
|
user.send_reset_password_instructions
|
|
@@ -13,6 +13,7 @@ class RememberableTest < ActiveSupport::TestCase
|
|
|
13
13
|
user = create_user
|
|
14
14
|
user.expects(:valid?).never
|
|
15
15
|
user.remember_me!
|
|
16
|
+
assert user.remember_created_at
|
|
16
17
|
end
|
|
17
18
|
|
|
18
19
|
test 'forget_me should not clear remember token if using salt' do
|
|
@@ -33,13 +34,57 @@ class RememberableTest < ActiveSupport::TestCase
|
|
|
33
34
|
test 'serialize into cookie' do
|
|
34
35
|
user = create_user
|
|
35
36
|
user.remember_me!
|
|
36
|
-
|
|
37
|
+
id, token, date = User.serialize_into_cookie(user)
|
|
38
|
+
assert_equal id, user.to_key
|
|
39
|
+
assert_equal token, user.authenticatable_salt
|
|
40
|
+
assert date.is_a?(String)
|
|
37
41
|
end
|
|
38
42
|
|
|
39
43
|
test 'serialize from cookie' do
|
|
40
44
|
user = create_user
|
|
41
45
|
user.remember_me!
|
|
42
|
-
assert_equal user, User.serialize_from_cookie(user.to_key, user.authenticatable_salt)
|
|
46
|
+
assert_equal user, User.serialize_from_cookie(user.to_key, user.authenticatable_salt, Time.now.utc)
|
|
47
|
+
end
|
|
48
|
+
|
|
49
|
+
test 'serialize from cookie should accept a String with the datetime seconds and microseconds' do
|
|
50
|
+
user = create_user
|
|
51
|
+
user.remember_me!
|
|
52
|
+
assert_equal user, User.serialize_from_cookie(user.to_key, user.authenticatable_salt, Time.now.utc.to_f.to_json)
|
|
53
|
+
end
|
|
54
|
+
|
|
55
|
+
test 'serialize from cookie should return nil with invalid datetime' do
|
|
56
|
+
user = create_user
|
|
57
|
+
user.remember_me!
|
|
58
|
+
assert_nil User.serialize_from_cookie(user.to_key, user.authenticatable_salt, "2013")
|
|
59
|
+
end
|
|
60
|
+
|
|
61
|
+
test 'serialize from cookie should return nil if no resource is found' do
|
|
62
|
+
assert_nil resource_class.serialize_from_cookie([0], "123", Time.now.utc)
|
|
63
|
+
end
|
|
64
|
+
|
|
65
|
+
test 'serialize from cookie should return nil if no timestamp' do
|
|
66
|
+
user = create_user
|
|
67
|
+
user.remember_me!
|
|
68
|
+
assert_nil User.serialize_from_cookie(user.to_key, user.authenticatable_salt)
|
|
69
|
+
end
|
|
70
|
+
|
|
71
|
+
test 'serialize from cookie should return nil if timestamp is earlier than token creation' do
|
|
72
|
+
user = create_user
|
|
73
|
+
user.remember_me!
|
|
74
|
+
assert_nil User.serialize_from_cookie(user.to_key, user.authenticatable_salt, 1.day.ago)
|
|
75
|
+
end
|
|
76
|
+
|
|
77
|
+
test 'serialize from cookie should return nil if timestamp is older than remember_for' do
|
|
78
|
+
user = create_user
|
|
79
|
+
user.remember_created_at = 1.month.ago
|
|
80
|
+
user.remember_me!
|
|
81
|
+
assert_nil User.serialize_from_cookie(user.to_key, user.authenticatable_salt, 3.weeks.ago)
|
|
82
|
+
end
|
|
83
|
+
|
|
84
|
+
test 'serialize from cookie me return nil if is a valid resource with invalid token' do
|
|
85
|
+
user = create_user
|
|
86
|
+
user.remember_me!
|
|
87
|
+
assert_nil User.serialize_from_cookie(user.to_key, "123", Time.now.utc)
|
|
43
88
|
end
|
|
44
89
|
|
|
45
90
|
test 'raises a RuntimeError if authenticatable_salt is nil or empty' do
|
|
@@ -93,28 +138,7 @@ class RememberableTest < ActiveSupport::TestCase
|
|
|
93
138
|
resource.forget_me!
|
|
94
139
|
end
|
|
95
140
|
|
|
96
|
-
test 'remember
|
|
97
|
-
assert create_resource.remember_expired?
|
|
98
|
-
end
|
|
99
|
-
|
|
100
|
-
test 'serialize should return nil if no resource is found' do
|
|
101
|
-
assert_nil resource_class.serialize_from_cookie([0], "123")
|
|
102
|
-
end
|
|
103
|
-
|
|
104
|
-
test 'remember me return nil if is a valid resource with invalid token' do
|
|
105
|
-
resource = create_resource
|
|
106
|
-
assert_nil resource_class.serialize_from_cookie([resource.id], "123")
|
|
107
|
-
end
|
|
108
|
-
|
|
109
|
-
test 'remember for should fallback to devise remember for default configuration' do
|
|
110
|
-
swap Devise, remember_for: 1.day do
|
|
111
|
-
resource = create_resource
|
|
112
|
-
resource.remember_me!
|
|
113
|
-
assert_not resource.remember_expired?
|
|
114
|
-
end
|
|
115
|
-
end
|
|
116
|
-
|
|
117
|
-
test 'remember expires at should sum date of creation with remember for configuration' do
|
|
141
|
+
test 'remember expires at uses remember for configuration' do
|
|
118
142
|
swap Devise, remember_for: 3.days do
|
|
119
143
|
resource = create_resource
|
|
120
144
|
resource.remember_me!
|
|
@@ -125,77 +149,6 @@ class RememberableTest < ActiveSupport::TestCase
|
|
|
125
149
|
end
|
|
126
150
|
end
|
|
127
151
|
|
|
128
|
-
test 'remember should be expired if remember_for is zero' do
|
|
129
|
-
swap Devise, remember_for: 0.days do
|
|
130
|
-
Devise.remember_for = 0.days
|
|
131
|
-
resource = create_resource
|
|
132
|
-
resource.remember_me!
|
|
133
|
-
assert resource.remember_expired?
|
|
134
|
-
end
|
|
135
|
-
end
|
|
136
|
-
|
|
137
|
-
test 'remember should be expired if it was created before limit time' do
|
|
138
|
-
swap Devise, remember_for: 1.day do
|
|
139
|
-
resource = create_resource
|
|
140
|
-
resource.remember_me!
|
|
141
|
-
resource.remember_created_at = 2.days.ago
|
|
142
|
-
resource.save
|
|
143
|
-
assert resource.remember_expired?
|
|
144
|
-
end
|
|
145
|
-
end
|
|
146
|
-
|
|
147
|
-
test 'remember should not be expired if it was created within the limit time' do
|
|
148
|
-
swap Devise, remember_for: 30.days do
|
|
149
|
-
resource = create_resource
|
|
150
|
-
resource.remember_me!
|
|
151
|
-
resource.remember_created_at = (30.days.ago + 2.minutes)
|
|
152
|
-
resource.save
|
|
153
|
-
assert_not resource.remember_expired?
|
|
154
|
-
end
|
|
155
|
-
end
|
|
156
|
-
|
|
157
|
-
test 'if extend_remember_period is false, remember_me! should generate a new timestamp if expired' do
|
|
158
|
-
swap Devise, remember_for: 5.minutes do
|
|
159
|
-
resource = create_resource
|
|
160
|
-
resource.remember_me!(false)
|
|
161
|
-
assert resource.remember_created_at
|
|
162
|
-
|
|
163
|
-
resource.remember_created_at = old = 10.minutes.ago
|
|
164
|
-
resource.save
|
|
165
|
-
|
|
166
|
-
resource.remember_me!(false)
|
|
167
|
-
assert_not_equal old.to_i, resource.remember_created_at.to_i
|
|
168
|
-
end
|
|
169
|
-
end
|
|
170
|
-
|
|
171
|
-
test 'if extend_remember_period is false, remember_me! should not generate a new timestamp' do
|
|
172
|
-
swap Devise, remember_for: 1.year do
|
|
173
|
-
resource = create_resource
|
|
174
|
-
resource.remember_me!(false)
|
|
175
|
-
assert resource.remember_created_at
|
|
176
|
-
|
|
177
|
-
resource.remember_created_at = old = 10.minutes.ago.utc
|
|
178
|
-
resource.save
|
|
179
|
-
|
|
180
|
-
resource.remember_me!(false)
|
|
181
|
-
assert_equal old.to_i, resource.remember_created_at.to_i
|
|
182
|
-
end
|
|
183
|
-
end
|
|
184
|
-
|
|
185
|
-
test 'if extend_remember_period is true, remember_me! should always generate a new timestamp' do
|
|
186
|
-
swap Devise, remember_for: 1.year do
|
|
187
|
-
resource = create_resource
|
|
188
|
-
resource.remember_me!(true)
|
|
189
|
-
assert resource.remember_created_at
|
|
190
|
-
|
|
191
|
-
resource.remember_created_at = old = 10.minutes.ago
|
|
192
|
-
resource.save
|
|
193
|
-
|
|
194
|
-
resource.remember_me!(true)
|
|
195
|
-
assert_not_equal old, resource.remember_created_at
|
|
196
|
-
end
|
|
197
|
-
end
|
|
198
|
-
|
|
199
152
|
test 'should have the required_fields array' do
|
|
200
153
|
assert_same_content Devise::Models::Rememberable.required_fields(User), [
|
|
201
154
|
:remember_created_at
|
|
@@ -57,11 +57,7 @@ class ValidatableTest < ActiveSupport::TestCase
|
|
|
57
57
|
user = new_user(password: 'new_password', password_confirmation: 'blabla')
|
|
58
58
|
assert user.invalid?
|
|
59
59
|
|
|
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
|
|
60
|
+
assert_equal 'doesn\'t match Password', user.errors[:password_confirmation].join
|
|
65
61
|
end
|
|
66
62
|
|
|
67
63
|
test 'should require password when updating/resetting password' do
|
|
@@ -79,11 +75,7 @@ class ValidatableTest < ActiveSupport::TestCase
|
|
|
79
75
|
user.password_confirmation = 'another_password'
|
|
80
76
|
assert user.invalid?
|
|
81
77
|
|
|
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
|
|
78
|
+
assert_equal 'doesn\'t match Password', user.errors[:password_confirmation].join
|
|
87
79
|
end
|
|
88
80
|
|
|
89
81
|
test 'should require a password with minimum of 7 characters' do
|
data/test/models_test.rb
CHANGED
|
@@ -92,13 +92,20 @@ class ActiveRecordTest < ActiveSupport::TestCase
|
|
|
92
92
|
end
|
|
93
93
|
end
|
|
94
94
|
|
|
95
|
+
module StubModelFilters
|
|
96
|
+
def stub_filter(name)
|
|
97
|
+
define_singleton_method(name) { |*| nil }
|
|
98
|
+
end
|
|
99
|
+
end
|
|
100
|
+
|
|
95
101
|
class CheckFieldsTest < ActiveSupport::TestCase
|
|
96
102
|
test 'checks if the class respond_to the required fields' do
|
|
97
103
|
Player = Class.new do
|
|
98
104
|
extend Devise::Models
|
|
105
|
+
extend StubModelFilters
|
|
99
106
|
|
|
100
|
-
|
|
101
|
-
|
|
107
|
+
stub_filter :before_validation
|
|
108
|
+
stub_filter :after_update
|
|
102
109
|
|
|
103
110
|
devise :database_authenticatable
|
|
104
111
|
|
|
@@ -113,9 +120,10 @@ class CheckFieldsTest < ActiveSupport::TestCase
|
|
|
113
120
|
test 'raises Devise::Models::MissingAtrribute and shows the missing attribute if the class doesn\'t respond_to one of the attributes' do
|
|
114
121
|
Clown = Class.new do
|
|
115
122
|
extend Devise::Models
|
|
123
|
+
extend StubModelFilters
|
|
116
124
|
|
|
117
|
-
|
|
118
|
-
|
|
125
|
+
stub_filter :before_validation
|
|
126
|
+
stub_filter :after_update
|
|
119
127
|
|
|
120
128
|
devise :database_authenticatable
|
|
121
129
|
|
|
@@ -130,9 +138,10 @@ class CheckFieldsTest < ActiveSupport::TestCase
|
|
|
130
138
|
test 'raises Devise::Models::MissingAtrribute with all the missing attributes if there is more than one' do
|
|
131
139
|
Magician = Class.new do
|
|
132
140
|
extend Devise::Models
|
|
141
|
+
extend StubModelFilters
|
|
133
142
|
|
|
134
|
-
|
|
135
|
-
|
|
143
|
+
stub_filter :before_validation
|
|
144
|
+
stub_filter :after_update
|
|
136
145
|
|
|
137
146
|
devise :database_authenticatable
|
|
138
147
|
end
|
|
@@ -1,24 +1,21 @@
|
|
|
1
1
|
require 'test_helper'
|
|
2
2
|
|
|
3
3
|
class OmniAuthRoutesTest < ActionController::TestCase
|
|
4
|
-
ExpectedUrlGeneratiorError = Devise.rails4? ?
|
|
5
|
-
ActionController::UrlGenerationError : ActionController::RoutingError
|
|
6
|
-
|
|
7
4
|
tests ApplicationController
|
|
8
5
|
|
|
9
6
|
def assert_path(action, provider, with_param=true)
|
|
10
7
|
# Resource param
|
|
11
8
|
assert_equal @controller.send(action, :user, provider),
|
|
12
|
-
@controller.send("user_#{action}"
|
|
9
|
+
@controller.send("user_#{provider}_#{action}")
|
|
13
10
|
|
|
14
11
|
# With an object
|
|
15
12
|
assert_equal @controller.send(action, User.new, provider),
|
|
16
|
-
@controller.send("user_#{action}"
|
|
13
|
+
@controller.send("user_#{provider}_#{action}")
|
|
17
14
|
|
|
18
15
|
if with_param
|
|
19
16
|
# Default url params
|
|
20
17
|
assert_equal @controller.send(action, :user, provider, param: 123),
|
|
21
|
-
@controller.send("user_#{action}",
|
|
18
|
+
@controller.send("user_#{provider}_#{action}", param: 123)
|
|
22
19
|
end
|
|
23
20
|
end
|
|
24
21
|
|
|
@@ -33,7 +30,7 @@ class OmniAuthRoutesTest < ActionController::TestCase
|
|
|
33
30
|
test 'should generate authorization path' do
|
|
34
31
|
assert_match "/users/auth/facebook", @controller.omniauth_authorize_path(:user, :facebook)
|
|
35
32
|
|
|
36
|
-
assert_raise
|
|
33
|
+
assert_raise NoMethodError do
|
|
37
34
|
@controller.omniauth_authorize_path(:user, :github)
|
|
38
35
|
end
|
|
39
36
|
end
|
data/test/orm/active_record.rb
CHANGED
|
@@ -5,6 +5,11 @@ ActiveRecord::Base.include_root_in_json = true
|
|
|
5
5
|
ActiveRecord::Migrator.migrate(File.expand_path("../../rails_app/db/migrate/", __FILE__))
|
|
6
6
|
|
|
7
7
|
class ActiveSupport::TestCase
|
|
8
|
-
|
|
8
|
+
if Rails.version >= '5.0.0'
|
|
9
|
+
self.use_transactional_tests = true
|
|
10
|
+
else
|
|
11
|
+
self.use_transactional_fixtures = true
|
|
12
|
+
end
|
|
13
|
+
|
|
9
14
|
self.use_instantiated_fixtures = false
|
|
10
15
|
end
|