Skip to content

Commit

Permalink
getting a single epic board of a group
Browse files Browse the repository at this point in the history
  • Loading branch information
Giulio Chessa committed Jul 26, 2023
1 parent f077f25 commit be121d5
Show file tree
Hide file tree
Showing 2 changed files with 158 additions and 0 deletions.
25 changes: 25 additions & 0 deletions group_epic_boards.go
Expand Up @@ -77,3 +77,28 @@ func (s *GroupEpicBoardsService) ListGroupEpicBoards(gid interface{}, opt *ListG

return gs, resp, nil
}

// GetGroupEpicBoard gets a single epic board of a group.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/group_epic_boards.html#single-group-epic-board
func (s *GroupEpicBoardsService) GetGroupEpicBoard(gid interface{}, board int, options ...RequestOptionFunc) (*GroupEpicBoard, *Response, error) {
group, err := parseID(gid)
if err != nil {
return nil, nil, err
}
u := fmt.Sprintf("groups/%s/epic_boards/%d", PathEscape(group), board)

req, err := s.client.NewRequest(http.MethodGet, u, nil, options)
if err != nil {
return nil, nil, err
}

gib := new(GroupEpicBoard)
resp, err := s.client.Do(req, gib)
if err != nil {
return nil, resp, err
}

return gib, resp, nil
}
133 changes: 133 additions & 0 deletions group_epic_boards_test.go
Expand Up @@ -144,3 +144,136 @@ func TestGroupEpicBoardsService_ListGroupEpicBoards(t *testing.T) {
require.Nil(t, gibs)
require.Equal(t, http.StatusNotFound, resp.StatusCode)
}

func TestGroupEpicBoardsService_GetGroupEpicBoard(t *testing.T) {
mux, client := setup(t)

mux.HandleFunc("/api/v4/groups/5/epic_boards/1", func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodGet)
fmt.Fprintf(w, `
{
"id": 1,
"name": "group epic board",
"group": {
"id": 5,
"name": "Documentcloud",
"web_url": "http://example.com/groups/documentcloud"
},
"labels": [
{
"id": 1,
"name": "Board Label",
"color": "#c21e56",
"group_id": 5,
"description": "label applied to the epic board"
}
],
"lists" : [
{
"id" : 1,
"label" : {
"id": 69,
"name" : "Testing",
"color" : "#F0AD4E",
"description" : null
},
"position" : 1,
"list_type": "label"
},
{
"id" : 2,
"label" : {
"id": 70,
"name" : "Ready",
"color" : "#FF0000",
"description" : null
},
"position" : 2,
"list_type": "label"
},
{
"id" : 3,
"label" : {
"id": 71,
"name" : "Production",
"color" : "#FF5F00",
"description" : null
},
"position" : 3,
"list_type": "label"
}
]
}
`)
})

want := &GroupEpicBoard{
ID: 1,
Name: "group epic board",
Group: &Group{
ID: 5,
Name: "Documentcloud",
WebURL: "http://example.com/groups/documentcloud",
},
Labels: []*LabelDetails{
{
ID: 1,
Name: "Board Label",
Color: "#c21e56",
Description: "label applied to the epic board",
},
},
Lists: []*BoardList{
{
ID: 1,
Label: &Label{
ID: 69,
Name: "Testing",
Color: "#F0AD4E",
Description: "",
},
Position: 1,
},
{
ID: 2,
Label: &Label{
ID: 70,
Name: "Ready",
Color: "#FF0000",
Description: "",
},
Position: 2,
},
{
ID: 3,
Label: &Label{
ID: 71,
Name: "Production",
Color: "#FF5F00",
Description: "",
},
Position: 3,
},
},
}

gib, resp, err := client.GroupEpicBoards.GetGroupEpicBoard(5, 1, nil, nil)
require.NoError(t, err)
require.NotNil(t, resp)
require.Equal(t, want, gib)

gib, resp, err = client.GroupEpicBoards.GetGroupEpicBoard(5.01, 1, nil, nil)
require.EqualError(t, err, "invalid ID type 5.01, the ID must be an int or a string")
require.Nil(t, resp)
require.Nil(t, gib)

gib, resp, err = client.GroupEpicBoards.GetGroupEpicBoard(5, 1, nil, nil, errorOption)
require.EqualError(t, err, "RequestOptionFunc returns an error")
require.Nil(t, resp)
require.Nil(t, gib)

gib, resp, err = client.GroupEpicBoards.GetGroupEpicBoard(3, 1, nil, nil)
require.Error(t, err)
require.Nil(t, gib)
require.Equal(t, http.StatusNotFound, resp.StatusCode)
}

0 comments on commit be121d5

Please sign in to comment.