From be121d58c3d5a22b3c120904a21eb67af3bc1604 Mon Sep 17 00:00:00 2001 From: Giulio Chessa Date: Wed, 26 Jul 2023 16:55:42 +0200 Subject: [PATCH] getting a single epic board of a group --- group_epic_boards.go | 25 +++++++ group_epic_boards_test.go | 133 ++++++++++++++++++++++++++++++++++++++ 2 files changed, 158 insertions(+) diff --git a/group_epic_boards.go b/group_epic_boards.go index d951fa8f1..fd8cfd86d 100644 --- a/group_epic_boards.go +++ b/group_epic_boards.go @@ -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 +} diff --git a/group_epic_boards_test.go b/group_epic_boards_test.go index ebced7b0a..680558e1d 100644 --- a/group_epic_boards_test.go +++ b/group_epic_boards_test.go @@ -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) +}