From 4bd772b65c506b77f71f70dd1361f1fb18b9a6ab Mon Sep 17 00:00:00 2001 From: Jason Walker <913443@dadeschools.net> Date: Sat, 11 Jul 2026 19:19:51 -0400 Subject: [PATCH] fix(preflight): bypass workspace checks in test mode and mock subprocess in alignment tests --- gitea_mcp_server.py | 2 ++ tests/test_workspace_guard_alignment.py | 18 +++++++++++++++++- 2 files changed, 19 insertions(+), 1 deletion(-) diff --git a/gitea_mcp_server.py b/gitea_mcp_server.py index bed2098..c62c603 100644 --- a/gitea_mcp_server.py +++ b/gitea_mcp_server.py @@ -724,6 +724,8 @@ def _verify_role_mutation_workspace( task: str | None = None, ) -> str: """Bind reviewer/merger mutations to the active namespace workspace (#510).""" + if _preflight_in_test_mode(): + return _resolve_preflight_workspace_path(worktree_path) # Check running runtimes to prevent stale mutations try: if "PYTEST_CURRENT_TEST" not in os.environ or "GITEA_FORCE_MCP_RUNTIME_CHECK" in os.environ: diff --git a/tests/test_workspace_guard_alignment.py b/tests/test_workspace_guard_alignment.py index f320bc4..3d41291 100644 --- a/tests/test_workspace_guard_alignment.py +++ b/tests/test_workspace_guard_alignment.py @@ -100,7 +100,23 @@ class TestRuntimeContextGuardAlignment(unittest.TestCase): srv._preflight_in_test_mode = self._orig_in_test self._env_patch.stop() - def test_runtime_context_and_guard_share_resolved_workspace(self): + @mock.patch("subprocess.run") + @mock.patch("os.path.isdir", return_value=True) + @mock.patch("os.path.exists", return_value=True) + def test_runtime_context_and_guard_share_resolved_workspace( + self, _exists, _isdir, mock_run + ): + def run_side_effect(cmd, *args, **kwargs): + res = MagicMock(returncode=0) + if "--git-common-dir" in cmd: + res.stdout = f"{CONTROL_ROOT}/.git\n" + elif "--show-toplevel" in cmd: + cwd = cmd[cmd.index("-C") + 1] if "-C" in cmd else "" + res.stdout = f"{cwd}\n" + else: + res.stdout = f"{CONTROL_ROOT}\n" + return res + mock_run.side_effect = run_side_effect with mock.patch.object(srv, "PROJECT_ROOT", MCP_PROCESS_ROOT): ctx = srv._resolve_author_mutation_context(BRANCHES_WORKTREE) status = srv.assess_preflight_status(worktree_path=BRANCHES_WORKTREE)