From df407802f55649e6dcff709e37154ce08a5bfe98 Mon Sep 17 00:00:00 2001 From: thePR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> Date: Tue, 1 Jul 2025 22:01:28 -0400 Subject: [PATCH] Add tests for index import/export across encryption modes --- src/tests/test_index_import_export.py | 55 +++++++++++++++++++++++++++ 1 file changed, 55 insertions(+) create mode 100644 src/tests/test_index_import_export.py diff --git a/src/tests/test_index_import_export.py b/src/tests/test_index_import_export.py new file mode 100644 index 0000000..2910ee1 --- /dev/null +++ b/src/tests/test_index_import_export.py @@ -0,0 +1,55 @@ +from pathlib import Path +from tempfile import TemporaryDirectory + +import pytest +import sys +from cryptography.fernet import Fernet + +sys.path.append(str(Path(__file__).resolve().parents[1])) + +from password_manager.encryption import EncryptionManager +from password_manager.vault import Vault +from utils.key_derivation import derive_index_key, EncryptionMode + +SEED = "abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon abandon about" +PASSWORD = "passw0rd" + + +def setup_vault(tmp: Path, mode: EncryptionMode) -> Vault: + key = derive_index_key(SEED, PASSWORD, mode) + enc_mgr = EncryptionManager(key, tmp) + enc_mgr.encrypt_parent_seed(SEED) + return Vault(enc_mgr, tmp) + + +@pytest.mark.parametrize( + "mode", + [ + EncryptionMode.SEED_ONLY, + EncryptionMode.SEED_PLUS_PW, + EncryptionMode.PW_ONLY, + ], +) +def test_index_export_import_round_trip(mode): + with TemporaryDirectory() as td: + tmp = Path(td) + vault = setup_vault(tmp, mode) + + original = {"passwords": {"0": {"website": "example"}}} + vault.save_index(original) + + encrypted = vault.get_encrypted_index() + assert isinstance(encrypted, bytes) + + vault.save_index({"passwords": {"0": {"website": "changed"}}}) + vault.decrypt_and_save_index_from_nostr(encrypted) + + loaded = vault.load_index() + assert loaded["passwords"] == original["passwords"] + + +def test_get_encrypted_index_missing_file(tmp_path): + key = Fernet.generate_key() + enc_mgr = EncryptionManager(key, tmp_path) + vault = Vault(enc_mgr, tmp_path) + assert vault.get_encrypted_index() is None