diff --git a/gitea/issue.go b/gitea/issue.go index 660e7c5..603d23d 100644 --- a/gitea/issue.go +++ b/gitea/issue.go @@ -289,6 +289,17 @@ func (c *Client) EditIssue(owner, repo string, index int64, opt EditIssueOption) return issue, resp, err } +// DeleteIssue delete a issue from a repository +func (c *Client) DeleteIssue(user, repo string, id int64) (*Response, error) { + if err := escapeValidatePathSegments(&user, &repo); err != nil { + return nil, err + } + _, resp, err := c.getResponse("DELETE", + fmt.Sprintf("/repos/%s/%s/issues/%d", user, repo, id), + nil, nil) + return resp, err +} + func (c *Client) issueBackwardsCompatibility(issue *Issue) { if c.checkServerVersionGreaterThanOrEqual(version1_12_0) != nil { c.mutex.RLock() diff --git a/gitea/issue_test.go b/gitea/issue_test.go index 9db6fd8..6f7bdab 100644 --- a/gitea/issue_test.go +++ b/gitea/issue_test.go @@ -22,6 +22,7 @@ func TestIssue(t *testing.T) { time.Sleep(100 * time.Millisecond) editIssues(t, c) listIssues(t, c) + deleteIssue(t, c) } func createIssue(t *testing.T, c *Client) { @@ -47,6 +48,18 @@ func createIssue(t *testing.T, c *Client) { createTestIssue(t, c, repo.Name, "", "you never know", nil, nil, mile.ID, nil, true, true) } +func deleteIssue(t *testing.T, c *Client) { + log.Println("== TestDeleteIssues ==") + + user, _, err := c.GetMyUserInfo() + assert.NoError(t, err) + repo, _ := createTestRepo(t, "IssueTestsRepo", c) + + issue := createTestIssue(t, c, repo.Name, "Deleteable Issue", "", nil, nil, 0, nil, false, false) + _, err = c.DeleteIssue(user.UserName, repo.Name, issue.Index) + assert.NoError(t, err) +} + func editIssues(t *testing.T, c *Client) { log.Println("== TestEditIssues ==") il, _, err := c.ListIssues(ListIssueOption{KeyWord: "soon"}) @@ -104,7 +117,7 @@ func listIssues(t *testing.T, c *Client) { assert.Len(t, issues, 3) } -func createTestIssue(t *testing.T, c *Client, repoName, title, body string, assignees []string, deadline *time.Time, milestone int64, labels []int64, closed, shouldFail bool) { +func createTestIssue(t *testing.T, c *Client, repoName, title, body string, assignees []string, deadline *time.Time, milestone int64, labels []int64, closed, shouldFail bool) *Issue { user, _, err := c.GetMyUserInfo() assert.NoError(t, err) issue, _, e := c.CreateIssue(user.UserName, repoName, CreateIssueOption{ @@ -118,7 +131,7 @@ func createTestIssue(t *testing.T, c *Client, repoName, title, body string, assi }) if shouldFail { assert.Error(t, e) - return + return nil } assert.NoError(t, e) assert.NotEmpty(t, issue) @@ -137,4 +150,5 @@ func createTestIssue(t *testing.T, c *Client, repoName, title, body string, assi } else { assert.Empty(t, issue.Closed) } + return issue }