diff --git a/tests/test_review_drafts.py b/tests/test_review_drafts.py index c70a0a7..417c689 100644 --- a/tests/test_review_drafts.py +++ b/tests/test_review_drafts.py @@ -68,8 +68,6 @@ class TestReviewDrafts(unittest.TestCase): @patch("gitea_mcp_server.api_request") def test_save_draft_success(self, mock_api): - print("GITEA_MCP_SERVER FILE:", gitea_mcp_server.__file__) - print("DIR OF GITEA_MCP_SERVER:", dir(gitea_mcp_server)) mock_api.return_value = { "head": {"sha": "headsha1234567890"}, "base": {"ref": "master", "sha": "basesha0987654321"}, @@ -285,3 +283,104 @@ class TestReviewDrafts(unittest.TestCase): ) self.assertFalse(res.get("success")) self.assertIn("worktree binding mismatch", res.get("reasons")[0]) + + @patch("gitea_mcp_server.api_request") + @patch("gitea_mcp_server._fetch_pr_comments") + def test_resume_draft_foreign_lease(self, mock_comments, mock_api): + mock_api.return_value = { + "state": "open", + "head": {"sha": "headsha1234567890"}, + "base": {"ref": "master", "sha": "basesha0987654321"}, + } + gitea_mcp_server.gitea_save_review_draft( + pr_number=587, + action="approve", + body="Good changes", + expected_head_sha="headsha1234567890", + remote="prgs", + org="Scaled-Tech-Consulting", + repo="Gitea-Tools", + worktree_path="/tmp/test-worktree", + ) + reviewer_pr_lease.record_session_lease({ + "pr_number": 587, + "session_id": "my-session", + }) + mock_comments.return_value = [ + { + "id": 9, + "user": {"username": "sysadmin"}, + "body": ( + "\n" + "repo: Scaled-Tech-Consulting/Gitea-Tools\n" + "pr: #587\n" + "reviewer_identity: sysadmin\n" + "profile: prgs-reviewer\n" + "session_id: foreign-session-999\n" + "phase: claimed\n" + ), + } + ] + res = gitea_mcp_server.gitea_resume_review_draft( + pr_number=587, + remote="prgs", + org="Scaled-Tech-Consulting", + repo="Gitea-Tools", + worktree_path="/tmp/test-worktree", + ) + self.assertFalse(res.get("success")) + self.assertTrue( + any("foreign-session-999" in r or "session_id" in r for r in (res.get("reasons") or [])) + ) + + @patch("gitea_mcp_server.api_request") + @patch("gitea_mcp_server._fetch_pr_comments") + @patch("gitea_mcp_server.terminal_review_hard_stop_reasons") + def test_resume_draft_terminal_lock_blocks(self, mock_hard_stop, mock_comments, mock_api): + mock_api.return_value = { + "state": "open", + "head": {"sha": "headsha1234567890"}, + "base": {"ref": "master", "sha": "basesha0987654321"}, + } + gitea_mcp_server.gitea_save_review_draft( + pr_number=587, + action="approve", + body="Good changes", + expected_head_sha="headsha1234567890", + remote="prgs", + org="Scaled-Tech-Consulting", + repo="Gitea-Tools", + worktree_path="/tmp/test-worktree", + ) + reviewer_pr_lease.record_session_lease({ + "pr_number": 587, + "session_id": "session-1234", + }) + mock_comments.return_value = [ + { + "id": 1, + "user": {"username": "sysadmin"}, + "body": ( + "\n" + "repo: Scaled-Tech-Consulting/Gitea-Tools\n" + "pr: #587\n" + "reviewer_identity: sysadmin\n" + "profile: prgs-reviewer\n" + "session_id: session-1234\n" + "phase: claimed\n" + ), + } + ] + mock_hard_stop.return_value = [ + "terminal review mutation already recorded for PR #587 (approve); #332 hard-stop" + ] + res = gitea_mcp_server.gitea_resume_review_draft( + pr_number=587, + remote="prgs", + org="Scaled-Tech-Consulting", + repo="Gitea-Tools", + worktree_path="/tmp/test-worktree", + ) + self.assertFalse(res.get("success")) + self.assertTrue(any("#332" in r or "terminal" in r for r in (res.get("reasons") or []))) +