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.
- data/Gemfile +3 -0
- data/Gemfile.lock +62 -0
- data/LICENSE +20 -0
- data/README.rdoc +250 -0
- data/Rakefile +50 -0
- data/VERSION.yml +5 -0
- data/authlogic.gemspec +192 -0
- data/generators/session/session_generator.rb +9 -0
- data/generators/session/templates/session.rb +2 -0
- data/init.rb +1 -0
- data/lib/authlogic.rb +64 -0
- data/lib/authlogic/acts_as_authentic/base.rb +109 -0
- data/lib/authlogic/acts_as_authentic/email.rb +110 -0
- data/lib/authlogic/acts_as_authentic/logged_in_status.rb +59 -0
- data/lib/authlogic/acts_as_authentic/login.rb +142 -0
- data/lib/authlogic/acts_as_authentic/magic_columns.rb +24 -0
- data/lib/authlogic/acts_as_authentic/password.rb +355 -0
- data/lib/authlogic/acts_as_authentic/perishable_token.rb +105 -0
- data/lib/authlogic/acts_as_authentic/persistence_token.rb +68 -0
- data/lib/authlogic/acts_as_authentic/restful_authentication.rb +61 -0
- data/lib/authlogic/acts_as_authentic/session_maintenance.rb +139 -0
- data/lib/authlogic/acts_as_authentic/single_access_token.rb +65 -0
- data/lib/authlogic/acts_as_authentic/validations_scope.rb +32 -0
- data/lib/authlogic/authenticates_many/association.rb +42 -0
- data/lib/authlogic/authenticates_many/base.rb +54 -0
- data/lib/authlogic/controller_adapters/abstract_adapter.rb +67 -0
- data/lib/authlogic/controller_adapters/merb_adapter.rb +30 -0
- data/lib/authlogic/controller_adapters/rails_adapter.rb +50 -0
- data/lib/authlogic/controller_adapters/sinatra_adapter.rb +61 -0
- data/lib/authlogic/crypto_providers/aes256.rb +43 -0
- data/lib/authlogic/crypto_providers/bcrypt.rb +90 -0
- data/lib/authlogic/crypto_providers/md5.rb +34 -0
- data/lib/authlogic/crypto_providers/sha1.rb +35 -0
- data/lib/authlogic/crypto_providers/sha256.rb +50 -0
- data/lib/authlogic/crypto_providers/sha512.rb +50 -0
- data/lib/authlogic/crypto_providers/wordpress.rb +43 -0
- data/lib/authlogic/i18n.rb +84 -0
- data/lib/authlogic/i18n/translator.rb +15 -0
- data/lib/authlogic/random.rb +33 -0
- data/lib/authlogic/regex.rb +25 -0
- data/lib/authlogic/session/activation.rb +58 -0
- data/lib/authlogic/session/active_record_trickery.rb +72 -0
- data/lib/authlogic/session/base.rb +37 -0
- data/lib/authlogic/session/brute_force_protection.rb +96 -0
- data/lib/authlogic/session/callbacks.rb +96 -0
- data/lib/authlogic/session/cookies.rb +182 -0
- data/lib/authlogic/session/existence.rb +93 -0
- data/lib/authlogic/session/foundation.rb +77 -0
- data/lib/authlogic/session/http_auth.rb +99 -0
- data/lib/authlogic/session/id.rb +41 -0
- data/lib/authlogic/session/klass.rb +69 -0
- data/lib/authlogic/session/magic_columns.rb +95 -0
- data/lib/authlogic/session/magic_states.rb +59 -0
- data/lib/authlogic/session/params.rb +101 -0
- data/lib/authlogic/session/password.rb +240 -0
- data/lib/authlogic/session/perishable_token.rb +18 -0
- data/lib/authlogic/session/persistence.rb +70 -0
- data/lib/authlogic/session/priority_record.rb +34 -0
- data/lib/authlogic/session/scopes.rb +101 -0
- data/lib/authlogic/session/session.rb +62 -0
- data/lib/authlogic/session/timeout.rb +82 -0
- data/lib/authlogic/session/unauthorized_record.rb +50 -0
- data/lib/authlogic/session/validation.rb +82 -0
- data/lib/authlogic/test_case.rb +120 -0
- data/lib/authlogic/test_case/mock_controller.rb +55 -0
- data/lib/authlogic/test_case/mock_cookie_jar.rb +14 -0
- data/lib/authlogic/test_case/mock_logger.rb +10 -0
- data/lib/authlogic/test_case/mock_request.rb +19 -0
- data/lib/authlogic/test_case/rails_request_adapter.rb +30 -0
- data/lib/generators/authlogic/USAGE +8 -0
- data/lib/generators/authlogic/session_generator.rb +14 -0
- data/lib/generators/authlogic/templates/session.rb +2 -0
- data/rails/init.rb +1 -0
- data/shoulda_macros/authlogic.rb +69 -0
- data/test/acts_as_authentic_test/base_test.rb +18 -0
- data/test/acts_as_authentic_test/email_test.rb +116 -0
- data/test/acts_as_authentic_test/logged_in_status_test.rb +50 -0
- data/test/acts_as_authentic_test/login_test.rb +116 -0
- data/test/acts_as_authentic_test/magic_columns_test.rb +27 -0
- data/test/acts_as_authentic_test/password_test.rb +236 -0
- data/test/acts_as_authentic_test/perishable_token_test.rb +90 -0
- data/test/acts_as_authentic_test/persistence_token_test.rb +55 -0
- data/test/acts_as_authentic_test/restful_authentication_test.rb +40 -0
- data/test/acts_as_authentic_test/session_maintenance_test.rb +84 -0
- data/test/acts_as_authentic_test/single_access_test.rb +44 -0
- data/test/authenticates_many_test.rb +16 -0
- data/test/crypto_provider_test/aes256_test.rb +14 -0
- data/test/crypto_provider_test/bcrypt_test.rb +14 -0
- data/test/crypto_provider_test/sha1_test.rb +23 -0
- data/test/crypto_provider_test/sha256_test.rb +14 -0
- data/test/crypto_provider_test/sha512_test.rb +14 -0
- data/test/fixtures/companies.yml +5 -0
- data/test/fixtures/employees.yml +17 -0
- data/test/fixtures/projects.yml +3 -0
- data/test/fixtures/users.yml +24 -0
- data/test/i18n_test.rb +33 -0
- data/test/libs/affiliate.rb +7 -0
- data/test/libs/company.rb +6 -0
- data/test/libs/employee.rb +7 -0
- data/test/libs/employee_session.rb +2 -0
- data/test/libs/ldaper.rb +3 -0
- data/test/libs/ordered_hash.rb +9 -0
- data/test/libs/project.rb +3 -0
- data/test/libs/user.rb +5 -0
- data/test/libs/user_session.rb +5 -0
- data/test/random_test.rb +42 -0
- data/test/session_test/activation_test.rb +43 -0
- data/test/session_test/active_record_trickery_test.rb +46 -0
- data/test/session_test/brute_force_protection_test.rb +101 -0
- data/test/session_test/callbacks_test.rb +54 -0
- data/test/session_test/cookies_test.rb +136 -0
- data/test/session_test/credentials_test.rb +0 -0
- data/test/session_test/existence_test.rb +64 -0
- data/test/session_test/http_auth_test.rb +57 -0
- data/test/session_test/id_test.rb +17 -0
- data/test/session_test/klass_test.rb +40 -0
- data/test/session_test/magic_columns_test.rb +62 -0
- data/test/session_test/magic_states_test.rb +60 -0
- data/test/session_test/params_test.rb +53 -0
- data/test/session_test/password_test.rb +106 -0
- data/test/session_test/perishability_test.rb +15 -0
- data/test/session_test/persistence_test.rb +21 -0
- data/test/session_test/scopes_test.rb +60 -0
- data/test/session_test/session_test.rb +59 -0
- data/test/session_test/timeout_test.rb +52 -0
- data/test/session_test/unauthorized_record_test.rb +13 -0
- data/test/session_test/validation_test.rb +23 -0
- data/test/test_helper.rb +168 -0
- metadata +252 -0
@@ -0,0 +1,19 @@
|
|
1
|
+
module Authlogic
|
2
|
+
module TestCase
|
3
|
+
class MockRequest # :nodoc:
|
4
|
+
attr_accessor :controller
|
5
|
+
|
6
|
+
def initialize(controller)
|
7
|
+
self.controller = controller
|
8
|
+
end
|
9
|
+
|
10
|
+
def remote_ip
|
11
|
+
(controller && controller.respond_to?(:env) && controller.env.is_a?(Hash) && controller.env['REMOTE_ADDR']) || "1.1.1.1"
|
12
|
+
end
|
13
|
+
|
14
|
+
private
|
15
|
+
def method_missing(*args, &block)
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
19
|
+
end
|
@@ -0,0 +1,30 @@
|
|
1
|
+
module Authlogic
|
2
|
+
module TestCase
|
3
|
+
# Adapts authlogic to work with the @request object when testing. This way Authlogic can set cookies and what not before
|
4
|
+
# a request is made, ultimately letting you log in users in functional tests.
|
5
|
+
class RailsRequestAdapter < ControllerAdapters::AbstractAdapter
|
6
|
+
def authenticate_with_http_basic(&block)
|
7
|
+
end
|
8
|
+
|
9
|
+
def cookies
|
10
|
+
new_cookies = MockCookieJar.new
|
11
|
+
super.each do |key, value|
|
12
|
+
new_cookies[key] = value[:value]
|
13
|
+
end
|
14
|
+
new_cookies
|
15
|
+
end
|
16
|
+
|
17
|
+
def cookie_domain
|
18
|
+
nil
|
19
|
+
end
|
20
|
+
|
21
|
+
def request
|
22
|
+
@request ||= MockRequest.new(controller)
|
23
|
+
end
|
24
|
+
|
25
|
+
def request_content_type
|
26
|
+
request.format.to_s
|
27
|
+
end
|
28
|
+
end
|
29
|
+
end
|
30
|
+
end
|
@@ -0,0 +1,14 @@
|
|
1
|
+
module Authlogic
|
2
|
+
class SessionGenerator < Rails::Generators::Base
|
3
|
+
source_root File.expand_path('../templates', __FILE__)
|
4
|
+
argument :session_class_name, :type => :string, :default => "Session"
|
5
|
+
|
6
|
+
def self.banner
|
7
|
+
"rails generate authlogic:#{generator_name} #{self.arguments.map{ |a| a.usage }.join(' ')} [options]"
|
8
|
+
end
|
9
|
+
|
10
|
+
def generate_session
|
11
|
+
template "session.rb", "app/models/#{session_class_name.underscore}.rb"
|
12
|
+
end
|
13
|
+
end
|
14
|
+
end
|
data/rails/init.rb
ADDED
@@ -0,0 +1 @@
|
|
1
|
+
require "authlogic"
|
@@ -0,0 +1,69 @@
|
|
1
|
+
# Test::Unit
|
2
|
+
# Place this file into your test/shoulda_macros directory
|
3
|
+
#
|
4
|
+
# Example:
|
5
|
+
#
|
6
|
+
# class UserTest
|
7
|
+
# should_have_authlogic
|
8
|
+
# end
|
9
|
+
#
|
10
|
+
# Rspec
|
11
|
+
# Place this file into your spec/support/shoulda directory
|
12
|
+
#
|
13
|
+
# Example:
|
14
|
+
#
|
15
|
+
# describe User do
|
16
|
+
# it { should have_authlogic }
|
17
|
+
# end
|
18
|
+
|
19
|
+
module Authlogic
|
20
|
+
module Shoulda
|
21
|
+
|
22
|
+
module Matchers
|
23
|
+
def have_authlogic
|
24
|
+
HaveAuthlogic.new
|
25
|
+
end
|
26
|
+
alias_method :be_authentic, :have_authlogic
|
27
|
+
|
28
|
+
class HaveAuthlogic
|
29
|
+
|
30
|
+
def matches?(subject)
|
31
|
+
subject.respond_to?(:password=) && subject.respond_to?(:valid_password?)
|
32
|
+
end
|
33
|
+
|
34
|
+
def failure_message
|
35
|
+
"Add the line 'acts_as_authentic' to your model"
|
36
|
+
end
|
37
|
+
|
38
|
+
def description
|
39
|
+
"have Authlogic"
|
40
|
+
end
|
41
|
+
end
|
42
|
+
|
43
|
+
end
|
44
|
+
|
45
|
+
module Macros
|
46
|
+
include Matchers
|
47
|
+
|
48
|
+
def should_have_authlogic
|
49
|
+
klass = described_type rescue model_class
|
50
|
+
matcher = HaveAuthlogic.new
|
51
|
+
|
52
|
+
should matcher.description do
|
53
|
+
assert matcher.matches?(klass.new), matcher.failure_message
|
54
|
+
end
|
55
|
+
end
|
56
|
+
alias_method :should_be_authentic, :should_have_authlogic
|
57
|
+
|
58
|
+
end
|
59
|
+
|
60
|
+
end
|
61
|
+
end
|
62
|
+
|
63
|
+
if defined? Spec
|
64
|
+
Spec::Runner.configure do |config|
|
65
|
+
config.include(Authlogic::Shoulda::Matchers)
|
66
|
+
end
|
67
|
+
else
|
68
|
+
Test::Unit::TestCase.class_eval { extend Authlogic::Shoulda::Macros }
|
69
|
+
end
|
@@ -0,0 +1,18 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module ActsAsAuthenticTest
|
4
|
+
class BaseTest < ActiveSupport::TestCase
|
5
|
+
def test_acts_as_authentic
|
6
|
+
assert_nothing_raised do
|
7
|
+
User.acts_as_authentic do
|
8
|
+
end
|
9
|
+
end
|
10
|
+
end
|
11
|
+
|
12
|
+
def test_acts_as_authentic_with_old_config
|
13
|
+
assert_raise(ArgumentError) do
|
14
|
+
User.acts_as_authentic({})
|
15
|
+
end
|
16
|
+
end
|
17
|
+
end
|
18
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module ActsAsAuthenticTest
|
4
|
+
class EmailTest < ActiveSupport::TestCase
|
5
|
+
def test_email_field_config
|
6
|
+
assert_equal :email, User.email_field
|
7
|
+
assert_equal :email, Employee.email_field
|
8
|
+
|
9
|
+
User.email_field = :nope
|
10
|
+
assert_equal :nope, User.email_field
|
11
|
+
User.email_field :email
|
12
|
+
assert_equal :email, User.email_field
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_validate_email_field_config
|
16
|
+
assert User.validate_email_field
|
17
|
+
assert Employee.validate_email_field
|
18
|
+
|
19
|
+
User.validate_email_field = false
|
20
|
+
assert !User.validate_email_field
|
21
|
+
User.validate_email_field true
|
22
|
+
assert User.validate_email_field
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_validates_length_of_email_field_options_config
|
26
|
+
assert_equal({:maximum => 100}, User.validates_length_of_email_field_options)
|
27
|
+
assert_equal({:maximum => 100}, Employee.validates_length_of_email_field_options)
|
28
|
+
|
29
|
+
User.validates_length_of_email_field_options = {:yes => "no"}
|
30
|
+
assert_equal({:yes => "no"}, User.validates_length_of_email_field_options)
|
31
|
+
User.validates_length_of_email_field_options({:within => 6..100})
|
32
|
+
assert_equal({:within => 6..100}, User.validates_length_of_email_field_options)
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_validates_format_of_email_field_options_config
|
36
|
+
email_invalid_msg = I18n.t('error_messages.email_invalid', :default => "should look like an email address.")
|
37
|
+
default = {:with => Authlogic::Regex.email, :message => email_invalid_msg}
|
38
|
+
|
39
|
+
user_options = User.validates_format_of_email_field_options
|
40
|
+
assert_equal default[:with], user_options[:with]
|
41
|
+
assert_equal email_invalid_msg, user_options[:message].call
|
42
|
+
|
43
|
+
employee_options = Employee.validates_format_of_email_field_options
|
44
|
+
assert_equal default[:with], employee_options[:with]
|
45
|
+
assert_equal email_invalid_msg, employee_options[:message].call
|
46
|
+
|
47
|
+
User.validates_format_of_email_field_options = {:yes => "no"}
|
48
|
+
assert_equal({:yes => "no"}, User.validates_format_of_email_field_options)
|
49
|
+
User.validates_format_of_email_field_options default
|
50
|
+
assert_equal default, User.validates_format_of_email_field_options
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_validates_uniqueness_of_email_field_options_config
|
54
|
+
default = {:case_sensitive => false, :scope => Employee.validations_scope, :if => "#{Employee.email_field}_changed?".to_sym}
|
55
|
+
assert_equal default, Employee.validates_uniqueness_of_email_field_options
|
56
|
+
|
57
|
+
Employee.validates_uniqueness_of_email_field_options = {:yes => "no"}
|
58
|
+
assert_equal({:yes => "no"}, Employee.validates_uniqueness_of_email_field_options)
|
59
|
+
Employee.validates_uniqueness_of_email_field_options default
|
60
|
+
assert_equal default, Employee.validates_uniqueness_of_email_field_options
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_validates_length_of_email_field
|
64
|
+
u = User.new
|
65
|
+
u.email = "a@a.a"
|
66
|
+
assert !u.valid?
|
67
|
+
assert u.errors[:email].size > 0
|
68
|
+
|
69
|
+
u.email = "a@a.com"
|
70
|
+
assert !u.valid?
|
71
|
+
assert u.errors[:email].size == 0
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_validates_format_of_email_field
|
75
|
+
u = User.new
|
76
|
+
u.email = "aaaaaaaaaaaaa"
|
77
|
+
u.valid?
|
78
|
+
assert u.errors[:email].size > 0
|
79
|
+
|
80
|
+
u.email = "a@a.com"
|
81
|
+
u.valid?
|
82
|
+
assert u.errors[:email].size == 0
|
83
|
+
|
84
|
+
u.email = "damien+test1...etc..@mydomain.com"
|
85
|
+
u.valid?
|
86
|
+
assert u.errors[:email].size == 0
|
87
|
+
|
88
|
+
u.email = "dakota.dux+1@gmail.com"
|
89
|
+
u.valid?
|
90
|
+
assert u.errors[:email].size == 0
|
91
|
+
|
92
|
+
u.email = "dakota.d'ux@gmail.com"
|
93
|
+
u.valid?
|
94
|
+
assert u.errors[:email].size == 0
|
95
|
+
|
96
|
+
u.email = "<script>alert(123);</script>\nnobody@example.com"
|
97
|
+
assert !u.valid?
|
98
|
+
assert u.errors[:email].size > 0
|
99
|
+
end
|
100
|
+
|
101
|
+
def test_validates_uniqueness_of_email_field
|
102
|
+
u = User.new
|
103
|
+
u.email = "bjohnson@binarylogic.com"
|
104
|
+
assert !u.valid?
|
105
|
+
assert u.errors[:email].size > 0
|
106
|
+
|
107
|
+
u.email = "BJOHNSON@binarylogic.com"
|
108
|
+
assert !u.valid?
|
109
|
+
assert u.errors[:email].size > 0
|
110
|
+
|
111
|
+
u.email = "a@a.com"
|
112
|
+
assert !u.valid?
|
113
|
+
assert u.errors[:email].size == 0
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|
@@ -0,0 +1,50 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module ActsAsAuthenticTest
|
4
|
+
class LoggedInStatusTest < ActiveSupport::TestCase
|
5
|
+
ERROR_MSG = 'Multiple calls to %s should result in different relations'
|
6
|
+
|
7
|
+
def test_logged_in_timeout_config
|
8
|
+
assert_equal 10.minutes.to_i, User.logged_in_timeout
|
9
|
+
assert_equal 10.minutes.to_i, Employee.logged_in_timeout
|
10
|
+
|
11
|
+
User.logged_in_timeout = 1.hour
|
12
|
+
assert_equal 1.hour.to_i, User.logged_in_timeout
|
13
|
+
User.logged_in_timeout 10.minutes
|
14
|
+
assert_equal 10.minutes.to_i, User.logged_in_timeout
|
15
|
+
end
|
16
|
+
|
17
|
+
def test_named_scope_logged_in
|
18
|
+
# Testing that the scope returned differs, because the time it was called should be
|
19
|
+
# slightly different. This is an attempt to make sure the scope is lambda wrapped
|
20
|
+
# so that it is re-evaluated every time its called. My biggest concern is that the
|
21
|
+
# test happens so fast that the test fails... I just don't know a better way to test it!
|
22
|
+
assert User.logged_in.where_values != User.logged_in.where_values, ERROR_MSG % '#logged_in'
|
23
|
+
|
24
|
+
assert_equal 0, User.logged_in.count
|
25
|
+
User.first.update_attribute(:last_request_at, Time.now)
|
26
|
+
assert_equal 1, User.logged_in.count
|
27
|
+
end
|
28
|
+
|
29
|
+
def test_named_scope_logged_out
|
30
|
+
# Testing that the scope returned differs, because the time it was called should be
|
31
|
+
# slightly different. This is an attempt to make sure the scope is lambda wrapped
|
32
|
+
# so that it is re-evaluated every time its called. My biggest concern is that the
|
33
|
+
# test happens so fast that the test fails... I just don't know a better way to test it!
|
34
|
+
assert User.logged_in.where_values != User.logged_out.where_values, ERROR_MSG % '#logged_out'
|
35
|
+
|
36
|
+
assert_equal 2, User.logged_out.count
|
37
|
+
User.first.update_attribute(:last_request_at, Time.now)
|
38
|
+
assert_equal 1, User.logged_out.count
|
39
|
+
end
|
40
|
+
|
41
|
+
def test_logged_in_logged_out
|
42
|
+
u = User.first
|
43
|
+
assert !u.logged_in?
|
44
|
+
assert u.logged_out?
|
45
|
+
u.last_request_at = Time.now
|
46
|
+
assert u.logged_in?
|
47
|
+
assert !u.logged_out?
|
48
|
+
end
|
49
|
+
end
|
50
|
+
end
|
@@ -0,0 +1,116 @@
|
|
1
|
+
require 'test_helper'
|
2
|
+
|
3
|
+
module ActsAsAuthenticTest
|
4
|
+
class LoginTest < ActiveSupport::TestCase
|
5
|
+
def test_login_field_config
|
6
|
+
assert_equal :login, User.login_field
|
7
|
+
assert_nil Employee.login_field
|
8
|
+
|
9
|
+
User.login_field = :nope
|
10
|
+
assert_equal :nope, User.login_field
|
11
|
+
User.login_field :login
|
12
|
+
assert_equal :login, User.login_field
|
13
|
+
end
|
14
|
+
|
15
|
+
def test_validate_login_field_config
|
16
|
+
assert User.validate_login_field
|
17
|
+
assert Employee.validate_login_field
|
18
|
+
|
19
|
+
User.validate_login_field = false
|
20
|
+
assert !User.validate_login_field
|
21
|
+
User.validate_login_field true
|
22
|
+
assert User.validate_login_field
|
23
|
+
end
|
24
|
+
|
25
|
+
def test_validates_length_of_login_field_options_config
|
26
|
+
assert_equal({:within => 3..100}, User.validates_length_of_login_field_options)
|
27
|
+
assert_equal({:within => 3..100}, Employee.validates_length_of_login_field_options)
|
28
|
+
|
29
|
+
User.validates_length_of_login_field_options = {:yes => "no"}
|
30
|
+
assert_equal({:yes => "no"}, User.validates_length_of_login_field_options)
|
31
|
+
User.validates_length_of_login_field_options({:within => 3..100})
|
32
|
+
assert_equal({:within => 3..100}, User.validates_length_of_login_field_options)
|
33
|
+
end
|
34
|
+
|
35
|
+
def test_validates_format_of_login_field_options_config
|
36
|
+
login_invalid_msg = I18n.t('error_messages.login_invalid', :default => "should use only letters, numbers, spaces, and .-_@ please.")
|
37
|
+
default = {:with => /\A\w[\w\.+\-_@ ]+$/, :message => login_invalid_msg}
|
38
|
+
|
39
|
+
user_options = User.validates_format_of_login_field_options
|
40
|
+
assert_equal default[:with], user_options[:with]
|
41
|
+
assert_equal login_invalid_msg, user_options[:message].call
|
42
|
+
|
43
|
+
employee_options = Employee.validates_format_of_login_field_options
|
44
|
+
assert_equal default[:with], employee_options[:with]
|
45
|
+
assert_equal login_invalid_msg, employee_options[:message].call
|
46
|
+
|
47
|
+
User.validates_format_of_login_field_options = {:yes => "no"}
|
48
|
+
assert_equal({:yes => "no"}, User.validates_format_of_login_field_options)
|
49
|
+
User.validates_format_of_login_field_options default
|
50
|
+
assert_equal default, User.validates_format_of_login_field_options
|
51
|
+
end
|
52
|
+
|
53
|
+
def test_validates_uniqueness_of_login_field_options_config
|
54
|
+
default = {:case_sensitive => false, :scope => User.validations_scope, :if => "#{User.login_field}_changed?".to_sym}
|
55
|
+
assert_equal default, User.validates_uniqueness_of_login_field_options
|
56
|
+
|
57
|
+
User.validates_uniqueness_of_login_field_options = {:yes => "no"}
|
58
|
+
assert_equal({:yes => "no"}, User.validates_uniqueness_of_login_field_options)
|
59
|
+
User.validates_uniqueness_of_login_field_options default
|
60
|
+
assert_equal default, User.validates_uniqueness_of_login_field_options
|
61
|
+
end
|
62
|
+
|
63
|
+
def test_validates_length_of_login_field
|
64
|
+
u = User.new
|
65
|
+
u.login = "a"
|
66
|
+
assert !u.valid?
|
67
|
+
assert u.errors[:login].size > 0
|
68
|
+
|
69
|
+
u.login = "aaaaaaaaaa"
|
70
|
+
assert !u.valid?
|
71
|
+
assert u.errors[:login].size == 0
|
72
|
+
end
|
73
|
+
|
74
|
+
def test_validates_format_of_login_field
|
75
|
+
u = User.new
|
76
|
+
u.login = "fdsf@^&*"
|
77
|
+
assert !u.valid?
|
78
|
+
assert u.errors[:login].size > 0
|
79
|
+
|
80
|
+
u.login = "fdsfdsfdsfdsfs"
|
81
|
+
assert !u.valid?
|
82
|
+
assert u.errors[:login].size == 0
|
83
|
+
|
84
|
+
u.login = "dakota.dux+1@gmail.com"
|
85
|
+
assert !u.valid?
|
86
|
+
assert u.errors[:login].size == 0
|
87
|
+
end
|
88
|
+
|
89
|
+
def test_validates_uniqueness_of_login_field
|
90
|
+
u = User.new
|
91
|
+
u.login = "bjohnson"
|
92
|
+
assert !u.valid?
|
93
|
+
assert u.errors[:login].size > 0
|
94
|
+
|
95
|
+
u.login = "BJOHNSON"
|
96
|
+
assert !u.valid?
|
97
|
+
assert u.errors[:login].size > 0
|
98
|
+
|
99
|
+
u.login = "fdsfdsf"
|
100
|
+
assert !u.valid?
|
101
|
+
assert u.errors[:login].size == 0
|
102
|
+
end
|
103
|
+
|
104
|
+
def test_find_by_smart_case_login_field
|
105
|
+
ben = users(:ben)
|
106
|
+
assert_equal ben, User.find_by_smart_case_login_field("bjohnson")
|
107
|
+
assert_equal ben, User.find_by_smart_case_login_field("BJOHNSON")
|
108
|
+
assert_equal ben, User.find_by_smart_case_login_field("Bjohnson")
|
109
|
+
|
110
|
+
drew = employees(:drew)
|
111
|
+
assert_equal drew, Employee.find_by_smart_case_login_field("dgainor@binarylogic.com")
|
112
|
+
assert_equal drew, Employee.find_by_smart_case_login_field("Dgainor@binarylogic.com")
|
113
|
+
assert_equal drew, Employee.find_by_smart_case_login_field("DGAINOR@BINARYLOGIC.COM")
|
114
|
+
end
|
115
|
+
end
|
116
|
+
end
|