nulogy-authlogic 3.1.0.1

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.
Files changed (129) hide show
  1. data/Gemfile +3 -0
  2. data/Gemfile.lock +62 -0
  3. data/LICENSE +20 -0
  4. data/README.rdoc +250 -0
  5. data/Rakefile +50 -0
  6. data/VERSION.yml +5 -0
  7. data/authlogic.gemspec +192 -0
  8. data/generators/session/session_generator.rb +9 -0
  9. data/generators/session/templates/session.rb +2 -0
  10. data/init.rb +1 -0
  11. data/lib/authlogic.rb +64 -0
  12. data/lib/authlogic/acts_as_authentic/base.rb +109 -0
  13. data/lib/authlogic/acts_as_authentic/email.rb +110 -0
  14. data/lib/authlogic/acts_as_authentic/logged_in_status.rb +59 -0
  15. data/lib/authlogic/acts_as_authentic/login.rb +142 -0
  16. data/lib/authlogic/acts_as_authentic/magic_columns.rb +24 -0
  17. data/lib/authlogic/acts_as_authentic/password.rb +355 -0
  18. data/lib/authlogic/acts_as_authentic/perishable_token.rb +105 -0
  19. data/lib/authlogic/acts_as_authentic/persistence_token.rb +68 -0
  20. data/lib/authlogic/acts_as_authentic/restful_authentication.rb +61 -0
  21. data/lib/authlogic/acts_as_authentic/session_maintenance.rb +139 -0
  22. data/lib/authlogic/acts_as_authentic/single_access_token.rb +65 -0
  23. data/lib/authlogic/acts_as_authentic/validations_scope.rb +32 -0
  24. data/lib/authlogic/authenticates_many/association.rb +42 -0
  25. data/lib/authlogic/authenticates_many/base.rb +54 -0
  26. data/lib/authlogic/controller_adapters/abstract_adapter.rb +67 -0
  27. data/lib/authlogic/controller_adapters/merb_adapter.rb +30 -0
  28. data/lib/authlogic/controller_adapters/rails_adapter.rb +50 -0
  29. data/lib/authlogic/controller_adapters/sinatra_adapter.rb +61 -0
  30. data/lib/authlogic/crypto_providers/aes256.rb +43 -0
  31. data/lib/authlogic/crypto_providers/bcrypt.rb +90 -0
  32. data/lib/authlogic/crypto_providers/md5.rb +34 -0
  33. data/lib/authlogic/crypto_providers/sha1.rb +35 -0
  34. data/lib/authlogic/crypto_providers/sha256.rb +50 -0
  35. data/lib/authlogic/crypto_providers/sha512.rb +50 -0
  36. data/lib/authlogic/crypto_providers/wordpress.rb +43 -0
  37. data/lib/authlogic/i18n.rb +84 -0
  38. data/lib/authlogic/i18n/translator.rb +15 -0
  39. data/lib/authlogic/random.rb +33 -0
  40. data/lib/authlogic/regex.rb +25 -0
  41. data/lib/authlogic/session/activation.rb +58 -0
  42. data/lib/authlogic/session/active_record_trickery.rb +72 -0
  43. data/lib/authlogic/session/base.rb +37 -0
  44. data/lib/authlogic/session/brute_force_protection.rb +96 -0
  45. data/lib/authlogic/session/callbacks.rb +96 -0
  46. data/lib/authlogic/session/cookies.rb +182 -0
  47. data/lib/authlogic/session/existence.rb +93 -0
  48. data/lib/authlogic/session/foundation.rb +77 -0
  49. data/lib/authlogic/session/http_auth.rb +99 -0
  50. data/lib/authlogic/session/id.rb +41 -0
  51. data/lib/authlogic/session/klass.rb +69 -0
  52. data/lib/authlogic/session/magic_columns.rb +95 -0
  53. data/lib/authlogic/session/magic_states.rb +59 -0
  54. data/lib/authlogic/session/params.rb +101 -0
  55. data/lib/authlogic/session/password.rb +240 -0
  56. data/lib/authlogic/session/perishable_token.rb +18 -0
  57. data/lib/authlogic/session/persistence.rb +70 -0
  58. data/lib/authlogic/session/priority_record.rb +34 -0
  59. data/lib/authlogic/session/scopes.rb +101 -0
  60. data/lib/authlogic/session/session.rb +62 -0
  61. data/lib/authlogic/session/timeout.rb +82 -0
  62. data/lib/authlogic/session/unauthorized_record.rb +50 -0
  63. data/lib/authlogic/session/validation.rb +82 -0
  64. data/lib/authlogic/test_case.rb +120 -0
  65. data/lib/authlogic/test_case/mock_controller.rb +55 -0
  66. data/lib/authlogic/test_case/mock_cookie_jar.rb +14 -0
  67. data/lib/authlogic/test_case/mock_logger.rb +10 -0
  68. data/lib/authlogic/test_case/mock_request.rb +19 -0
  69. data/lib/authlogic/test_case/rails_request_adapter.rb +30 -0
  70. data/lib/generators/authlogic/USAGE +8 -0
  71. data/lib/generators/authlogic/session_generator.rb +14 -0
  72. data/lib/generators/authlogic/templates/session.rb +2 -0
  73. data/rails/init.rb +1 -0
  74. data/shoulda_macros/authlogic.rb +69 -0
  75. data/test/acts_as_authentic_test/base_test.rb +18 -0
  76. data/test/acts_as_authentic_test/email_test.rb +116 -0
  77. data/test/acts_as_authentic_test/logged_in_status_test.rb +50 -0
  78. data/test/acts_as_authentic_test/login_test.rb +116 -0
  79. data/test/acts_as_authentic_test/magic_columns_test.rb +27 -0
  80. data/test/acts_as_authentic_test/password_test.rb +236 -0
  81. data/test/acts_as_authentic_test/perishable_token_test.rb +90 -0
  82. data/test/acts_as_authentic_test/persistence_token_test.rb +55 -0
  83. data/test/acts_as_authentic_test/restful_authentication_test.rb +40 -0
  84. data/test/acts_as_authentic_test/session_maintenance_test.rb +84 -0
  85. data/test/acts_as_authentic_test/single_access_test.rb +44 -0
  86. data/test/authenticates_many_test.rb +16 -0
  87. data/test/crypto_provider_test/aes256_test.rb +14 -0
  88. data/test/crypto_provider_test/bcrypt_test.rb +14 -0
  89. data/test/crypto_provider_test/sha1_test.rb +23 -0
  90. data/test/crypto_provider_test/sha256_test.rb +14 -0
  91. data/test/crypto_provider_test/sha512_test.rb +14 -0
  92. data/test/fixtures/companies.yml +5 -0
  93. data/test/fixtures/employees.yml +17 -0
  94. data/test/fixtures/projects.yml +3 -0
  95. data/test/fixtures/users.yml +24 -0
  96. data/test/i18n_test.rb +33 -0
  97. data/test/libs/affiliate.rb +7 -0
  98. data/test/libs/company.rb +6 -0
  99. data/test/libs/employee.rb +7 -0
  100. data/test/libs/employee_session.rb +2 -0
  101. data/test/libs/ldaper.rb +3 -0
  102. data/test/libs/ordered_hash.rb +9 -0
  103. data/test/libs/project.rb +3 -0
  104. data/test/libs/user.rb +5 -0
  105. data/test/libs/user_session.rb +5 -0
  106. data/test/random_test.rb +42 -0
  107. data/test/session_test/activation_test.rb +43 -0
  108. data/test/session_test/active_record_trickery_test.rb +46 -0
  109. data/test/session_test/brute_force_protection_test.rb +101 -0
  110. data/test/session_test/callbacks_test.rb +54 -0
  111. data/test/session_test/cookies_test.rb +136 -0
  112. data/test/session_test/credentials_test.rb +0 -0
  113. data/test/session_test/existence_test.rb +64 -0
  114. data/test/session_test/http_auth_test.rb +57 -0
  115. data/test/session_test/id_test.rb +17 -0
  116. data/test/session_test/klass_test.rb +40 -0
  117. data/test/session_test/magic_columns_test.rb +62 -0
  118. data/test/session_test/magic_states_test.rb +60 -0
  119. data/test/session_test/params_test.rb +53 -0
  120. data/test/session_test/password_test.rb +106 -0
  121. data/test/session_test/perishability_test.rb +15 -0
  122. data/test/session_test/persistence_test.rb +21 -0
  123. data/test/session_test/scopes_test.rb +60 -0
  124. data/test/session_test/session_test.rb +59 -0
  125. data/test/session_test/timeout_test.rb +52 -0
  126. data/test/session_test/unauthorized_record_test.rb +13 -0
  127. data/test/session_test/validation_test.rb +23 -0
  128. data/test/test_helper.rb +168 -0
  129. metadata +252 -0
@@ -0,0 +1,46 @@
1
+ require 'test_helper'
2
+
3
+ module SessionTest
4
+ module ActiveRecordTrickeryTest
5
+ class ClassMethodsTest < ActiveSupport::TestCase
6
+ def test_human_attribute_name
7
+ assert_equal "Some attribute", UserSession.human_attribute_name("some_attribute")
8
+ assert_equal "Some attribute", UserSession.human_attribute_name(:some_attribute)
9
+ end
10
+
11
+ def test_human_name
12
+ assert_equal "Usersession", UserSession.human_name
13
+ end
14
+
15
+ def test_self_and_descendents_from_active_record
16
+ assert_equal [UserSession], UserSession.self_and_descendents_from_active_record
17
+ end
18
+
19
+ def test_self_and_descendants_from_active_record
20
+ assert_equal [UserSession], UserSession.self_and_descendants_from_active_record
21
+ end
22
+
23
+ def test_i18n_of_human_name
24
+ I18n.backend.store_translations 'en', :authlogic => {:models => {:user_session => "MySession" } }
25
+ assert_equal "MySession", UserSession.human_name
26
+ end
27
+
28
+ def test_i18n_of_model_name_human
29
+ I18n.backend.store_translations 'en', :authlogic => {:models => {:user_session => "MySession" } }
30
+ assert_equal "MySession", UserSession.model_name.human
31
+ end
32
+ end
33
+
34
+ class InstanceMethodsTest < ActiveSupport::TestCase
35
+ def test_new_record
36
+ session = UserSession.new
37
+ assert session.new_record?
38
+ end
39
+
40
+ def test_to_model
41
+ session = UserSession.new
42
+ assert_equal session, session.to_model
43
+ end
44
+ end
45
+ end
46
+ end
@@ -0,0 +1,101 @@
1
+ require 'test_helper'
2
+
3
+ module SessionTest
4
+ module BruteForceProtectionTest
5
+ class ConfigTest < ActiveSupport::TestCase
6
+ def test_consecutive_failed_logins_limit
7
+ UserSession.consecutive_failed_logins_limit = 10
8
+ assert_equal 10, UserSession.consecutive_failed_logins_limit
9
+
10
+ UserSession.consecutive_failed_logins_limit 50
11
+ assert_equal 50, UserSession.consecutive_failed_logins_limit
12
+ end
13
+
14
+ def test_failed_login_ban_for
15
+ UserSession.failed_login_ban_for = 10
16
+ assert_equal 10, UserSession.failed_login_ban_for
17
+
18
+ UserSession.failed_login_ban_for 2.hours
19
+ assert_equal 2.hours.to_i, UserSession.failed_login_ban_for
20
+ end
21
+ end
22
+
23
+ class InstaceMethodsTest < ActiveSupport::TestCase
24
+ def test_under_limit
25
+ ben = users(:ben)
26
+ ben.failed_login_count = UserSession.consecutive_failed_logins_limit - 1
27
+ assert ben.save
28
+ assert UserSession.create(:login => ben.login, :password => "benrocks")
29
+ end
30
+
31
+ def test_exceeded_limit
32
+ ben = users(:ben)
33
+ ben.failed_login_count = UserSession.consecutive_failed_logins_limit
34
+ assert ben.save
35
+ assert UserSession.create(:login => ben.login, :password => "benrocks").new_session?
36
+ assert UserSession.create(ben).new_session?
37
+ ben.updated_at = (UserSession.failed_login_ban_for + 2.hours.to_i).seconds.ago
38
+ assert !UserSession.create(ben).new_session?
39
+ end
40
+
41
+ def test_exceeding_failed_logins_limit
42
+ UserSession.consecutive_failed_logins_limit = 2
43
+ ben = users(:ben)
44
+
45
+ 2.times do |i|
46
+ session = UserSession.new(:login => ben.login, :password => "badpassword1")
47
+ assert !session.save
48
+ assert session.errors[:password].size > 0
49
+ assert_equal i + 1, ben.reload.failed_login_count
50
+ end
51
+
52
+ session = UserSession.new(:login => ben.login, :password => "badpassword2")
53
+ assert !session.save
54
+ assert session.errors[:password].size == 0
55
+ assert_equal 3, ben.reload.failed_login_count
56
+
57
+ UserSession.consecutive_failed_logins_limit = 50
58
+ end
59
+
60
+ def test_exceeded_ban_for
61
+ UserSession.consecutive_failed_logins_limit = 2
62
+ UserSession.generalize_credentials_error_messages true
63
+ ben = users(:ben)
64
+
65
+ 2.times do |i|
66
+ session = UserSession.new(:login => ben.login, :password => "badpassword1")
67
+ assert !session.save
68
+ assert session.invalid_password?
69
+ assert_equal i + 1, ben.reload.failed_login_count
70
+ end
71
+
72
+ ActiveRecord::Base.connection.execute("update users set updated_at = '#{1.day.ago.to_s(:db)}' where login = '#{ben.login}'")
73
+ session = UserSession.new(:login => ben.login, :password => "benrocks")
74
+ assert session.save
75
+ assert_equal 0, ben.reload.failed_login_count
76
+
77
+ UserSession.consecutive_failed_logins_limit = 50
78
+ UserSession.generalize_credentials_error_messages false
79
+ end
80
+
81
+ def test_exceeded_ban_and_failed_doesnt_ban_again
82
+ UserSession.consecutive_failed_logins_limit = 2
83
+ ben = users(:ben)
84
+
85
+ 2.times do |i|
86
+ session = UserSession.new(:login => ben.login, :password => "badpassword1")
87
+ assert !session.save
88
+ assert session.errors[:password].size > 0
89
+ assert_equal i + 1, ben.reload.failed_login_count
90
+ end
91
+
92
+ ActiveRecord::Base.connection.execute("update users set updated_at = '#{1.day.ago.to_s(:db)}' where login = '#{ben.login}'")
93
+ session = UserSession.new(:login => ben.login, :password => "badpassword1")
94
+ assert !session.save
95
+ assert_equal 1, ben.reload.failed_login_count
96
+
97
+ UserSession.consecutive_failed_logins_limit = 50
98
+ end
99
+ end
100
+ end
101
+ end
@@ -0,0 +1,54 @@
1
+ require 'test_helper'
2
+
3
+ class WackyUserSession < Authlogic::Session::Base
4
+ attr_accessor :counter
5
+ authenticate_with User
6
+
7
+ def initialize
8
+ @counter = 0
9
+ super
10
+ end
11
+
12
+ def persist_by_false
13
+ self.counter += 1
14
+ return false
15
+ end
16
+
17
+ def persist_by_true
18
+ self.counter += 1
19
+ return true
20
+ end
21
+ end
22
+
23
+ module SessionTest
24
+ class CallbacksTest < ActiveSupport::TestCase
25
+ def setup
26
+ WackyUserSession.reset_callbacks(:persist)
27
+ end
28
+
29
+ def test_no_callbacks
30
+ assert_equal [], WackyUserSession._persist_callbacks.map(&:filter)
31
+ session = WackyUserSession.new
32
+ session.send(:persist)
33
+ assert_equal 0, session.counter
34
+ end
35
+
36
+ def test_true_callback_cancelling_later_callbacks
37
+ WackyUserSession.persist :persist_by_true, :persist_by_false
38
+ assert_equal [:persist_by_true, :persist_by_false], WackyUserSession._persist_callbacks.map(&:filter)
39
+
40
+ session = WackyUserSession.new
41
+ session.send(:persist)
42
+ assert_equal 1, session.counter
43
+ end
44
+
45
+ def test_false_callback_continuing_to_later_callbacks
46
+ WackyUserSession.persist :persist_by_false, :persist_by_true
47
+ assert_equal [:persist_by_false, :persist_by_true], WackyUserSession._persist_callbacks.map(&:filter)
48
+
49
+ session = WackyUserSession.new
50
+ session.send(:persist)
51
+ assert_equal 2, session.counter
52
+ end
53
+ end
54
+ end
@@ -0,0 +1,136 @@
1
+ require 'test_helper'
2
+
3
+ module SessionTest
4
+ module CookiesTest
5
+ class ConfiTest < ActiveSupport::TestCase
6
+ def test_cookie_key
7
+ UserSession.cookie_key = "my_cookie_key"
8
+ assert_equal "my_cookie_key", UserSession.cookie_key
9
+
10
+ UserSession.cookie_key "user_credentials"
11
+ assert_equal "user_credentials", UserSession.cookie_key
12
+ end
13
+
14
+ def test_default_cookie_key
15
+ assert_equal "user_credentials", UserSession.cookie_key
16
+ assert_equal "back_office_user_credentials", BackOfficeUserSession.cookie_key
17
+ end
18
+
19
+ def test_remember_me
20
+ UserSession.remember_me = true
21
+ assert_equal true, UserSession.remember_me
22
+ session = UserSession.new
23
+ assert_equal true, session.remember_me
24
+
25
+ UserSession.remember_me false
26
+ assert_equal false, UserSession.remember_me
27
+ session = UserSession.new
28
+ assert_equal false, session.remember_me
29
+ end
30
+
31
+ def test_remember_me_for
32
+ UserSession.remember_me_for = 3.years
33
+ assert_equal 3.years, UserSession.remember_me_for
34
+ session = UserSession.new
35
+ session.remember_me = true
36
+ assert_equal 3.years, session.remember_me_for
37
+
38
+ UserSession.remember_me_for 3.months
39
+ assert_equal 3.months, UserSession.remember_me_for
40
+ session = UserSession.new
41
+ session.remember_me = true
42
+ assert_equal 3.months, session.remember_me_for
43
+ end
44
+
45
+ def test_secure
46
+ UserSession.secure = true
47
+ assert_equal true, UserSession.secure
48
+ session = UserSession.new
49
+ assert_equal true, session.secure
50
+
51
+ UserSession.secure false
52
+ assert_equal false, UserSession.secure
53
+ session = UserSession.new
54
+ assert_equal false, session.secure
55
+ end
56
+
57
+ def test_httponly
58
+ UserSession.httponly = true
59
+ assert_equal true, UserSession.httponly
60
+ session = UserSession.new
61
+ assert_equal true, session.httponly
62
+
63
+ UserSession.httponly false
64
+ assert_equal false, UserSession.httponly
65
+ session = UserSession.new
66
+ assert_equal false, session.httponly
67
+ end
68
+ end
69
+
70
+ class InstanceMethodsTest < ActiveSupport::TestCase
71
+ def test_credentials
72
+ session = UserSession.new
73
+ session.credentials = {:remember_me => true}
74
+ assert_equal true, session.remember_me
75
+ end
76
+
77
+ def test_remember_me
78
+ session = UserSession.new
79
+ assert_equal false, session.remember_me
80
+ assert !session.remember_me?
81
+
82
+ session.remember_me = false
83
+ assert_equal false, session.remember_me
84
+ assert !session.remember_me?
85
+
86
+ session.remember_me = true
87
+ assert_equal true, session.remember_me
88
+ assert session.remember_me?
89
+
90
+ session.remember_me = nil
91
+ assert_nil session.remember_me
92
+ assert !session.remember_me?
93
+
94
+ session.remember_me = "1"
95
+ assert_equal "1", session.remember_me
96
+ assert session.remember_me?
97
+
98
+ session.remember_me = "true"
99
+ assert_equal "true", session.remember_me
100
+ assert session.remember_me?
101
+ end
102
+
103
+ def test_remember_me_until
104
+ session = UserSession.new
105
+ assert_nil session.remember_me_until
106
+
107
+ session.remember_me = true
108
+ assert 3.months.from_now <= session.remember_me_until
109
+ end
110
+
111
+ def test_persist_persist_by_cookie
112
+ ben = users(:ben)
113
+ assert !UserSession.find
114
+ set_cookie_for(ben)
115
+ assert session = UserSession.find
116
+ assert_equal ben, session.record
117
+ end
118
+
119
+ def test_after_save_save_cookie
120
+ ben = users(:ben)
121
+ session = UserSession.new(ben)
122
+ assert session.save
123
+ assert_equal "#{ben.persistence_token}::#{ben.id}", controller.cookies["user_credentials"]
124
+ end
125
+
126
+ def test_after_destroy_destroy_cookie
127
+ ben = users(:ben)
128
+ set_cookie_for(ben)
129
+ session = UserSession.find
130
+ assert controller.cookies["user_credentials"]
131
+ assert session.destroy
132
+ assert !controller.cookies["user_credentials"]
133
+ end
134
+ end
135
+ end
136
+ end
File without changes
@@ -0,0 +1,64 @@
1
+ require 'test_helper'
2
+
3
+ module SessionTest
4
+ module ExistenceTest
5
+ class ClassMethodsTest < ActiveSupport::TestCase
6
+ def test_create
7
+ ben = users(:ben)
8
+ assert UserSession.create(:login => "somelogin", :password => "badpw2").new_session?
9
+ assert !UserSession.create(:login => ben.login, :password => "benrocks").new_session?
10
+ assert_raise(Authlogic::Session::Existence::SessionInvalidError) { UserSession.create!(:login => ben.login, :password => "badpw") }
11
+ assert !UserSession.create!(:login => ben.login, :password => "benrocks").new_session?
12
+ end
13
+ end
14
+
15
+ class IsntaceMethodsTest < ActiveSupport::TestCase
16
+ def test_new_session
17
+ session = UserSession.new
18
+ assert session.new_session?
19
+
20
+ set_session_for(users(:ben))
21
+ session = UserSession.find
22
+ assert !session.new_session?
23
+ end
24
+
25
+ def test_save_with_nothing
26
+ session = UserSession.new
27
+ assert !session.save
28
+ assert session.new_session?
29
+ end
30
+
31
+ def test_save_with_block
32
+ ben = users(:ben)
33
+ session = UserSession.new
34
+ block_result = session.save do |result|
35
+ assert !result
36
+ end
37
+ assert !block_result
38
+ assert session.new_session?
39
+ end
40
+
41
+ def test_save_with_bang
42
+ session = UserSession.new
43
+ assert_raise(Authlogic::Session::Existence::SessionInvalidError) { session.save! }
44
+
45
+ session.unauthorized_record = users(:ben)
46
+ assert_nothing_raised { session.save! }
47
+ end
48
+
49
+ def test_destroy
50
+ ben = users(:ben)
51
+ session = UserSession.new
52
+ assert !session.valid?
53
+ assert !session.errors.empty?
54
+ assert session.destroy
55
+ assert session.errors.empty?
56
+ session.unauthorized_record = ben
57
+ assert session.save
58
+ assert session.record
59
+ assert session.destroy
60
+ assert !session.record
61
+ end
62
+ end
63
+ end
64
+ end
@@ -0,0 +1,57 @@
1
+ require 'test_helper'
2
+
3
+ module SessionTest
4
+ class HttpAuthTest < ActiveSupport::TestCase
5
+ class ConfiTest < ActiveSupport::TestCase
6
+ def test_allow_http_basic_auth
7
+ UserSession.allow_http_basic_auth = false
8
+ assert_equal false, UserSession.allow_http_basic_auth
9
+
10
+ UserSession.allow_http_basic_auth true
11
+ assert_equal true, UserSession.allow_http_basic_auth
12
+ end
13
+
14
+ def test_request_http_basic_auth
15
+ UserSession.request_http_basic_auth = true
16
+ assert_equal true, UserSession.request_http_basic_auth
17
+
18
+ UserSession.request_http_basic_auth = false
19
+ assert_equal false, UserSession.request_http_basic_auth
20
+ end
21
+
22
+ def test_http_basic_auth_realm
23
+ assert_equal 'Application', UserSession.http_basic_auth_realm
24
+
25
+ UserSession.http_basic_auth_realm = 'TestRealm'
26
+ assert_equal 'TestRealm', UserSession.http_basic_auth_realm
27
+ end
28
+ end
29
+
30
+ class InstanceMethodsTest < ActiveSupport::TestCase
31
+ def test_persist_persist_by_http_auth
32
+ ben = users(:ben)
33
+ http_basic_auth_for do
34
+ assert !UserSession.find
35
+ end
36
+ http_basic_auth_for(ben) do
37
+ assert session = UserSession.find
38
+ assert_equal ben, session.record
39
+ assert_equal ben.login, session.login
40
+ assert_equal "benrocks", session.send(:protected_password)
41
+ assert !controller.http_auth_requested?
42
+ end
43
+ unset_session
44
+ UserSession.request_http_basic_auth = true
45
+ UserSession.http_basic_auth_realm = 'PersistTestRealm'
46
+ http_basic_auth_for(ben) do
47
+ assert session = UserSession.find
48
+ assert_equal ben, session.record
49
+ assert_equal ben.login, session.login
50
+ assert_equal "benrocks", session.send(:protected_password)
51
+ assert_equal 'PersistTestRealm', controller.realm
52
+ assert controller.http_auth_requested?
53
+ end
54
+ end
55
+ end
56
+ end
57
+ end