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:
parent
19db3f4f0a
commit
1ac46186ff
4 changed files with 28 additions and 0 deletions
|
@ -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)
|
||||||
}
|
}
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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
|
||||||
|
|
|
@ -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"
|
||||||
|
|
Loading…
Reference in a new issue