+require File.dirname(__FILE__) + '/../test_helper'
+class UserTest < Test::Unit::TestCase
+
+ # load the fixture into the developer-specified table using the custom
+ # 'fixture' method.
+ fixture :users, :table_name => LoginEngine.config(:user_table), :class_name => "User"
+
+ def setup
+ LoginEngine::CONFIG[:salt] = "test-salt"
+ end
+
+ def test_auth
+ assert_equal users(:bob), User.authenticate("bob", "atest")
+ assert_nil User.authenticate("nonbob", "atest")
+ end
+
+
+ def test_passwordchange
+
+ users(:longbob).change_password("nonbobpasswd")
+ users(:longbob).save
+ assert_equal users(:longbob), User.authenticate("longbob", "nonbobpasswd")
+ assert_nil User.authenticate("longbob", "alongtest")
+ users(:longbob).change_password("alongtest")
+ users(:longbob).save
+ assert_equal users(:longbob), User.authenticate("longbob", "alongtest")
+ assert_nil User.authenticate("longbob", "nonbobpasswd")
+
+ end
+
+ def test_disallowed_passwords
+
+ u = User.new
+ u.login = "nonbob"
+ u.email = "bobs@email.com"
+
+ u.change_password("tiny")
+ assert !u.save
+ assert u.errors.invalid?('password')
+
+ u.change_password("hugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehugehuge")
+ assert !u.save
+ assert u.errors.invalid?('password')
+
+ u.change_password("")
+ assert !u.save
+ assert u.errors.invalid?('password')
+
+ u.change_password("bobs_secure_password")
+ assert u.save
+ assert u.errors.empty?
+
+ end
+
+ def test_bad_logins
+
+ u = User.new
+ u.change_password("bobs_secure_password")
+ u.email = "bobs@email.com"
+
+ u.login = "x"
+ assert !u.save
+ assert u.errors.invalid?('login')
+
+ u.login = "hugebobhugebobhugebobhugebobhugebobhugebobhugebobhugebobhugebobhugebobhugebobhugebobhugebobhugebobhugebobhugebobhugebobhugebobhugebobhugebobhugebobhugebobhugebobhugebobhugebobhugebobhug"
+ assert !u.save
+ assert u.errors.invalid?('login')
+
+ u.login = ""
+ assert !u.save
+ assert u.errors.invalid?('login')
+
+ u.login = "okbob"
+ assert u.save
+ assert u.errors.empty?
+
+ end
+
+
+ def test_collision
+ u = User.new
+ u.login = "existingbob"
+ u.change_password("bobs_secure_password")
+ assert !u.save
+ end
+
+
+ def test_create
+ u = User.new
+ u.login = "nonexistingbob"
+ u.change_password("bobs_secure_password")
+ u.email = "bobs@email.com"
+
+ assert u.save
+
+ end
+
+ def test_email_should_be_nominally_valid
+ u = User.new
+ u.login = "email_test"
+ u.change_password("email_test_password")
+
+ assert !u.save
+ assert u.errors.invalid?('email')
+
+ u.email = "invalid_email"
+ assert !u.save
+ assert u.errors.invalid?('email')
+
+ u.email = "valid@email.com"
+ assert u.save
+ end
+
+end