Files
seedPass/src/tests/test_profile_cleanup.py
2025-08-20 22:15:35 -04:00

51 lines
1.8 KiB
Python

import sys
import importlib
import json
from pathlib import Path
from tempfile import TemporaryDirectory
import pytest
from unittest.mock import patch
sys.path.append(str(Path(__file__).resolve().parents[1]))
def setup_pm(tmp_path):
import constants
import seedpass.core.manager as manager_module
importlib.reload(constants)
importlib.reload(manager_module)
pm = manager_module.PasswordManager.__new__(manager_module.PasswordManager)
pm.encryption_mode = manager_module.EncryptionMode.SEED_ONLY
pm.fingerprint_manager = manager_module.FingerprintManager(constants.APP_DIR)
pm.current_fingerprint = None
pm.state_manager = manager_module.StateManager(constants.APP_DIR)
return pm, constants, manager_module
def test_generate_seed_cleanup_on_failure(monkeypatch):
with TemporaryDirectory() as tmpdir:
tmp_path = Path(tmpdir)
monkeypatch.setattr(Path, "home", lambda: tmp_path)
pm, const, mgr = setup_pm(tmp_path)
with patch("seedpass.core.manager.confirm_action", return_value=True):
monkeypatch.setattr(
pm,
"save_and_encrypt_seed",
lambda seed, d: (_ for _ in ()).throw(RuntimeError("fail")),
)
with pytest.raises(RuntimeError):
pm.generate_new_seed()
# fingerprint list should be empty and only fingerprints.json should remain
assert pm.fingerprint_manager.list_fingerprints() == []
contents = sorted(p.name for p in const.APP_DIR.iterdir())
assert contents == ["fingerprints.json", "seedpass_state.json"]
fp_file = pm.fingerprint_manager.fingerprints_file
with open(fp_file) as f:
data = json.load(f)
assert data.get("fingerprints") == []