mirror of
				https://gitee.com/gitea/gitea
				synced 2025-11-04 08:30:25 +08:00 
			
		
		
		
	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:
		@@ -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)
 | 
			
		||||
}
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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
 | 
			
		||||
 
 | 
			
		||||
@@ -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"
 | 
			
		||||
 
 | 
			
		||||
		Reference in New Issue
	
	Block a user