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>
release/v1.15
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
DecodeJSON(t, resp, &apiMilestone2)
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"`
// swagger:strfmt date-time
Deadline *time.Time `json:"due_on"`
// enum: open,closed
State string `json:"state"`
}
// 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()),
}
if form.State == "closed" {
milestone.IsClosed = true
milestone.ClosedDateUnix = timeutil.TimeStampNow()
}
if err := models.NewMilestone(milestone); err != nil {
ctx.Error(http.StatusInternalServerError, "NewMilestone", err)
return

View File

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