From fa69e6b862da3bdc2daf6af4716178b3bfa4e643 Mon Sep 17 00:00:00 2001 From: whale Date: Sun, 5 Jul 2026 22:02:00 +0800 Subject: [PATCH] =?UTF-8?q?fix(shortcuts):=20=E4=BF=AE=E5=A4=8D=20mileston?= =?UTF-8?q?e=20+close=20=E8=B7=AF=E5=BE=84=E5=B9=B6=E8=A1=A5=E5=9B=9E?= =?UTF-8?q?=E5=BD=92=E6=B5=8B=E8=AF=95?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit close 命令 API URL 误拼为 {repo_path}/{owner}/milestones/{id}/update_status(Owner 重复、Repo 丢失、缺 /v1),修正为 /v1/{owner}/{repo}/milestones/{id}/update_status;新增 TestMilestoneClose 回归测试。 Co-Authored-By: Claude --- shortcuts/milestone/milestone.go | 2 +- shortcuts/milestone/milestone_test.go | 27 +++++++++++++++++++++++++++ 2 files changed, 28 insertions(+), 1 deletion(-) diff --git a/shortcuts/milestone/milestone.go b/shortcuts/milestone/milestone.go index 5fe6751..f3b1d45 100644 --- a/shortcuts/milestone/milestone.go +++ b/shortcuts/milestone/milestone.go @@ -114,7 +114,7 @@ func Shortcuts() []*common.Shortcut { body := map[string]interface{}{ "status": "closed", } - env, err := ctx.CallAPI("POST", fmt.Sprintf("%s/%s/milestones/%s/update_status", ctx.RepoPath(), ctx.Owner, id), body) + env, err := ctx.CallAPI("POST", fmt.Sprintf("%s/milestones/%s/update_status", v1Path(ctx), id), body) if err != nil { return err } diff --git a/shortcuts/milestone/milestone_test.go b/shortcuts/milestone/milestone_test.go index 3919a45..f697230 100644 --- a/shortcuts/milestone/milestone_test.go +++ b/shortcuts/milestone/milestone_test.go @@ -115,3 +115,30 @@ func TestMilestoneDelete(t *testing.T) { t.Fatalf("delete failed: %v", err) } } + +func TestMilestoneClose(t *testing.T) { + var closePayload map[string]interface{} + server := common.NewTestServer(t, func(w http.ResponseWriter, r *http.Request) { + // Regression guard: +close must hit /v1/{owner}/{repo}/milestones/{id}/update_status + // (previously malformed to /{owner}/{repo}/{owner}/milestones/{id}/update_status — Owner duplicated, Repo dropped, no /v1). + if r.Method == "POST" && r.URL.Path == "/v1/owner/repo/milestones/1/update_status.json" { + closePayload = common.DecodeJSON(t, r) + common.WriteJSON(t, w, map[string]interface{}{ + "status": 0, + "message": "更新成功", + }) + } else { + t.Fatalf("unexpected request: %s %s", r.Method, r.URL.Path) + } + }) + defer server.Close() + + ctx := common.NewTestContext(t, server, "owner", "repo", map[string]string{ + "id": "1", + }) + err := common.RunShortcut(t, Shortcuts(), "close", ctx) + if err != nil { + t.Fatalf("close failed: %v", err) + } + common.AssertEqual(t, closePayload["status"], "closed") +}