Add some tests for password type to prove existing bugs.
This commit is contained in:
@@ -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'
|
||||||
|
Reference in New Issue
Block a user