diff --git a/issue.go b/issue.go index d5e734d..71de7e2 100644 --- a/issue.go +++ b/issue.go @@ -783,3 +783,21 @@ func InitIssueWithMetaAndFields(metaProject *MetaProject, metaIssuetype *MetaIss return issue, nil } + +// Delete will delete a specified issue. +func (s *IssueService) Delete(issueID string) (*Response, error) { + apiEndpoint := fmt.Sprintf("rest/api/2/issue/%s", issueID) + + // to enable deletion of subtasks; without this, the request will fail if the issue has subtasks + deletePayload := make(map[string]interface{}) + deletePayload["deleteSubtasks"] = "true" + content, _ := json.Marshal(deletePayload) + + req, err := s.client.NewRequest("DELETE", apiEndpoint, content) + if err != nil { + return nil, err + } + + resp, err := s.client.Do(req, nil) + return resp, err +} diff --git a/issue_test.go b/issue_test.go index ae97935..345cab7 100644 --- a/issue_test.go +++ b/issue_test.go @@ -957,3 +957,23 @@ func TestInitIssueWithmetaAndFields_FailureWithUnknownValueType(t *testing.T) { } } + +func TestIssueService_Delete(t *testing.T) { + setup() + defer teardown() + testMux.HandleFunc("/rest/api/2/issue/10002", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "DELETE") + testRequestURL(t, r, "/rest/api/2/issue/10002") + + w.WriteHeader(http.StatusNoContent) + fmt.Fprint(w, `{}`) + }) + + resp, err := testClient.Issue.Delete("10002") + if resp.StatusCode != 204 { + t.Error("Expected issue not deleted.") + } + if err != nil { + t.Errorf("Error given: %s", err) + } +}