diff --git a/issue.go b/issue.go index e5113fe..3cc9c08 100644 --- a/issue.go +++ b/issue.go @@ -608,6 +608,25 @@ func (s *IssueService) Update(issue *Issue) (*Issue, *Response, error) { return &ret, resp, nil } +// Update updates an issue from a JSON representation. The issue is found by key. +// +// https://docs.atlassian.com/jira/REST/7.4.0/#api/2/issue-editIssue +func (s *IssueService) UpdateIssue(jiraId string, data map[string]interface{}) (*Response, error) { + apiEndpoint := fmt.Sprintf("rest/api/2/issue/%v", jiraId) + req, err := s.client.NewRequest("PUT", apiEndpoint, data) + if err != nil { + return nil, err + } + resp, err := s.client.Do(req, nil) + if err != nil { + return resp, err + } + + // This is just to follow the rest of the API's convention of returning an issue. + // Returning the same pointer here is pointless, so we return a copy instead. + return resp, nil +} + // AddComment adds a new comment to issueID. // // JIRA API docs: https://docs.atlassian.com/jira/REST/latest/#api/2/issue-addComment diff --git a/issue_test.go b/issue_test.go index 940a38b..b05d9e3 100644 --- a/issue_test.go +++ b/issue_test.go @@ -103,6 +103,29 @@ func TestIssueService_Update(t *testing.T) { } } +func TestIssueService_UpdateIssue(t *testing.T) { + setup() + defer teardown() + testMux.HandleFunc("/rest/api/2/issue/PROJ-9001", func(w http.ResponseWriter, r *http.Request) { + testMethod(t, r, "PUT") + testRequestURL(t, r, "/rest/api/2/issue/PROJ-9001") + + w.WriteHeader(http.StatusNoContent) + }) + jId := "PROJ-9001" + i := make(map[string]interface{}) + fields := make(map[string]interface{}) + i["fields"] = fields + resp, err := testClient.Issue.UpdateIssue(jId, i) + if resp == nil { + t.Error("Expected resp. resp is nil") + } + if err != nil { + t.Errorf("Error given: %s", err) + } + +} + func TestIssueService_AddComment(t *testing.T) { setup() defer teardown()