authlogic 3.8.0 → 4.0.0
Sign up to get free protection for your applications and to get access to all the features.
- checksums.yaml +7 -0
- data/.github/triage.md +87 -0
- data/.gitignore +2 -1
- data/.rubocop.yml +62 -6
- data/.rubocop_todo.yml +51 -267
- data/.travis.yml +4 -26
- data/CHANGELOG.md +226 -2
- data/CONTRIBUTING.md +15 -5
- data/Gemfile +2 -2
- data/README.md +183 -91
- data/Rakefile +1 -1
- data/UPGRADING.md +20 -0
- data/authlogic.gemspec +25 -16
- data/lib/authlogic.rb +45 -45
- data/lib/authlogic/acts_as_authentic/base.rb +18 -11
- data/lib/authlogic/acts_as_authentic/email.rb +32 -28
- data/lib/authlogic/acts_as_authentic/logged_in_status.rb +1 -1
- data/lib/authlogic/acts_as_authentic/login.rb +32 -42
- data/lib/authlogic/acts_as_authentic/magic_columns.rb +6 -6
- data/lib/authlogic/acts_as_authentic/password.rb +53 -31
- data/lib/authlogic/acts_as_authentic/perishable_token.rb +18 -17
- data/lib/authlogic/acts_as_authentic/persistence_token.rb +7 -12
- data/lib/authlogic/acts_as_authentic/queries/find_with_case.rb +64 -0
- data/lib/authlogic/acts_as_authentic/restful_authentication.rb +11 -3
- data/lib/authlogic/acts_as_authentic/session_maintenance.rb +30 -10
- data/lib/authlogic/acts_as_authentic/single_access_token.rb +4 -4
- data/lib/authlogic/authenticates_many/association.rb +3 -3
- data/lib/authlogic/authenticates_many/base.rb +2 -2
- data/lib/authlogic/config.rb +0 -1
- data/lib/authlogic/controller_adapters/abstract_adapter.rb +11 -4
- data/lib/authlogic/controller_adapters/rack_adapter.rb +7 -3
- data/lib/authlogic/controller_adapters/rails_adapter.rb +2 -0
- data/lib/authlogic/crypto_providers/aes256.rb +1 -1
- data/lib/authlogic/crypto_providers/bcrypt.rb +1 -1
- data/lib/authlogic/crypto_providers/scrypt.rb +6 -6
- data/lib/authlogic/crypto_providers/sha1.rb +10 -5
- data/lib/authlogic/crypto_providers/sha256.rb +11 -8
- data/lib/authlogic/crypto_providers/wordpress.rb +2 -2
- data/lib/authlogic/i18n.rb +4 -2
- data/lib/authlogic/random.rb +10 -28
- data/lib/authlogic/regex.rb +11 -8
- data/lib/authlogic/session/activation.rb +6 -3
- data/lib/authlogic/session/active_record_trickery.rb +13 -9
- data/lib/authlogic/session/base.rb +15 -4
- data/lib/authlogic/session/brute_force_protection.rb +14 -7
- data/lib/authlogic/session/callbacks.rb +53 -30
- data/lib/authlogic/session/cookies.rb +57 -16
- data/lib/authlogic/session/existence.rb +21 -11
- data/lib/authlogic/session/foundation.rb +56 -10
- data/lib/authlogic/session/http_auth.rb +15 -8
- data/lib/authlogic/session/klass.rb +7 -5
- data/lib/authlogic/session/magic_columns.rb +24 -11
- data/lib/authlogic/session/magic_states.rb +11 -4
- data/lib/authlogic/session/params.rb +6 -2
- data/lib/authlogic/session/password.rb +46 -73
- data/lib/authlogic/session/persistence.rb +11 -7
- data/lib/authlogic/session/priority_record.rb +7 -4
- data/lib/authlogic/session/scopes.rb +15 -6
- data/lib/authlogic/session/session.rb +20 -10
- data/lib/authlogic/session/timeout.rb +2 -2
- data/lib/authlogic/session/unauthorized_record.rb +1 -1
- data/lib/authlogic/session/validation.rb +1 -1
- data/lib/authlogic/test_case.rb +65 -2
- data/lib/authlogic/test_case/mock_controller.rb +5 -4
- data/lib/authlogic/test_case/mock_cookie_jar.rb +11 -2
- data/lib/authlogic/test_case/mock_request.rb +5 -1
- data/lib/authlogic/test_case/rails_request_adapter.rb +3 -2
- data/lib/authlogic/version.rb +16 -0
- data/test/acts_as_authentic_test/email_test.rb +33 -34
- data/test/acts_as_authentic_test/logged_in_status_test.rb +1 -1
- data/test/acts_as_authentic_test/login_test.rb +73 -78
- data/test/acts_as_authentic_test/password_test.rb +30 -18
- data/test/acts_as_authentic_test/perishable_token_test.rb +9 -3
- data/test/acts_as_authentic_test/persistence_token_test.rb +4 -0
- data/test/acts_as_authentic_test/session_maintenance_test.rb +66 -14
- data/test/adapter_test.rb +21 -0
- data/test/gemfiles/Gemfile.rails-4.2.x +2 -2
- data/test/gemfiles/Gemfile.rails-5.0.x +2 -2
- data/test/gemfiles/Gemfile.rails-master +6 -0
- data/test/i18n_test.rb +1 -1
- data/test/libs/company.rb +2 -2
- data/test/random_test.rb +7 -37
- data/test/session_test/active_record_trickery_test.rb +4 -3
- data/test/session_test/brute_force_protection_test.rb +8 -8
- data/test/session_test/callbacks_test.rb +1 -1
- data/test/session_test/cookies_test.rb +27 -4
- data/test/session_test/existence_test.rb +15 -4
- data/test/session_test/foundation_test.rb +16 -0
- data/test/session_test/http_auth_test.rb +3 -1
- data/test/session_test/magic_columns_test.rb +10 -12
- data/test/session_test/params_test.rb +4 -1
- data/test/session_test/password_test.rb +7 -7
- data/test/session_test/persistence_test.rb +1 -0
- data/test/session_test/scopes_test.rb +7 -7
- data/test/session_test/session_test.rb +2 -2
- data/test/session_test/timeout_test.rb +1 -1
- data/test/session_test/unauthorized_record_test.rb +1 -1
- data/test/test_helper.rb +111 -103
- metadata +68 -64
- data/test/gemfiles/Gemfile.rails-3.2.x +0 -7
- data/test/gemfiles/Gemfile.rails-4.0.x +0 -7
- data/test/gemfiles/Gemfile.rails-4.1.x +0 -7
@@ -2,7 +2,7 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
module ActsAsAuthenticTest
|
4
4
|
class LoggedInStatusTest < ActiveSupport::TestCase
|
5
|
-
ERROR_MSG = 'Multiple calls to %s should result in different relations'
|
5
|
+
ERROR_MSG = 'Multiple calls to %s should result in different relations'.freeze
|
6
6
|
|
7
7
|
def test_logged_in_timeout_config
|
8
8
|
assert_equal 10.minutes.to_i, User.logged_in_timeout
|
@@ -1,44 +1,43 @@
|
|
1
1
|
require 'test_helper'
|
2
2
|
|
3
3
|
module ActsAsAuthenticTest
|
4
|
-
|
5
|
-
|
6
|
-
|
7
|
-
|
8
|
-
|
9
|
-
|
10
|
-
|
11
|
-
|
12
|
-
|
13
|
-
|
14
|
-
|
15
|
-
|
16
|
-
|
17
|
-
|
18
|
-
|
19
|
-
User.validate_login_field = false
|
20
|
-
refute User.validate_login_field
|
21
|
-
User.validate_login_field true
|
22
|
-
assert User.validate_login_field
|
4
|
+
# Tests for configuration option: `validates_format_of_login_field_options`
|
5
|
+
class ValidatesFormatOfLoginTest < ActiveSupport::TestCase
|
6
|
+
def test_invalid_format
|
7
|
+
[
|
8
|
+
"fdsf@^&*",
|
9
|
+
" space",
|
10
|
+
".dot",
|
11
|
+
"-hyphen",
|
12
|
+
"@atmark",
|
13
|
+
"+plus"
|
14
|
+
].each do |login|
|
15
|
+
u = User.new(login: login)
|
16
|
+
refute u.valid?
|
17
|
+
refute u.errors[:login].empty?
|
18
|
+
end
|
23
19
|
end
|
24
20
|
|
25
|
-
def
|
26
|
-
|
27
|
-
|
28
|
-
|
29
|
-
|
30
|
-
|
31
|
-
|
32
|
-
|
21
|
+
def test_valid_format
|
22
|
+
[
|
23
|
+
"fdsfdsfdsfdsfs",
|
24
|
+
"dakota.dux+1@gmail.com",
|
25
|
+
"marks .-_@+",
|
26
|
+
"_underscore"
|
27
|
+
].each do |login|
|
28
|
+
u = User.new(login: login)
|
29
|
+
refute u.valid?
|
30
|
+
assert u.errors[:login].empty?
|
31
|
+
end
|
33
32
|
end
|
34
33
|
|
35
34
|
def test_validates_format_of_login_field_options_config
|
36
35
|
default = {
|
37
|
-
:
|
38
|
-
:
|
36
|
+
with: /\A[a-zA-Z0-9_][a-zA-Z0-9\.+\-_@ ]+\z/,
|
37
|
+
message: proc do
|
39
38
|
I18n.t(
|
40
39
|
'error_messages.login_invalid',
|
41
|
-
:
|
40
|
+
default: "should use only letters, numbers, spaces, and .-_@+ please."
|
42
41
|
)
|
43
42
|
end
|
44
43
|
}
|
@@ -56,18 +55,57 @@ module ActsAsAuthenticTest
|
|
56
55
|
assert_equal default_message, message.call
|
57
56
|
assert_equal default, options
|
58
57
|
|
59
|
-
User.validates_format_of_login_field_options = { :
|
60
|
-
assert_equal({ :
|
58
|
+
User.validates_format_of_login_field_options = { yes: "no" }
|
59
|
+
assert_equal({ yes: "no" }, User.validates_format_of_login_field_options)
|
61
60
|
User.validates_format_of_login_field_options default
|
62
61
|
assert_equal default, User.validates_format_of_login_field_options
|
63
62
|
end
|
63
|
+
end
|
64
|
+
|
65
|
+
# Miscellaneous tests for configuration options related to the `login_field`.
|
66
|
+
# Feel free to organize these into separate `TestCase`s as we have done above
|
67
|
+
# with `ValidatesFormatOfLoginTest`.
|
68
|
+
class MiscellaneousLoginTest < ActiveSupport::TestCase
|
69
|
+
def test_login_field_config
|
70
|
+
assert_equal :login, User.login_field
|
71
|
+
assert_nil Employee.login_field
|
72
|
+
|
73
|
+
User.login_field = :nope
|
74
|
+
assert_equal :nope, User.login_field
|
75
|
+
User.login_field :login
|
76
|
+
assert_equal :login, User.login_field
|
77
|
+
end
|
78
|
+
|
79
|
+
def test_validate_login_field_config
|
80
|
+
assert User.validate_login_field
|
81
|
+
assert Employee.validate_login_field
|
82
|
+
|
83
|
+
User.validate_login_field = false
|
84
|
+
refute User.validate_login_field
|
85
|
+
User.validate_login_field true
|
86
|
+
assert User.validate_login_field
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_validates_length_of_login_field_options_config
|
90
|
+
assert_equal({ within: 3..100 }, User.validates_length_of_login_field_options)
|
91
|
+
assert_equal({ within: 3..100 }, Employee.validates_length_of_login_field_options)
|
92
|
+
|
93
|
+
User.validates_length_of_login_field_options = { yes: "no" }
|
94
|
+
assert_equal({ yes: "no" }, User.validates_length_of_login_field_options)
|
95
|
+
User.validates_length_of_login_field_options(within: 3..100)
|
96
|
+
assert_equal({ within: 3..100 }, User.validates_length_of_login_field_options)
|
97
|
+
end
|
64
98
|
|
65
99
|
def test_validates_uniqueness_of_login_field_options_config
|
66
|
-
default = {
|
100
|
+
default = {
|
101
|
+
case_sensitive: false,
|
102
|
+
scope: User.validations_scope,
|
103
|
+
if: "#{User.login_field}_changed?".to_sym
|
104
|
+
}
|
67
105
|
assert_equal default, User.validates_uniqueness_of_login_field_options
|
68
106
|
|
69
|
-
User.validates_uniqueness_of_login_field_options = { :
|
70
|
-
assert_equal({ :
|
107
|
+
User.validates_uniqueness_of_login_field_options = { yes: "no" }
|
108
|
+
assert_equal({ yes: "no" }, User.validates_uniqueness_of_login_field_options)
|
71
109
|
User.validates_uniqueness_of_login_field_options default
|
72
110
|
assert_equal default, User.validates_uniqueness_of_login_field_options
|
73
111
|
end
|
@@ -83,49 +121,6 @@ module ActsAsAuthenticTest
|
|
83
121
|
assert u.errors[:login].empty?
|
84
122
|
end
|
85
123
|
|
86
|
-
def test_validates_format_of_login_field
|
87
|
-
u = User.new
|
88
|
-
u.login = "fdsf@^&*"
|
89
|
-
refute u.valid?
|
90
|
-
refute u.errors[:login].empty?
|
91
|
-
|
92
|
-
u.login = "fdsfdsfdsfdsfs"
|
93
|
-
refute u.valid?
|
94
|
-
assert u.errors[:login].empty?
|
95
|
-
|
96
|
-
u.login = "dakota.dux+1@gmail.com"
|
97
|
-
refute u.valid?
|
98
|
-
assert u.errors[:login].empty?
|
99
|
-
|
100
|
-
u.login = "marks .-_@+"
|
101
|
-
refute u.valid?
|
102
|
-
assert u.errors[:login].empty?
|
103
|
-
|
104
|
-
u.login = " space"
|
105
|
-
refute u.valid?
|
106
|
-
refute u.errors[:login].empty?
|
107
|
-
|
108
|
-
u.login = ".dot"
|
109
|
-
refute u.valid?
|
110
|
-
refute u.errors[:login].empty?
|
111
|
-
|
112
|
-
u.login = "-hyphen"
|
113
|
-
refute u.valid?
|
114
|
-
refute u.errors[:login].empty?
|
115
|
-
|
116
|
-
u.login = "_underscore"
|
117
|
-
refute u.valid?
|
118
|
-
assert u.errors[:login].empty?
|
119
|
-
|
120
|
-
u.login = "@atmark"
|
121
|
-
refute u.valid?
|
122
|
-
refute u.errors[:login].empty?
|
123
|
-
|
124
|
-
u.login = "+plus"
|
125
|
-
refute u.valid?
|
126
|
-
refute u.errors[:login].empty?
|
127
|
-
end
|
128
|
-
|
129
124
|
def test_validates_uniqueness_of_login_field
|
130
125
|
u = User.new
|
131
126
|
u.login = "bjohnson"
|
@@ -2,7 +2,9 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
module ActsAsAuthenticTest
|
4
4
|
class PasswordTest < ActiveSupport::TestCase
|
5
|
-
|
5
|
+
# If test_human_name is executed after test_i18n_of_human_name the test will fail.
|
6
|
+
i_suck_and_my_tests_are_order_dependent!
|
7
|
+
|
6
8
|
def test_crypted_password_field_config
|
7
9
|
assert_equal :crypted_password, User.crypted_password_field
|
8
10
|
assert_equal :crypted_password, Employee.crypted_password_field
|
@@ -52,34 +54,34 @@ module ActsAsAuthenticTest
|
|
52
54
|
end
|
53
55
|
|
54
56
|
def test_validates_length_of_password_field_options_config
|
55
|
-
default = { :
|
57
|
+
default = { minimum: 8, if: :require_password? }
|
56
58
|
assert_equal default, User.validates_length_of_password_field_options
|
57
59
|
assert_equal default, Employee.validates_length_of_password_field_options
|
58
60
|
|
59
|
-
User.validates_length_of_password_field_options = { :
|
60
|
-
assert_equal({ :
|
61
|
+
User.validates_length_of_password_field_options = { yes: "no" }
|
62
|
+
assert_equal({ yes: "no" }, User.validates_length_of_password_field_options)
|
61
63
|
User.validates_length_of_password_field_options default
|
62
64
|
assert_equal default, User.validates_length_of_password_field_options
|
63
65
|
end
|
64
66
|
|
65
67
|
def test_validates_confirmation_of_password_field_options_config
|
66
|
-
default = { :
|
68
|
+
default = { if: :require_password? }
|
67
69
|
assert_equal default, User.validates_confirmation_of_password_field_options
|
68
70
|
assert_equal default, Employee.validates_confirmation_of_password_field_options
|
69
71
|
|
70
|
-
User.validates_confirmation_of_password_field_options = { :
|
71
|
-
assert_equal({ :
|
72
|
+
User.validates_confirmation_of_password_field_options = { yes: "no" }
|
73
|
+
assert_equal({ yes: "no" }, User.validates_confirmation_of_password_field_options)
|
72
74
|
User.validates_confirmation_of_password_field_options default
|
73
75
|
assert_equal default, User.validates_confirmation_of_password_field_options
|
74
76
|
end
|
75
77
|
|
76
78
|
def test_validates_length_of_password_confirmation_field_options_config
|
77
|
-
default = { :
|
79
|
+
default = { minimum: 8, if: :require_password? }
|
78
80
|
assert_equal default, User.validates_length_of_password_confirmation_field_options
|
79
81
|
assert_equal default, Employee.validates_length_of_password_confirmation_field_options
|
80
82
|
|
81
|
-
User.validates_length_of_password_confirmation_field_options = { :
|
82
|
-
assert_equal({ :
|
83
|
+
User.validates_length_of_password_confirmation_field_options = { yes: "no" }
|
84
|
+
assert_equal({ yes: "no" }, User.validates_length_of_password_confirmation_field_options)
|
83
85
|
User.validates_length_of_password_confirmation_field_options default
|
84
86
|
assert_equal default, User.validates_length_of_password_confirmation_field_options
|
85
87
|
end
|
@@ -105,7 +107,12 @@ module ActsAsAuthenticTest
|
|
105
107
|
end
|
106
108
|
|
107
109
|
def test_validates_length_of_password
|
108
|
-
u = User.new(
|
110
|
+
u = User.new(
|
111
|
+
login: "abcde",
|
112
|
+
email: "abcde@test.com",
|
113
|
+
password: "abcdefgh",
|
114
|
+
password_confirmation: "abcdefgh"
|
115
|
+
)
|
109
116
|
assert u.valid?
|
110
117
|
|
111
118
|
u.password = u.password_confirmation = "abcdef"
|
@@ -116,17 +123,18 @@ module ActsAsAuthenticTest
|
|
116
123
|
end
|
117
124
|
|
118
125
|
def test_validates_confirmation_of_password
|
119
|
-
u = User.new(
|
126
|
+
u = User.new(
|
127
|
+
login: "abcde",
|
128
|
+
email: "abcde@test.com",
|
129
|
+
password: "abcdefgh",
|
130
|
+
password_confirmation: "abcdefgh"
|
131
|
+
)
|
120
132
|
assert u.valid?
|
121
133
|
|
122
134
|
u.password_confirmation = "abcdefghij"
|
123
135
|
refute u.valid?
|
124
136
|
|
125
|
-
|
126
|
-
assert u.errors[:password_confirmation].include?("doesn't match Password")
|
127
|
-
else
|
128
|
-
assert u.errors[:password].include?("doesn't match confirmation")
|
129
|
-
end
|
137
|
+
assert u.errors[:password_confirmation].include?("doesn't match Password")
|
130
138
|
end
|
131
139
|
|
132
140
|
def test_validates_length_of_password_confirmation
|
@@ -225,7 +233,11 @@ module ActsAsAuthenticTest
|
|
225
233
|
|
226
234
|
private
|
227
235
|
|
228
|
-
def transition_password_to(
|
236
|
+
def transition_password_to(
|
237
|
+
crypto_provider,
|
238
|
+
records,
|
239
|
+
from_crypto_providers = Authlogic::CryptoProviders::Sha512
|
240
|
+
)
|
229
241
|
records = [records] unless records.is_a?(Array)
|
230
242
|
User.acts_as_authentic do |c|
|
231
243
|
c.crypto_provider = crypto_provider
|
@@ -60,14 +60,18 @@ module ActsAsAuthenticTest
|
|
60
60
|
|
61
61
|
def test_find_using_perishable_token_when_perished
|
62
62
|
ben = users(:ben)
|
63
|
-
ActiveRecord::Base.connection.execute(
|
63
|
+
ActiveRecord::Base.connection.execute(
|
64
|
+
"UPDATE users set updated_at = '#{1.week.ago.to_s(:db)}' where id = #{ben.id}"
|
65
|
+
)
|
64
66
|
assert_nil User.find_using_perishable_token(ben.perishable_token)
|
65
67
|
end
|
66
68
|
|
67
69
|
def test_find_using_perishable_token_when_perished_2
|
68
70
|
User.perishable_token_valid_for = 1.minute
|
69
71
|
ben = users(:ben)
|
70
|
-
ActiveRecord::Base.connection.execute(
|
72
|
+
ActiveRecord::Base.connection.execute(
|
73
|
+
"UPDATE users set updated_at = '#{2.minutes.ago.to_s(:db)}' where id = #{ben.id}"
|
74
|
+
)
|
71
75
|
assert_nil User.find_using_perishable_token(ben.perishable_token)
|
72
76
|
User.perishable_token_valid_for = 10.minutes
|
73
77
|
end
|
@@ -75,7 +79,9 @@ module ActsAsAuthenticTest
|
|
75
79
|
def test_find_using_perishable_token_when_passing_threshold
|
76
80
|
User.perishable_token_valid_for = 1.minute
|
77
81
|
ben = users(:ben)
|
78
|
-
ActiveRecord::Base.connection.execute(
|
82
|
+
ActiveRecord::Base.connection.execute(
|
83
|
+
"UPDATE users set updated_at = '#{10.minutes.ago.to_s(:db)}' where id = #{ben.id}"
|
84
|
+
)
|
79
85
|
assert_nil User.find_using_perishable_token(ben.perishable_token, 5.minutes)
|
80
86
|
assert_equal ben, User.find_using_perishable_token(ben.perishable_token, 20.minutes)
|
81
87
|
User.perishable_token_valid_for = 10.minutes
|
@@ -29,6 +29,8 @@ module ActsAsAuthenticTest
|
|
29
29
|
end
|
30
30
|
|
31
31
|
def test_forget_all
|
32
|
+
UserSession.allow_http_basic_auth = true
|
33
|
+
|
32
34
|
http_basic_auth_for(users(:ben)) { UserSession.find }
|
33
35
|
http_basic_auth_for(users(:zack)) { UserSession.find(:ziggity_zack) }
|
34
36
|
assert UserSession.find
|
@@ -39,6 +41,8 @@ module ActsAsAuthenticTest
|
|
39
41
|
end
|
40
42
|
|
41
43
|
def test_forget
|
44
|
+
UserSession.allow_http_basic_auth = true
|
45
|
+
|
42
46
|
ben = users(:ben)
|
43
47
|
zack = users(:zack)
|
44
48
|
http_basic_auth_for(ben) { UserSession.find }
|
@@ -2,23 +2,59 @@ require 'test_helper'
|
|
2
2
|
|
3
3
|
module ActsAsAuthenticTest
|
4
4
|
class SessionMaintenanceTest < ActiveSupport::TestCase
|
5
|
-
def
|
6
|
-
|
7
|
-
User.
|
8
|
-
|
9
|
-
|
10
|
-
|
5
|
+
def setup
|
6
|
+
User.log_in_after_create = true
|
7
|
+
User.log_in_after_password_change = true
|
8
|
+
end
|
9
|
+
|
10
|
+
def test_log_in_after_create_config
|
11
|
+
assert User.log_in_after_create
|
12
|
+
User.log_in_after_create = false
|
13
|
+
refute User.log_in_after_create
|
14
|
+
User.log_in_after_create = true
|
15
|
+
assert User.log_in_after_create
|
16
|
+
end
|
17
|
+
|
18
|
+
def test_log_in_after_password_change_config
|
19
|
+
assert User.log_in_after_password_change
|
20
|
+
User.log_in_after_password_change = false
|
21
|
+
refute User.log_in_after_password_change
|
22
|
+
User.log_in_after_password_change = true
|
23
|
+
assert User.log_in_after_password_change
|
11
24
|
end
|
12
25
|
|
13
26
|
def test_login_after_create
|
27
|
+
User.log_in_after_create = true
|
14
28
|
user = User.create(
|
15
|
-
:
|
16
|
-
:
|
17
|
-
:
|
18
|
-
:
|
29
|
+
login: "awesome",
|
30
|
+
password: "saweeeet",
|
31
|
+
password_confirmation: "saweeeet",
|
32
|
+
email: "awesome@awesome.com"
|
19
33
|
)
|
20
34
|
assert user.persisted?
|
21
35
|
assert UserSession.find
|
36
|
+
logged_in_user = UserSession.find.user
|
37
|
+
assert_equal logged_in_user, user
|
38
|
+
end
|
39
|
+
|
40
|
+
def test_no_login_after_create
|
41
|
+
old_user = User.create(
|
42
|
+
login: "awesome",
|
43
|
+
password: "saweeeet",
|
44
|
+
password_confirmation: "saweeeet",
|
45
|
+
email: "awesome@awesome.com"
|
46
|
+
)
|
47
|
+
User.log_in_after_create = false
|
48
|
+
user2 = User.create(
|
49
|
+
login: "awesome2",
|
50
|
+
password: "saweeeet2",
|
51
|
+
password_confirmation: "saweeeet2",
|
52
|
+
email: "awesome2@awesome.com"
|
53
|
+
)
|
54
|
+
assert user2.persisted?
|
55
|
+
logged_in_user = UserSession.find.user
|
56
|
+
assert_not_equal logged_in_user, user2
|
57
|
+
assert_equal logged_in_user, old_user
|
22
58
|
end
|
23
59
|
|
24
60
|
def test_updating_session_with_failed_magic_state
|
@@ -30,6 +66,7 @@ module ActsAsAuthenticTest
|
|
30
66
|
end
|
31
67
|
|
32
68
|
def test_update_session_after_password_modify
|
69
|
+
User.log_in_after_password_change = true
|
33
70
|
ben = users(:ben)
|
34
71
|
UserSession.create(ben)
|
35
72
|
old_session_key = controller.session["user_credentials"]
|
@@ -43,6 +80,21 @@ module ActsAsAuthenticTest
|
|
43
80
|
assert_not_equal controller.cookies["user_credentials"], old_cookie_key
|
44
81
|
end
|
45
82
|
|
83
|
+
def test_no_update_session_after_password_modify
|
84
|
+
User.log_in_after_password_change = false
|
85
|
+
ben = users(:ben)
|
86
|
+
UserSession.create(ben)
|
87
|
+
old_session_key = controller.session["user_credentials"]
|
88
|
+
old_cookie_key = controller.cookies["user_credentials"]
|
89
|
+
ben.password = "newpasswd"
|
90
|
+
ben.password_confirmation = "newpasswd"
|
91
|
+
assert ben.save
|
92
|
+
assert controller.session["user_credentials"]
|
93
|
+
assert controller.cookies["user_credentials"]
|
94
|
+
assert_equal controller.session["user_credentials"], old_session_key
|
95
|
+
assert_equal controller.cookies["user_credentials"], old_cookie_key
|
96
|
+
end
|
97
|
+
|
46
98
|
def test_no_session_update_after_modify
|
47
99
|
ben = users(:ben)
|
48
100
|
UserSession.create(ben)
|
@@ -60,10 +112,10 @@ module ActsAsAuthenticTest
|
|
60
112
|
old_session_key = controller.session["user_credentials"]
|
61
113
|
old_cookie_key = controller.cookies["user_credentials"]
|
62
114
|
user = User.create(
|
63
|
-
:
|
64
|
-
:
|
65
|
-
:
|
66
|
-
:
|
115
|
+
login: "awesome",
|
116
|
+
password: "saweet", # Password is too short, user invalid
|
117
|
+
password_confirmation: "saweet",
|
118
|
+
email: "awesome@saweet.com"
|
67
119
|
)
|
68
120
|
refute user.persisted?
|
69
121
|
assert_equal controller.session["user_credentials"], old_session_key
|