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") +}