diff --git a/modules/structs/issue_milestone.go b/modules/structs/issue_milestone.go index 5932ffdedcb..8acb94c3a2c 100644 --- a/modules/structs/issue_milestone.go +++ b/modules/structs/issue_milestone.go @@ -58,5 +58,5 @@ type EditMilestoneOption struct { State *string `json:"state"` // Deadline is the due date for the milestone, use null or empty string to remove the deadline // swagger:strfmt date-time - Deadline optional.Option[*string] `json:"due_on,omitzero"` + Deadline optional.Option[*string] `json:"due_on,omitzero" form:"-"` // go-chi/binding panics validating the nil element a JSON null decodes to } diff --git a/tests/integration/api_issue_milestone_test.go b/tests/integration/api_issue_milestone_test.go index cb3f87072fd..8a49a7649c6 100644 --- a/tests/integration/api_issue_milestone_test.go +++ b/tests/integration/api_issue_milestone_test.go @@ -49,9 +49,11 @@ func TestAPIIssuesMilestone(t *testing.T) { apiMilestone2 := DecodeJSON(t, resp, &structs.Milestone{}) assert.EqualValues(t, "closed", apiMilestone2.State) - req = NewRequestWithJSON(t, "PATCH", urlStr, map[string]any{"due_on": ""}).AddTokenAuth(token) - resp = MakeRequest(t, req, http.StatusOK) - assert.Nil(t, DecodeJSON(t, resp, &structs.Milestone{}).Deadline) + for _, dueOn := range []any{"", nil} { + req = NewRequestWithJSON(t, "PATCH", urlStr, map[string]any{"due_on": dueOn}).AddTokenAuth(token) + resp = MakeRequest(t, req, http.StatusOK) + assert.Nil(t, DecodeJSON(t, resp, &structs.Milestone{}).Deadline) + } req = NewRequestWithJSON(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/milestones", owner.Name, repo.Name), structs.CreateMilestoneOption{ Title: "wow",