1
0
mirror of https://github.com/interviewstreet/go-jira.git synced 2025-03-27 21:38:54 +02:00

feat(issues): Add GetEditMeta on issue

This calls the editmeta endpoint on an issue
API docs: https://docs.atlassian.com/DAC/rest/jira/6.1.html#d2e1364
This commit is contained in:
Robert Bittle 2020-05-02 17:06:44 -04:00 committed by GitHub
parent 1fc10e0606
commit a783764b52
No known key found for this signature in database
GPG Key ID: 4AEE18F83AFDEB23
2 changed files with 103 additions and 0 deletions

View File

@ -14,6 +14,11 @@ type CreateMetaInfo struct {
Projects []*MetaProject `json:"projects,omitempty"`
}
// EditMetaInfo contains information about fields and their attributed to edit a ticket.
type EditMetaInfo struct {
Fields tcontainer.MarshalMap `json:"fields,omitempty"`
}
// MetaProject is the meta information about a project returned from createmeta api
type MetaProject struct {
Expand string `json:"expand,omitempty"`
@ -73,6 +78,25 @@ func (s *IssueService) GetCreateMetaWithOptions(options *GetQueryOptions) (*Crea
return meta, resp, nil
}
// GetEditMeta makes the api call to get the edit meta information for an issue
func (s *IssueService) GetEditMeta(issue *Issue) (*EditMetaInfo, *Response, error) {
apiEndpoint := fmt.Sprintf("/rest/api/2/issue/%s/editmeta", issue.Key)
req, err := s.client.NewRequest("GET", apiEndpoint, nil)
if err != nil {
return nil, nil, err
}
meta := new(EditMetaInfo)
resp, err := s.client.Do(req, meta)
if err != nil {
return nil, resp, err
}
return meta, resp, nil
}
// GetProjectWithName returns a project with "name" from the meta information received. If not found, this returns nil.
// The comparison of the name is case insensitive.
func (m *CreateMetaInfo) GetProjectWithName(name string) *MetaProject {

View File

@ -3,6 +3,7 @@ package jira
import (
"fmt"
"net/http"
"strings"
"testing"
)
@ -378,6 +379,84 @@ func TestIssueService_GetCreateMeta_Success(t *testing.T) {
}
func TestIssueService_GetEditMeta_Success(t *testing.T) {
setup()
defer teardown()
testAPIEndpoint := "/rest/api/2/issue/PROJ-9001/editmeta"
testMux.HandleFunc(testAPIEndpoint, func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
testRequestURL(t, r, testAPIEndpoint)
fmt.Fprint(w, `{
"fields": {
"summary": {
"required": true,
"schema": {
"type": "string",
"system": "summary"
},
"name": "Summary",
"hasDefaultValue": false,
"operations": [
"set"
]
},
"attachment": {
"required": false,
"schema": {
"type": "array",
"items": "attachment",
"system": "attachment"
},
"name": "Attachment",
"hasDefaultValue": false,
"operations": [
]
}
}
}`)
})
editMeta, _, err := testClient.Issue.GetEditMeta(&Issue{Key: "PROJ-9001"})
if err != nil {
t.Errorf("Expected nil error but got %s", err)
}
requiredFields := 0
fields := editMeta.Fields
for _, value := range fields {
for key, value := range value.(map[string]interface{}) {
if key == "required" && value == true {
requiredFields = requiredFields + 1
}
}
}
summary := fields["summary"].(map[string]interface{})
attachment := fields["attachment"].(map[string]interface{})
if summary["required"] != true {
t.Error("Expected summary to be required")
}
if attachment["required"] != false {
t.Error("Expected attachment to not be required")
}
}
func TestIssueService_GetEditMeta_Fail(t *testing.T) {
_, _, err := testClient.Issue.GetEditMeta(&Issue{Key: "PROJ-9001"})
if err == nil {
t.Error("Expected to receive an error, received nil instead")
}
expectedError := "connection refused"
if !strings.Contains(err.Error(), expectedError) {
t.Errorf("Expected to receive error containing %s, received %v instead", expectedError, err.Error())
}
}
func TestMetaIssueType_GetCreateMetaWithOptions(t *testing.T) {
setup()
defer teardown()