|
10 | 10 | from sqlalchemy.orm import Mapped, Session, mapped_column, sessionmaker |
11 | 11 |
|
12 | 12 | from advanced_alchemy.base import BigIntBase |
13 | | -from advanced_alchemy.types import PasswordHash |
| 13 | +from advanced_alchemy.types import EncryptedString, PasswordHash |
| 14 | +from advanced_alchemy.types.encrypted_string import FernetBackend, PGCryptoBackend |
14 | 15 | from advanced_alchemy.types.password_hash.argon2 import Argon2Hasher |
15 | 16 | from advanced_alchemy.types.password_hash.base import HashedPassword |
16 | 17 | from advanced_alchemy.types.password_hash.passlib import PasslibHasher |
@@ -194,3 +195,37 @@ async def test_password_hash_async( |
194 | 195 | await db_session.flush() |
195 | 196 | await db_session.refresh(user2) |
196 | 197 | assert user2.argon2_password is None |
| 198 | + |
| 199 | + |
| 200 | +def test_password_hash_repr() -> None: |
| 201 | + """Test __repr__() method for PasswordHash with different backends.""" |
| 202 | + # Test Argon2Hasher backend |
| 203 | + argon2_hash = PasswordHash(backend=Argon2Hasher(), length=128) |
| 204 | + assert repr(argon2_hash) == "PasswordHash(backend=sa.Argon2Hasher(), length=128)" |
| 205 | + |
| 206 | + # Test PasslibHasher backend |
| 207 | + passlib_hash = PasswordHash(backend=PasslibHasher(context=CryptContext(schemes=["argon2"])), length=256) |
| 208 | + assert repr(passlib_hash) == "PasswordHash(backend=sa.PasslibHasher(), length=256)" |
| 209 | + |
| 210 | + # Test PwdlibHasher backend |
| 211 | + pwdlib_hash = PasswordHash(backend=PwdlibHasher(hasher=PwdlibArgon2Hasher()), length=512) |
| 212 | + assert repr(pwdlib_hash) == "PasswordHash(backend=sa.PwdlibHasher(), length=512)" |
| 213 | + |
| 214 | + |
| 215 | +def test_encrypted_string_repr() -> None: |
| 216 | + """Test __repr__() method for EncryptedString with different backends.""" |
| 217 | + # Test FernetBackend (default) |
| 218 | + enc_str_fernet = EncryptedString(key="test_key", backend=FernetBackend, length=100) |
| 219 | + assert repr(enc_str_fernet) == "EncryptedString(key='test_key', backend=FernetBackend, length=100)" |
| 220 | + |
| 221 | + # Test PGCryptoBackend |
| 222 | + enc_str_pgcrypto = EncryptedString(key=b"test_bytes_key", backend=PGCryptoBackend, length=200) |
| 223 | + assert repr(enc_str_pgcrypto) == "EncryptedString(key=b'test_bytes_key', backend=PGCryptoBackend, length=200)" |
| 224 | + |
| 225 | + # Test with callable key |
| 226 | + def get_key() -> str: |
| 227 | + return "dynamic_key" |
| 228 | + |
| 229 | + # The repr should include the callable object itself |
| 230 | + enc_str_callable = EncryptedString(key=get_key, backend=FernetBackend) |
| 231 | + assert repr(enc_str_callable) == "EncryptedString(key=get_key, backend=FernetBackend, length=None)" |
0 commit comments