1
0
mirror of https://github.com/interviewstreet/go-jira.git synced 2025-04-13 11:40:36 +02:00

feat: Add ResolutionService to retrieve resolutions

This commit is contained in:
Thibaut Rousseau 2018-06-25 17:48:53 +02:00
parent 98a84a4c00
commit fb1ce22699
No known key found for this signature in database
GPG Key ID: BCA6444086610E3D
6 changed files with 212 additions and 9 deletions

View File

@ -226,15 +226,6 @@ type IssueType struct {
AvatarID int `json:"avatarId,omitempty" structs:"avatarId,omitempty"`
}
// Resolution represents a resolution of a JIRA issue.
// Typical types are "Fixed", "Suspended", "Won't Fix", ...
type Resolution struct {
Self string `json:"self" structs:"self"`
ID string `json:"id" structs:"id"`
Description string `json:"description" structs:"description"`
Name string `json:"name" structs:"name"`
}
// Watches represents a type of how many and which user are "observing" a JIRA issue to track the status / updates.
type Watches struct {
Self string `json:"self,omitempty" structs:"self,omitempty"`

View File

@ -37,6 +37,7 @@ type Client struct {
Version *VersionService
Priority *PriorityService
Field *FieldService
Resolution *ResolutionService
}
// NewClient returns a new JIRA API client.
@ -75,6 +76,7 @@ func NewClient(httpClient *http.Client, baseURL string) (*Client, error) {
c.Version = &VersionService{client: c}
c.Priority = &PriorityService{client: c}
c.Field = &FieldService{client: c}
c.Resolution = &ResolutionService{client: c}
return c, nil
}

View File

@ -118,6 +118,9 @@ func TestNewClient_WithServices(t *testing.T) {
if c.Priority == nil {
t.Error("No PriorityService provided")
}
if c.Resolution == nil {
t.Error("No ResolutionService provided")
}
}
func TestCheckResponse(t *testing.T) {

140
mocks/all_resolutions.json Normal file
View File

@ -0,0 +1,140 @@
[
{
"self": "https://issues.apache.org/jira/rest/api/2/resolution/1",
"id": "1",
"description": "A fix for this issue is checked into the tree and tested.",
"name": "Fixed"
},
{
"self": "https://issues.apache.org/jira/rest/api/2/resolution/2",
"id": "2",
"description": "The problem described is an issue which will never be fixed.",
"name": "Won't Fix"
},
{
"self": "https://issues.apache.org/jira/rest/api/2/resolution/3",
"id": "3",
"description": "The problem is a duplicate of an existing issue.",
"name": "Duplicate"
},
{
"self": "https://issues.apache.org/jira/rest/api/2/resolution/6",
"id": "6",
"description": "The problem isn't valid and it can't be fixed.",
"name": "Invalid"
},
{
"self": "https://issues.apache.org/jira/rest/api/2/resolution/4",
"id": "4",
"description": "The problem is not completely described.",
"name": "Incomplete"
},
{
"self": "https://issues.apache.org/jira/rest/api/2/resolution/5",
"id": "5",
"description": "All attempts at reproducing this issue failed, or not enough information was available to reproduce the issue. Reading the code produces no clues as to why this behavior would occur. If more information appears later, please reopen the issue.",
"name": "Cannot Reproduce"
},
{
"self": "https://issues.apache.org/jira/rest/api/2/resolution/7",
"id": "7",
"description": "Later",
"name": "Later"
},
{
"self": "https://issues.apache.org/jira/rest/api/2/resolution/8",
"id": "8",
"description": "The described issue is not actually a problem - it is as designed.",
"name": "Not A Problem"
},
{
"self": "https://issues.apache.org/jira/rest/api/2/resolution/9",
"id": "9",
"description": "Unresolved",
"name": "Unresolved"
},
{
"self": "https://issues.apache.org/jira/rest/api/2/resolution/10",
"id": "10",
"description": "As the name suggests",
"name": "Implemented"
},
{
"self": "https://issues.apache.org/jira/rest/api/2/resolution/11",
"id": "11",
"description": "",
"name": "Done"
},
{
"self": "https://issues.apache.org/jira/rest/api/2/resolution/10000",
"id": "10000",
"description": "This issue was automatically closed",
"name": "Auto Closed"
},
{
"self": "https://issues.apache.org/jira/rest/api/2/resolution/10001",
"id": "10001",
"description": "",
"name": "Pending Closed"
},
{
"self": "https://issues.apache.org/jira/rest/api/2/resolution/10002",
"id": "10002",
"description": "REMIND",
"name": "REMIND"
},
{
"self": "https://issues.apache.org/jira/rest/api/2/resolution/10003",
"id": "10003",
"description": "Resolved",
"name": "Resolved"
},
{
"self": "https://issues.apache.org/jira/rest/api/2/resolution/10004",
"id": "10004",
"description": "Not A Bug",
"name": "Not A Bug"
},
{
"self": "https://issues.apache.org/jira/rest/api/2/resolution/10005",
"id": "10005",
"description": "Workaround",
"name": "Workaround"
},
{
"self": "https://issues.apache.org/jira/rest/api/2/resolution/10006",
"id": "10006",
"description": "Staged",
"name": "Staged"
},
{
"self": "https://issues.apache.org/jira/rest/api/2/resolution/10007",
"id": "10007",
"description": "Delivered",
"name": "Delivered"
},
{
"self": "https://issues.apache.org/jira/rest/api/2/resolution/10008",
"id": "10008",
"description": "Information Provided",
"name": "Information Provided"
},
{
"self": "https://issues.apache.org/jira/rest/api/2/resolution/10009",
"id": "10009",
"description": "Works for Me",
"name": "Works for Me"
},
{
"self": "https://issues.apache.org/jira/rest/api/2/resolution/10010",
"id": "10010",
"description": "Feedback Received",
"name": "Feedback Received"
},
{
"self": "https://issues.apache.org/jira/rest/api/2/resolution/10011",
"id": "10011",
"description": "Won't Do",
"name": "Won't Do"
}
]

35
resolution.go Normal file
View File

@ -0,0 +1,35 @@
package jira
// ResolutionService handles resolutions for the JIRA instance / API.
//
// JIRA API docs: https://developer.atlassian.com/cloud/jira/platform/rest/#api-Resolution
type ResolutionService struct {
client *Client
}
// Resolution represents a resolution of a JIRA issue.
// Typical types are "Fixed", "Suspended", "Won't Fix", ...
type Resolution struct {
Self string `json:"self" structs:"self"`
ID string `json:"id" structs:"id"`
Description string `json:"description" structs:"description"`
Name string `json:"name" structs:"name"`
}
// GetList gets all resolutions from JIRA
//
// JIRA API docs: https://developer.atlassian.com/cloud/jira/platform/rest/#api-api-2-resolution-get
func (s *ResolutionService) GetList() ([]Resolution, *Response, error) {
apiEndpoint := "rest/api/2/resolution"
req, err := s.client.NewRequest("GET", apiEndpoint, nil)
if err != nil {
return nil, nil, err
}
resolutionList := []Resolution{}
resp, err := s.client.Do(req, &resolutionList)
if err != nil {
return nil, resp, NewJiraError(resp, err)
}
return resolutionList, resp, nil
}

32
resolution_test.go Normal file
View File

@ -0,0 +1,32 @@
package jira
import (
"fmt"
"io/ioutil"
"net/http"
"testing"
)
func TestResolutionService_GetList(t *testing.T) {
setup()
defer teardown()
testAPIEdpoint := "/rest/api/2/resolution"
raw, err := ioutil.ReadFile("./mocks/all_resolutions.json")
if err != nil {
t.Error(err.Error())
}
testMux.HandleFunc(testAPIEdpoint, func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, "GET")
testRequestURL(t, r, testAPIEdpoint)
fmt.Fprint(w, string(raw))
})
resolution, _, err := testClient.Resolution.GetList()
if resolution == nil {
t.Error("Expected resolution list. Resolution list is nil")
}
if err != nil {
t.Errorf("Error given: %s", err)
}
}