Skip to content

Commit 7cf49c1

Browse files
committed
fix(tests): patch get_engine in _tool_ctx error-path tests
_tool_ctx() calls get_engine() directly rather than accepting a db session, causing it to bypass the test engine patch from the db fixture. Patch get_engine to return the test engine before each test and restore after.
1 parent 1cbb5aa commit 7cf49c1

1 file changed

Lines changed: 32 additions & 12 deletions

File tree

tests/test_mcp/test_server.py

Lines changed: 32 additions & 12 deletions
Original file line numberDiff line numberDiff line change
@@ -70,9 +70,13 @@ def test_tool_ctx_no_access_token(monkeypatch):
7070
pass
7171

7272

73-
def test_tool_ctx_revoked_pat(db, monkeypatch):
73+
def test_tool_ctx_revoked_pat(db, monkeypatch, engine):
7474
"""_tool_ctx raises ToolError when resolve_token returns None (revoked/expired PAT)."""
75-
from fourdpocket.mcp import server
75+
import fourdpocket.db.session as db_module
76+
77+
# Patch get_engine so _tool_ctx() uses the test engine
78+
original_get_engine = db_module.get_engine
79+
db_module.get_engine = lambda: engine
7680

7781
# Create a valid user
7882
user_obj = User(
@@ -94,17 +98,25 @@ def fake_get_token():
9498
def fake_resolve(db_session, token_str):
9599
return None # Simulates revoked/expired token
96100

101+
from fourdpocket.mcp import server as server_module
102+
97103
monkeypatch.setattr("fourdpocket.mcp.server.get_access_token", fake_get_token)
98104
monkeypatch.setattr("fourdpocket.mcp.server.resolve_token", fake_resolve)
99105

100-
with pytest.raises(server.tools_mod.ToolError, match="revoked|expired"):
101-
with server._tool_ctx():
106+
with pytest.raises(server_module.tools_mod.ToolError, match="revoked|expired"):
107+
with server_module._tool_ctx():
102108
pass
103109

110+
db_module.get_engine = original_get_engine
104111

105-
def test_tool_ctx_inactive_user(db, monkeypatch):
112+
113+
def test_tool_ctx_inactive_user(db, monkeypatch, engine):
106114
"""_tool_ctx raises ToolError when the resolved user is inactive."""
107-
from fourdpocket.mcp import server
115+
import fourdpocket.db.session as db_module
116+
from fourdpocket.mcp import server as server_module
117+
118+
original_get_engine = db_module.get_engine
119+
db_module.get_engine = lambda: engine
108120

109121
# Create an inactive user with a PAT
110122
inactive_user = User(
@@ -145,14 +157,20 @@ def fake_resolve(db_session, token_str):
145157
monkeypatch.setattr("fourdpocket.mcp.server.get_access_token", fake_get_token)
146158
monkeypatch.setattr("fourdpocket.mcp.server.resolve_token", fake_resolve)
147159

148-
with pytest.raises(server.tools_mod.ToolError, match="disabled"):
149-
with server._tool_ctx():
160+
with pytest.raises(server_module.tools_mod.ToolError, match="disabled"):
161+
with server_module._tool_ctx():
150162
pass
151163

164+
db_module.get_engine = original_get_engine
165+
152166

153-
def test_tool_ctx_deleted_user(db, monkeypatch):
167+
def test_tool_ctx_deleted_user(db, monkeypatch, engine):
154168
"""_tool_ctx raises ToolError when the resolved user no longer exists in DB."""
155-
from fourdpocket.mcp import server
169+
import fourdpocket.db.session as db_module
170+
from fourdpocket.mcp import server as server_module
171+
172+
original_get_engine = db_module.get_engine
173+
db_module.get_engine = lambda: engine
156174

157175
# Create a user, then delete them (simulate user_id points to nothing)
158176
ghost_user = User(
@@ -197,10 +215,12 @@ def fake_resolve(db_session, token_str):
197215
monkeypatch.setattr("fourdpocket.mcp.server.get_access_token", fake_get_token)
198216
monkeypatch.setattr("fourdpocket.mcp.server.resolve_token", fake_resolve)
199217

200-
with pytest.raises(server.tools_mod.ToolError, match="disabled"):
201-
with server._tool_ctx():
218+
with pytest.raises(server_module.tools_mod.ToolError, match="disabled"):
219+
with server_module._tool_ctx():
202220
pass
203221

222+
db_module.get_engine = original_get_engine
223+
204224

205225
# ─── Tool call wrapper ───────────────────────────────────────────────────────
206226

0 commit comments

Comments
 (0)