From 0fc204042d5e472a86f468e389578a4e83604e79 Mon Sep 17 00:00:00 2001 From: Teknium <127238744+teknium1@users.noreply.github.com> Date: Thu, 3 Sep 2026 02:06:29 -0700 Subject: [PATCH] =?UTF-8?q?fix(integration):=20sessions=20CLI=20=E2=80=94?= =?UTF-8?q?=20close=20db=20via=20try/finally,=20complete=20test=20doubles?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit cmd_sessions used 'with db:' which breaks test doubles lacking the context manager protocol (13 reds in test_sessions_pin/delete/export). Restore the explicit try/finally db.close() (same semantics for real SessionDB). Add get_session/count_prune_matches to the FakeDB doubles in test_sessions_delete instead of re-adding getattr guards to production code. --- hermes_cli/sessions_cmd.py | 4 +++- tests/hermes_cli/test_sessions_delete.py | 6 ++++++ 2 files changed, 9 insertions(+), 1 deletion(-) diff --git a/hermes_cli/sessions_cmd.py b/hermes_cli/sessions_cmd.py index a1916f5b3b..3b5133ec2a 100644 --- a/hermes_cli/sessions_cmd.py +++ b/hermes_cli/sessions_cmd.py @@ -950,9 +950,11 @@ def cmd_sessions(args, sessions_parser=None): except Exception as e: print(f"Error: Could not open session database: {e}") return 1 - with db: + try: handler = _DB_HANDLERS.get(action) if handler is None: sessions_parser.print_help() return return handler(db, args) + finally: + db.close() diff --git a/tests/hermes_cli/test_sessions_delete.py b/tests/hermes_cli/test_sessions_delete.py index 7650a9bbef..53acbfa8d2 100644 --- a/tests/hermes_cli/test_sessions_delete.py +++ b/tests/hermes_cli/test_sessions_delete.py @@ -14,6 +14,9 @@ def test_sessions_delete_accepts_unique_id_prefix(monkeypatch, capsys): captured["resolved_from"] = session_id return "20260315_092437_c9a6ff" + def get_session(self, session_id): + return {"id": session_id, "pinned": 0} + def delete_session(self, session_id, **kwargs): captured["deleted"] = session_id return True @@ -78,6 +81,9 @@ def _run_prune(monkeypatch, capsys, argv_tail, candidates=None, skipped_open=0): assert kwargs == seen return skipped_open + def count_prune_matches(self, **kwargs): + return len(rows) + def prune_sessions(self, **kwargs): return len(rows)