From 034e5795cde3e3790027f03f7023ffa13784c000 Mon Sep 17 00:00:00 2001 From: thePR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> Date: Tue, 1 Jul 2025 13:33:33 -0400 Subject: [PATCH] Add backup restore workflow tests --- src/tests/test_backup_restore.py | 57 ++++++++++++++++++++++++++++++++ 1 file changed, 57 insertions(+) create mode 100644 src/tests/test_backup_restore.py diff --git a/src/tests/test_backup_restore.py b/src/tests/test_backup_restore.py new file mode 100644 index 0000000..56d9329 --- /dev/null +++ b/src/tests/test_backup_restore.py @@ -0,0 +1,57 @@ +import os +import sys +import time +from pathlib import Path +from tempfile import TemporaryDirectory + +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 password_manager.backup import BackupManager + + +def test_backup_restore_workflow(monkeypatch): + with TemporaryDirectory() as tmpdir: + fp_dir = Path(tmpdir) + key = Fernet.generate_key() + enc_mgr = EncryptionManager(key, fp_dir) + vault = Vault(enc_mgr, fp_dir) + backup_mgr = BackupManager(fp_dir) + + index_file = fp_dir / "seedpass_passwords_db.json.enc" + + data1 = {"passwords": {"0": {"website": "a", "length": 10}}} + vault.save_index(data1) + os.utime(index_file, (1, 1)) + + monkeypatch.setattr(time, "time", lambda: 1111) + backup_mgr.create_backup() + backup1 = fp_dir / "backups" / "passwords_db_backup_1111.json.enc" + assert backup1.exists() + assert backup1.stat().st_mode & 0o777 == 0o600 + + data2 = {"passwords": {"0": {"website": "b", "length": 12}}} + vault.save_index(data2) + os.utime(index_file, (2, 2)) + + monkeypatch.setattr(time, "time", lambda: 2222) + backup_mgr.create_backup() + backup2 = fp_dir / "backups" / "passwords_db_backup_2222.json.enc" + assert backup2.exists() + assert backup2.stat().st_mode & 0o777 == 0o600 + + vault.save_index({"passwords": {"temp": {}}}) + backup_mgr.restore_latest_backup() + assert vault.load_index() == data2 + + vault.save_index({"passwords": {}}) + backup_mgr.restore_backup_by_timestamp(1111) + assert vault.load_index() == data1 + + backup1.unlink() + current = vault.load_index() + backup_mgr.restore_backup_by_timestamp(1111) + assert vault.load_index() == current