From 8414ee53c6851bf120a3ee136b497b06f53de30f Mon Sep 17 00:00:00 2001 From: thePR0M3TH3AN <53631862+PR0M3TH3AN@users.noreply.github.com> Date: Fri, 11 Jul 2025 20:06:05 -0400 Subject: [PATCH] Trigger vault sync after imports --- src/password_manager/manager.py | 1 + src/seedpass/api.py | 1 + src/seedpass/cli.py | 1 + src/tests/test_api_new_endpoints.py | 4 ++++ src/tests/test_typer_cli.py | 27 ++++++++++++++++++++++++++- 5 files changed, 33 insertions(+), 1 deletion(-) diff --git a/src/password_manager/manager.py b/src/password_manager/manager.py index 0b68745..e7b5349 100644 --- a/src/password_manager/manager.py +++ b/src/password_manager/manager.py @@ -3257,6 +3257,7 @@ class PasswordManager: parent_seed=self.parent_seed, ) print(colored("Database imported successfully.", "green")) + self.sync_vault() except Exception as e: logging.error(f"Failed to import database: {e}", exc_info=True) print(colored(f"Error: Failed to import database: {e}", "red")) diff --git a/src/seedpass/api.py b/src/seedpass/api.py index e87c45a..916a162 100644 --- a/src/seedpass/api.py +++ b/src/seedpass/api.py @@ -513,6 +513,7 @@ async def import_vault( if not path: raise HTTPException(status_code=400, detail="Missing file or path") _pm.handle_import_database(Path(path)) + _pm.sync_vault() return {"status": "ok"} diff --git a/src/seedpass/cli.py b/src/seedpass/cli.py index e67dd94..e7694b4 100644 --- a/src/seedpass/cli.py +++ b/src/seedpass/cli.py @@ -372,6 +372,7 @@ def vault_import( """Import a vault from an encrypted JSON file.""" pm = _get_pm(ctx) pm.handle_import_database(Path(file)) + pm.sync_vault() typer.echo(str(file)) diff --git a/src/tests/test_api_new_endpoints.py b/src/tests/test_api_new_endpoints.py index f8ac6f0..758714c 100644 --- a/src/tests/test_api_new_endpoints.py +++ b/src/tests/test_api_new_endpoints.py @@ -218,6 +218,7 @@ def test_vault_import_via_path(client, tmp_path): called["path"] = path api._pm.handle_import_database = import_db + api._pm.sync_vault = lambda: called.setdefault("sync", True) file_path = tmp_path / "b.json" file_path.write_text("{}") @@ -230,6 +231,7 @@ def test_vault_import_via_path(client, tmp_path): assert res.status_code == 200 assert res.json() == {"status": "ok"} assert called["path"] == file_path + assert called.get("sync") is True def test_vault_import_via_upload(client, tmp_path): @@ -240,6 +242,7 @@ def test_vault_import_via_upload(client, tmp_path): called["path"] = path api._pm.handle_import_database = import_db + api._pm.sync_vault = lambda: called.setdefault("sync", True) file_path = tmp_path / "c.json" file_path.write_text("{}") @@ -253,6 +256,7 @@ def test_vault_import_via_upload(client, tmp_path): assert res.status_code == 200 assert res.json() == {"status": "ok"} assert isinstance(called.get("path"), Path) + assert called.get("sync") is True def test_vault_lock_endpoint(client): diff --git a/src/tests/test_typer_cli.py b/src/tests/test_typer_cli.py index afa9ade..90d4067 100644 --- a/src/tests/test_typer_cli.py +++ b/src/tests/test_typer_cli.py @@ -88,7 +88,9 @@ def test_vault_import(monkeypatch, tmp_path): called["path"] = path pm = SimpleNamespace( - handle_import_database=import_db, select_fingerprint=lambda fp: None + handle_import_database=import_db, + select_fingerprint=lambda fp: None, + sync_vault=lambda: None, ) monkeypatch.setattr(cli, "PasswordManager", lambda: pm) in_path = tmp_path / "in.json" @@ -98,6 +100,29 @@ def test_vault_import(monkeypatch, tmp_path): assert called["path"] == in_path +def test_vault_import_triggers_sync(monkeypatch, tmp_path): + called = {} + + def import_db(path): + called["path"] = path + + def sync(): + called["sync"] = True + + pm = SimpleNamespace( + handle_import_database=import_db, + sync_vault=sync, + select_fingerprint=lambda fp: None, + ) + monkeypatch.setattr(cli, "PasswordManager", lambda: pm) + in_path = tmp_path / "in.json" + in_path.write_text("{}") + result = runner.invoke(app, ["vault", "import", "--file", str(in_path)]) + assert result.exit_code == 0 + assert called["path"] == in_path + assert called.get("sync") is True + + def test_vault_change_password(monkeypatch): called = {}