Add some tests for password type to prove existing bugs.

This commit is contained in:
Ryan Leckey
2013-11-21 05:09:40 -08:00
parent 982fe992a4
commit a286ec1222

View File

@@ -65,9 +65,9 @@ class TestPasswordType(TestCase):
obj = self.User() obj = self.User()
obj.password = Password(md5_crypt.encrypt('b')) obj.password = Password(md5_crypt.encrypt('b'))
assert obj.password.hash.startswith('$1$') assert obj.password.hash.decode('utf8').startswith('$1$')
assert obj.password == 'b' assert obj.password == 'b'
assert obj.password.hash.startswith('$pbkdf2-sha512$') assert obj.password.hash.decode('utf8').startswith('$pbkdf2-sha512$')
def test_auto_column_length(self): def test_auto_column_length(self):
"""Should derive the correct column length from the specified schemes. """Should derive the correct column length from the specified schemes.
@@ -114,3 +114,60 @@ class TestPasswordType(TestCase):
obj = self.session.query(self.User).get(obj.id) obj = self.session.query(self.User).get(obj.id)
assert obj.password is None assert obj.password is None
def test_update_none(self):
"""
Should be able to change a password from ``None`` to a valid
password.
"""
obj = self.User()
obj.password = None
self.session.add(obj)
self.session.commit()
obj = self.session.query(self.User).get(obj.id)
obj.password = 'b'
self.session.commit()
def test_compare_none(self):
"""
Should be able to compare a password of ``None``.
"""
obj = self.User()
obj.password = None
assert obj.password is None
assert obj.password == None
obj.password = 'b'
assert obj.password is not None
assert obj.password != None
def test_check_and_update_persist(self):
"""
When a password is compared, the hash should update if needed to
change the algorithm; and, commit to the database.
"""
from passlib.hash import md5_crypt
obj = self.User()
obj.password = Password(md5_crypt.encrypt('b'))
self.session.add(obj)
self.session.commit()
assert obj.password.hash.decode('utf8').startswith('$1$')
assert obj.password == 'b'
self.session.commit()
obj = self.session.query(self.User).get(obj.id)
assert obj.password.hash.decode('utf8').startswith('$pbkdf2-sha512$')
assert obj.password == 'b'