1
0
mirror of https://github.com/interviewstreet/go-jira.git synced 2025-01-03 22:52:17 +02:00

feat: Add GetAllStatuses

This commit is contained in:
Omar 2019-08-19 05:59:05 +03:00 committed by Wes McNamee
parent 52ab347903
commit afc96b18d1
5 changed files with 597 additions and 12 deletions

View File

@ -268,18 +268,6 @@ type Component struct {
Name string `json:"name,omitempty" structs:"name,omitempty"`
}
// Status represents the current status of a JIRA issue.
// Typical status are "Open", "In Progress", "Closed", ...
// Status can be user defined in every JIRA instance.
type Status struct {
Self string `json:"self" structs:"self"`
Description string `json:"description" structs:"description"`
IconURL string `json:"iconUrl" structs:"iconUrl"`
Name string `json:"name" structs:"name"`
ID string `json:"id" structs:"id"`
StatusCategory StatusCategory `json:"statusCategory" structs:"statusCategory"`
}
// Progress represents the progress of a JIRA issue.
type Progress struct {
Progress int `json:"progress" structs:"progress"`

View File

@ -49,6 +49,7 @@ type Client struct {
Filter *FilterService
Role *RoleService
PermissionScheme *PermissionSchemeService
Status *StatusService
}
// NewClient returns a new JIRA API client.
@ -93,6 +94,7 @@ func NewClient(httpClient httpClient, baseURL string) (*Client, error) {
c.Filter = &FilterService{client: c}
c.Role = &RoleService{client: c}
c.PermissionScheme = &PermissionSchemeService{client: c}
c.Status = &StatusService{client: c}
return c, nil
}

520
mocks/all_statuses.json Normal file
View File

@ -0,0 +1,520 @@
[
{
"self": "https://test.jira.org/rest/api/2/status/1",
"description": "The issue is open and ready for the assignee to start work on it.",
"iconUrl": "https://test.jira.org/images/icons/statuses/open.png",
"name": "Idea",
"id": "1",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/2",
"id": 2,
"key": "new",
"colorName": "blue-gray",
"name": "To Do"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10000",
"description": "",
"iconUrl": "https://test.jira.org/images/icons/statuses/generic.png",
"name": "Archived",
"id": "10000",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/1",
"id": 1,
"key": "undefined",
"colorName": "medium-gray",
"name": "No Category"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10001",
"description": "",
"iconUrl": "https://test.jira.org/",
"name": "Input",
"id": "10001",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/2",
"id": 2,
"key": "new",
"colorName": "blue-gray",
"name": "To Do"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10002",
"description": "",
"iconUrl": "https://test.jira.org/",
"name": "Triage",
"id": "10002",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/2",
"id": 2,
"key": "new",
"colorName": "blue-gray",
"name": "To Do"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10003",
"description": "",
"iconUrl": "https://test.jira.org/",
"name": "Specs",
"id": "10003",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/2",
"id": 2,
"key": "new",
"colorName": "blue-gray",
"name": "To Do"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10004",
"description": "This status is managed internally by JIRA Software",
"iconUrl": "https://test.jira.org/",
"name": "QA",
"id": "10004",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/4",
"id": 4,
"key": "indeterminate",
"colorName": "yellow",
"name": "In Progress"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10005",
"description": "This status is managed internally by JIRA Software",
"iconUrl": "https://test.jira.org/",
"name": "Icebox",
"id": "10005",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/2",
"id": 2,
"key": "new",
"colorName": "blue-gray",
"name": "To Do"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10006",
"description": "This status is managed internally by JIRA Software",
"iconUrl": "https://test.jira.org/",
"name": "To Be Specced",
"id": "10006",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/2",
"id": 2,
"key": "new",
"colorName": "blue-gray",
"name": "To Do"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10100",
"description": "This status is managed internally by JIRA Software",
"iconUrl": "https://test.jira.org/",
"name": "Blocked",
"id": "10100",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/4",
"id": 4,
"key": "indeterminate",
"colorName": "yellow",
"name": "In Progress"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10203",
"description": "",
"iconUrl": "https://test.jira.org/images/icons/status_generic.gif",
"name": "Rejected",
"id": "10203",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/3",
"id": 3,
"key": "done",
"colorName": "green",
"name": "Done"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10205",
"description": "This status is managed internally by JIRA Software",
"iconUrl": "https://test.jira.org/",
"name": "Validation",
"id": "10205",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/2",
"id": 2,
"key": "new",
"colorName": "blue-gray",
"name": "To Do"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10300",
"description": "This status is managed internally by JIRA Software",
"iconUrl": "https://test.jira.org/",
"name": "Graveyard",
"id": "10300",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/3",
"id": 3,
"key": "done",
"colorName": "green",
"name": "Done"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10400",
"description": "",
"iconUrl": "https://test.jira.org/images/icons/status_generic.gif",
"name": "To Do",
"id": "10400",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/2",
"id": 2,
"key": "new",
"colorName": "blue-gray",
"name": "To Do"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10502",
"description": "",
"iconUrl": "https://test.jira.org/images/icons/statuses/generic.png",
"name": "Sales (Jan)",
"id": "10502",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/1",
"id": 1,
"key": "undefined",
"colorName": "medium-gray",
"name": "No Category"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10503",
"description": "",
"iconUrl": "https://test.jira.org/images/icons/statuses/generic.png",
"name": "Being addressed",
"id": "10503",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/1",
"id": 1,
"key": "undefined",
"colorName": "medium-gray",
"name": "No Category"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10504",
"description": "",
"iconUrl": "https://test.jira.org/images/icons/statuses/generic.png",
"name": "Raw feedback",
"id": "10504",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/1",
"id": 1,
"key": "undefined",
"colorName": "medium-gray",
"name": "No Category"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10505",
"description": "",
"iconUrl": "https://test.jira.org/images/icons/statuses/generic.png",
"name": "Templates",
"id": "10505",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/1",
"id": 1,
"key": "undefined",
"colorName": "medium-gray",
"name": "No Category"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10506",
"description": "",
"iconUrl": "https://test.jira.org/images/icons/statuses/generic.png",
"name": "Persona: Traveler (owner TBD)",
"id": "10506",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/1",
"id": 1,
"key": "undefined",
"colorName": "medium-gray",
"name": "No Category"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10507",
"description": "",
"iconUrl": "https://test.jira.org/images/icons/statuses/generic.png",
"name": "Persona: Booker (owner: Sumit)",
"id": "10507",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/1",
"id": 1,
"key": "undefined",
"colorName": "medium-gray",
"name": "No Category"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10508",
"description": "",
"iconUrl": "https://test.jira.org/images/icons/statuses/generic.png",
"name": "Bugs",
"id": "10508",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/1",
"id": 1,
"key": "undefined",
"colorName": "medium-gray",
"name": "No Category"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10510",
"description": "This status is managed internally by JIRA Software",
"iconUrl": "https://test.jira.org/",
"name": "cannot reproduce",
"id": "10510",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/3",
"id": 3,
"key": "done",
"colorName": "green",
"name": "Done"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10601",
"description": "This status is managed internally by JIRA Software",
"iconUrl": "https://test.jira.org/",
"name": "Done",
"id": "10601",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/3",
"id": 3,
"key": "done",
"colorName": "green",
"name": "Done"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10602",
"description": "This status is managed internally by JIRA Software",
"iconUrl": "https://test.jira.org/",
"name": "In Progress",
"id": "10602",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/4",
"id": 4,
"key": "indeterminate",
"colorName": "yellow",
"name": "In Progress"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10603",
"description": "This status is managed internally by JIRA Software",
"iconUrl": "https://test.jira.org/",
"name": "Backlog",
"id": "10603",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/2",
"id": 2,
"key": "new",
"colorName": "blue-gray",
"name": "To Do"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10700",
"description": "This status is managed internally by JIRA Software",
"iconUrl": "https://test.jira.org/",
"name": "Specs Complete",
"id": "10700",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/3",
"id": 3,
"key": "done",
"colorName": "green",
"name": "Done"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10801",
"description": "This status is managed internally by Jira Software",
"iconUrl": "https://test.jira.org/",
"name": "Delivered",
"id": "10801",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/4",
"id": 4,
"key": "indeterminate",
"colorName": "yellow",
"name": "In Progress"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10803",
"description": "",
"iconUrl": "https://test.jira.org/",
"name": "Selected for Development",
"id": "10803",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/2",
"id": 2,
"key": "new",
"colorName": "blue-gray",
"name": "To Do"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10831",
"description": "This status is managed internally by Jira Software",
"iconUrl": "https://test.jira.org/",
"name": "Evaluated",
"id": "10831",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/2",
"id": 2,
"key": "new",
"colorName": "blue-gray",
"name": "To Do"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10832",
"description": "This status is managed internally by Jira Software",
"iconUrl": "https://test.jira.org/",
"name": "Speccing",
"id": "10832",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/4",
"id": 4,
"key": "indeterminate",
"colorName": "yellow",
"name": "In Progress"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10833",
"description": "This status is managed internally by Jira Software",
"iconUrl": "https://test.jira.org/",
"name": "In development",
"id": "10833",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/4",
"id": 4,
"key": "indeterminate",
"colorName": "yellow",
"name": "In Progress"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10834",
"description": "This status is managed internally by Jira Software",
"iconUrl": "https://test.jira.org/",
"name": "Ready for development",
"id": "10834",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/2",
"id": 2,
"key": "new",
"colorName": "blue-gray",
"name": "To Do"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10835",
"description": "This status is managed internally by Jira Software",
"iconUrl": "https://test.jira.org/",
"name": "Evaluating",
"id": "10835",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/4",
"id": 4,
"key": "indeterminate",
"colorName": "yellow",
"name": "In Progress"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10836",
"description": "This status is managed internally by Jira Software",
"iconUrl": "https://test.jira.org/",
"name": "Needs Product Decision",
"id": "10836",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/2",
"id": 2,
"key": "new",
"colorName": "blue-gray",
"name": "To Do"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10837",
"description": "This status is managed internally by Jira Software",
"iconUrl": "https://test.jira.org/",
"name": "Test failed",
"id": "10837",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/4",
"id": 4,
"key": "indeterminate",
"colorName": "yellow",
"name": "In Progress"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10838",
"description": "This status is managed internally by Jira Software",
"iconUrl": "https://test.jira.org/",
"name": "In Review",
"id": "10838",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/4",
"id": 4,
"key": "indeterminate",
"colorName": "yellow",
"name": "In Progress"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10839",
"description": "This status is managed internally by Jira Software",
"iconUrl": "https://test.jira.org/",
"name": "Reviewed",
"id": "10839",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/4",
"id": 4,
"key": "indeterminate",
"colorName": "yellow",
"name": "In Progress"
}
},
{
"self": "https://test.jira.org/rest/api/2/status/10840",
"description": "This status is managed internally by Jira Software",
"iconUrl": "https://test.jira.org/",
"name": "Designing",
"id": "10840",
"statusCategory": {
"self": "https://test.jira.org/rest/api/2/statuscategory/4",
"id": 4,
"key": "indeterminate",
"colorName": "yellow",
"name": "In Progress"
}
}
]

40
status.go Normal file
View File

@ -0,0 +1,40 @@
package jira
// StatusService handles staties for the JIRA instance / API.
//
// JIRA API docs: https://developer.atlassian.com/cloud/jira/platform/rest/v2/#api-group-Workflow-statuses
type StatusService struct {
client *Client
}
// Status represents the current status of a JIRA issue.
// Typical status are "Open", "In Progress", "Closed", ...
// Status can be user defined in every JIRA instance.
type Status struct {
Self string `json:"self" structs:"self"`
Description string `json:"description" structs:"description"`
IconURL string `json:"iconUrl" structs:"iconUrl"`
Name string `json:"name" structs:"name"`
ID string `json:"id" structs:"id"`
StatusCategory StatusCategory `json:"statusCategory" structs:"statusCategory"`
}
// GetAllStatuses returns a list of all statuses associated with workflows.
//
// JIRA API docs: https://developer.atlassian.com/cloud/jira/platform/rest/v2/#api-rest-api-2-status-get
func (s *StatusService) GetAllStatuses() ([]Status, *Response, error) {
apiEndpoint := "rest/api/2/status"
req, err := s.client.NewRequest("GET", apiEndpoint, nil)
if err != nil {
return nil, nil, err
}
statusList := []Status{}
resp, err := s.client.Do(req, &statusList)
if err != nil {
return nil, resp, NewJiraError(resp, err)
}
return statusList, resp, nil
}

35
status_test.go Normal file
View File

@ -0,0 +1,35 @@
package jira
import (
"fmt"
"io/ioutil"
"net/http"
"testing"
)
func TestStatusService_GetAllStatuses(t *testing.T) {
setup()
defer teardown()
testAPIEdpoint := "/rest/api/2/status"
raw, err := ioutil.ReadFile("./mocks/all_statuses.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))
})
statusList, _, err := testClient.Status.GetAllStatuses()
if statusList == nil {
t.Error("Expected statusList. statusList is nill")
}
if err != nil {
t.Errorf("Error given: %s", err)
}
}