API allow to create closed milestones (#11745)

* API allow to create closed milestones

* set CloseDate too

Co-authored-by: Lauris BH <lauris@nix.lv>
Co-authored-by: techknowlogick <techknowlogick@gitea.io>
This commit is contained in:
6543 2020-06-10 00:01:36 +02:00 committed by GitHub
parent 19db3f4f0a
commit 1ac46186ff
No known key found for this signature in database
GPG key ID: 4AEE18F83AFDEB23
4 changed files with 28 additions and 0 deletions

View file

@ -44,4 +44,17 @@ func TestAPIIssuesMilestone(t *testing.T) {
var apiMilestone2 structs.Milestone var apiMilestone2 structs.Milestone
DecodeJSON(t, resp, &apiMilestone2) DecodeJSON(t, resp, &apiMilestone2)
assert.EqualValues(t, "closed", apiMilestone2.State) assert.EqualValues(t, "closed", apiMilestone2.State)
req = NewRequestWithJSON(t, "POST", fmt.Sprintf("/api/v1/repos/%s/%s/milestones?token=%s", owner.Name, repo.Name, token), structs.CreateMilestoneOption{
Title: "wow",
Description: "closed one",
State: "closed",
})
resp = session.MakeRequest(t, req, http.StatusCreated)
DecodeJSON(t, resp, &apiMilestone)
assert.Equal(t, "wow", apiMilestone.Title)
assert.Equal(t, structs.StateClosed, apiMilestone.State)
req = NewRequest(t, "DELETE", fmt.Sprintf("/api/v1/repos/%s/%s/milestones/%d?token=%s", owner.Name, repo.Name, apiMilestone.ID, token))
resp = session.MakeRequest(t, req, http.StatusNoContent)
} }

View file

@ -28,6 +28,8 @@ type CreateMilestoneOption struct {
Description string `json:"description"` Description string `json:"description"`
// swagger:strfmt date-time // swagger:strfmt date-time
Deadline *time.Time `json:"due_on"` Deadline *time.Time `json:"due_on"`
// enum: open,closed
State string `json:"state"`
} }
// EditMilestoneOption options for editing a milestone // EditMilestoneOption options for editing a milestone

View file

@ -144,6 +144,11 @@ func CreateMilestone(ctx *context.APIContext, form api.CreateMilestoneOption) {
DeadlineUnix: timeutil.TimeStamp(form.Deadline.Unix()), DeadlineUnix: timeutil.TimeStamp(form.Deadline.Unix()),
} }
if form.State == "closed" {
milestone.IsClosed = true
milestone.ClosedDateUnix = timeutil.TimeStampNow()
}
if err := models.NewMilestone(milestone); err != nil { if err := models.NewMilestone(milestone); err != nil {
ctx.Error(http.StatusInternalServerError, "NewMilestone", err) ctx.Error(http.StatusInternalServerError, "NewMilestone", err)
return return

View file

@ -11384,6 +11384,14 @@
"format": "date-time", "format": "date-time",
"x-go-name": "Deadline" "x-go-name": "Deadline"
}, },
"state": {
"type": "string",
"enum": [
"open",
"closed"
],
"x-go-name": "State"
},
"title": { "title": {
"type": "string", "type": "string",
"x-go-name": "Title" "x-go-name": "Title"