import pytest
import dotenvage
class TestSecretManagerGenerate:
def test_generate_creates_valid_manager(self):
manager = dotenvage.SecretManager.generate()
assert manager is not None
def test_generate_creates_unique_keys(self):
manager1 = dotenvage.SecretManager.generate()
manager2 = dotenvage.SecretManager.generate()
assert manager1.public_key_string() != manager2.public_key_string()
def test_public_key_has_age_format(self):
manager = dotenvage.SecretManager.generate()
public_key = manager.public_key_string()
assert public_key.startswith("age1")
class TestSecretManagerEncryption:
def test_encrypt_creates_wrapped_format(self):
manager = dotenvage.SecretManager.generate()
encrypted = manager.encrypt_value("test-secret")
assert encrypted.startswith("ENC[AGE:b64:")
assert encrypted.endswith("]")
def test_decrypt_returns_original(self):
manager = dotenvage.SecretManager.generate()
original = "my-secret-password"
encrypted = manager.encrypt_value(original)
decrypted = manager.decrypt_value(encrypted)
assert decrypted == original
def test_decrypt_unencrypted_returns_unchanged(self):
manager = dotenvage.SecretManager.generate()
plain = "not-encrypted"
result = manager.decrypt_value(plain)
assert result == plain
def test_encrypt_empty_string(self):
manager = dotenvage.SecretManager.generate()
encrypted = manager.encrypt_value("")
decrypted = manager.decrypt_value(encrypted)
assert decrypted == ""
def test_encrypt_unicode(self):
manager = dotenvage.SecretManager.generate()
original = "password123!"
encrypted = manager.encrypt_value(original)
decrypted = manager.decrypt_value(encrypted)
assert decrypted == original
class TestSecretManagerIsEncrypted:
def test_is_encrypted_true_for_encrypted_value(self):
manager = dotenvage.SecretManager.generate()
encrypted = manager.encrypt_value("secret")
assert dotenvage.SecretManager.is_encrypted(encrypted) is True
def test_is_encrypted_false_for_plain_value(self):
assert dotenvage.SecretManager.is_encrypted("plain-text") is False
assert dotenvage.SecretManager.is_encrypted("") is False
assert dotenvage.SecretManager.is_encrypted("ENC[WRONG:format]") is False
class TestSecretManagerFromIdentity:
def test_from_identity_string_rejects_invalid(self):
with pytest.raises(ValueError):
dotenvage.SecretManager.from_identity_string("invalid-identity")