Loading milestones.go +39 −0 Changes for milestones.go: 39 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -24,8 +24,10 @@ import ( var ( routeProjectsIDMilestones = route("projects/%s/milestones") routeProjectsIDMilestonesID = route("projects/%s/milestones/%d") routeProjectsIDMilestonesIDBurndown = route("projects/%s/milestones/%d/burndown_events") routeProjectsIDMilestonesIDIssues = route("projects/%s/milestones/%d/issues") routeProjectsIDMilestonesIDMergeRequests = route("projects/%s/milestones/%d/merge_requests") routeProjectsIDMilestonesIDPromote = route("projects/%s/milestones/%d/promote") ) type ( Loading Loading @@ -66,6 +68,17 @@ type ( // GitLab API docs: // https://docs.gitlab.com/api/milestones/#get-all-merge-requests-assigned-to-a-single-milestone GetMilestoneMergeRequests(pid any, milestone int64, opt *GetMilestoneMergeRequestsOptions, options ...RequestOptionFunc) ([]*BasicMergeRequest, *Response, error) // PromoteMilestone promotes a project milestone to a group milestone. // // GitLab API docs: // https://docs.gitlab.com/api/milestones/#promote-a-milestone-to-group-milestone PromoteMilestone(pid any, milestone int64, options ...RequestOptionFunc) (*Response, error) // GetMilestoneBurndownChartEvents lists all burndown chart events for a // single project milestone. // // GitLab API docs: // https://docs.gitlab.com/api/milestones/#list-all-burndown-chart-events-for-a-milestone GetMilestoneBurndownChartEvents(pid any, milestone int64, opt *GetMilestoneBurndownChartEventsOptions, options ...RequestOptionFunc) ([]*BurndownChartEvent, *Response, error) } // MilestonesService handles communication with the milestone related methods Loading Loading @@ -215,3 +228,29 @@ func (s *MilestonesService) GetMilestoneMergeRequests(pid any, milestone int64, withRequestOpts(options...), ) } func (s *MilestonesService) PromoteMilestone(pid any, milestone int64, options ...RequestOptionFunc) (*Response, error) { _, resp, err := do[none](s.client, withMethod(http.MethodPost), withPath(routeProjectsIDMilestonesIDPromote, ProjectID{pid}, milestone), withRequestOpts(options...), ) return resp, err } // GetMilestoneBurndownChartEventsOptions represents the available // GetMilestoneBurndownChartEvents() options. // // GitLab API docs: // https://docs.gitlab.com/api/milestones/#list-all-burndown-chart-events-for-a-milestone type GetMilestoneBurndownChartEventsOptions struct { ListOptions } func (s *MilestonesService) GetMilestoneBurndownChartEvents(pid any, milestone int64, opt *GetMilestoneBurndownChartEventsOptions, options ...RequestOptionFunc) ([]*BurndownChartEvent, *Response, error) { return do[[]*BurndownChartEvent](s.client, withPath(routeProjectsIDMilestonesIDBurndown, ProjectID{pid}, milestone), withAPIOpts(opt), withRequestOpts(options...), ) } milestones_test.go +67 −0 Changes for milestones_test.go: 67 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -565,3 +565,70 @@ func TestMilestonesService_GetMilestoneMergeRequests(t *testing.T) { require.Nil(t, mrs) require.Equal(t, http.StatusNotFound, resp.StatusCode) } func TestMilestonesService_PromoteMilestone(t *testing.T) { t.Parallel() mux, client := setup(t) mux.HandleFunc("/api/v4/projects/5/milestones/12/promote", func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, http.MethodPost) }) resp, err := client.Milestones.PromoteMilestone(5, 12, nil) require.NoError(t, err) require.NotNil(t, resp) resp, err = client.Milestones.PromoteMilestone(5.01, 12, nil) require.ErrorIs(t, err, ErrInvalidIDType) require.Nil(t, resp) resp, err = client.Milestones.PromoteMilestone(5, 12, nil, errorOption) require.ErrorIs(t, err, errRequestOptionFunc) require.Nil(t, resp) resp, err = client.Milestones.PromoteMilestone(3, 12, nil) require.Error(t, err) require.Equal(t, http.StatusNotFound, resp.StatusCode) } func TestMilestonesService_GetMilestoneBurndownChartEvents(t *testing.T) { t.Parallel() mux, client := setup(t) mux.HandleFunc("/api/v4/projects/5/milestones/12/burndown_events", func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, http.MethodGet) fmt.Fprintf(w, ` [ { "weight": 10, "action": "update" } ] `) }) want := []*BurndownChartEvent{{ Weight: new(int64(10)), Action: new("update"), }} bces, resp, err := client.Milestones.GetMilestoneBurndownChartEvents(5, 12, nil, nil) require.NoError(t, err) require.NotNil(t, resp) require.Equal(t, want, bces) bces, resp, err = client.Milestones.GetMilestoneBurndownChartEvents(5.01, 12, nil, nil) require.ErrorIs(t, err, ErrInvalidIDType) require.Nil(t, resp) require.Nil(t, bces) bces, resp, err = client.Milestones.GetMilestoneBurndownChartEvents(5, 12, nil, nil, errorOption) require.ErrorIs(t, err, errRequestOptionFunc) require.Nil(t, resp) require.Nil(t, bces) bces, resp, err = client.Milestones.GetMilestoneBurndownChartEvents(3, 12, nil, nil) require.Error(t, err) require.Nil(t, bces) require.Equal(t, http.StatusNotFound, resp.StatusCode) } testing/milestones_mock.go +89 −0 Changes for testing/milestones_mock.go: 89 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -173,6 +173,51 @@ func (c *MockMilestonesServiceInterfaceGetMilestoneCall) DoAndReturn(f func(any, return c } // GetMilestoneBurndownChartEvents mocks base method. func (m *MockMilestonesServiceInterface) GetMilestoneBurndownChartEvents(pid any, milestone int64, opt *gitlab.GetMilestoneBurndownChartEventsOptions, options ...gitlab.RequestOptionFunc) ([]*gitlab.BurndownChartEvent, *gitlab.Response, error) { m.ctrl.T.Helper() varargs := []any{pid, milestone, opt} for _, a := range options { varargs = append(varargs, a) } ret := m.ctrl.Call(m, "GetMilestoneBurndownChartEvents", varargs...) ret0, _ := ret[0].([]*gitlab.BurndownChartEvent) ret1, _ := ret[1].(*gitlab.Response) ret2, _ := ret[2].(error) return ret0, ret1, ret2 } // GetMilestoneBurndownChartEvents indicates an expected call of GetMilestoneBurndownChartEvents. func (mr *MockMilestonesServiceInterfaceMockRecorder) GetMilestoneBurndownChartEvents(pid, milestone, opt any, options ...any) *MockMilestonesServiceInterfaceGetMilestoneBurndownChartEventsCall { mr.mock.ctrl.T.Helper() varargs := append([]any{pid, milestone, opt}, options...) call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMilestoneBurndownChartEvents", reflect.TypeOf((*MockMilestonesServiceInterface)(nil).GetMilestoneBurndownChartEvents), varargs...) return &MockMilestonesServiceInterfaceGetMilestoneBurndownChartEventsCall{Call: call} } // MockMilestonesServiceInterfaceGetMilestoneBurndownChartEventsCall wrap *gomock.Call type MockMilestonesServiceInterfaceGetMilestoneBurndownChartEventsCall struct { *gomock.Call } // Return rewrite *gomock.Call.Return func (c *MockMilestonesServiceInterfaceGetMilestoneBurndownChartEventsCall) Return(arg0 []*gitlab.BurndownChartEvent, arg1 *gitlab.Response, arg2 error) *MockMilestonesServiceInterfaceGetMilestoneBurndownChartEventsCall { c.Call = c.Call.Return(arg0, arg1, arg2) return c } // Do rewrite *gomock.Call.Do func (c *MockMilestonesServiceInterfaceGetMilestoneBurndownChartEventsCall) Do(f func(any, int64, *gitlab.GetMilestoneBurndownChartEventsOptions, ...gitlab.RequestOptionFunc) ([]*gitlab.BurndownChartEvent, *gitlab.Response, error)) *MockMilestonesServiceInterfaceGetMilestoneBurndownChartEventsCall { c.Call = c.Call.Do(f) return c } // DoAndReturn rewrite *gomock.Call.DoAndReturn func (c *MockMilestonesServiceInterfaceGetMilestoneBurndownChartEventsCall) DoAndReturn(f func(any, int64, *gitlab.GetMilestoneBurndownChartEventsOptions, ...gitlab.RequestOptionFunc) ([]*gitlab.BurndownChartEvent, *gitlab.Response, error)) *MockMilestonesServiceInterfaceGetMilestoneBurndownChartEventsCall { c.Call = c.Call.DoAndReturn(f) return c } // GetMilestoneIssues mocks base method. func (m *MockMilestonesServiceInterface) GetMilestoneIssues(pid any, milestone int64, opt *gitlab.GetMilestoneIssuesOptions, options ...gitlab.RequestOptionFunc) ([]*gitlab.Issue, *gitlab.Response, error) { m.ctrl.T.Helper() Loading Loading @@ -308,6 +353,50 @@ func (c *MockMilestonesServiceInterfaceListMilestonesCall) DoAndReturn(f func(an return c } // PromoteMilestone mocks base method. func (m *MockMilestonesServiceInterface) PromoteMilestone(pid any, milestone int64, options ...gitlab.RequestOptionFunc) (*gitlab.Response, error) { m.ctrl.T.Helper() varargs := []any{pid, milestone} for _, a := range options { varargs = append(varargs, a) } ret := m.ctrl.Call(m, "PromoteMilestone", varargs...) ret0, _ := ret[0].(*gitlab.Response) ret1, _ := ret[1].(error) return ret0, ret1 } // PromoteMilestone indicates an expected call of PromoteMilestone. func (mr *MockMilestonesServiceInterfaceMockRecorder) PromoteMilestone(pid, milestone any, options ...any) *MockMilestonesServiceInterfacePromoteMilestoneCall { mr.mock.ctrl.T.Helper() varargs := append([]any{pid, milestone}, options...) call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PromoteMilestone", reflect.TypeOf((*MockMilestonesServiceInterface)(nil).PromoteMilestone), varargs...) return &MockMilestonesServiceInterfacePromoteMilestoneCall{Call: call} } // MockMilestonesServiceInterfacePromoteMilestoneCall wrap *gomock.Call type MockMilestonesServiceInterfacePromoteMilestoneCall struct { *gomock.Call } // Return rewrite *gomock.Call.Return func (c *MockMilestonesServiceInterfacePromoteMilestoneCall) Return(arg0 *gitlab.Response, arg1 error) *MockMilestonesServiceInterfacePromoteMilestoneCall { c.Call = c.Call.Return(arg0, arg1) return c } // Do rewrite *gomock.Call.Do func (c *MockMilestonesServiceInterfacePromoteMilestoneCall) Do(f func(any, int64, ...gitlab.RequestOptionFunc) (*gitlab.Response, error)) *MockMilestonesServiceInterfacePromoteMilestoneCall { c.Call = c.Call.Do(f) return c } // DoAndReturn rewrite *gomock.Call.DoAndReturn func (c *MockMilestonesServiceInterfacePromoteMilestoneCall) DoAndReturn(f func(any, int64, ...gitlab.RequestOptionFunc) (*gitlab.Response, error)) *MockMilestonesServiceInterfacePromoteMilestoneCall { c.Call = c.Call.DoAndReturn(f) return c } // UpdateMilestone mocks base method. func (m *MockMilestonesServiceInterface) UpdateMilestone(pid any, milestone int64, opt *gitlab.UpdateMilestoneOptions, options ...gitlab.RequestOptionFunc) (*gitlab.Milestone, *gitlab.Response, error) { m.ctrl.T.Helper() Loading Loading
milestones.go +39 −0 Changes for milestones.go: 39 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -24,8 +24,10 @@ import ( var ( routeProjectsIDMilestones = route("projects/%s/milestones") routeProjectsIDMilestonesID = route("projects/%s/milestones/%d") routeProjectsIDMilestonesIDBurndown = route("projects/%s/milestones/%d/burndown_events") routeProjectsIDMilestonesIDIssues = route("projects/%s/milestones/%d/issues") routeProjectsIDMilestonesIDMergeRequests = route("projects/%s/milestones/%d/merge_requests") routeProjectsIDMilestonesIDPromote = route("projects/%s/milestones/%d/promote") ) type ( Loading Loading @@ -66,6 +68,17 @@ type ( // GitLab API docs: // https://docs.gitlab.com/api/milestones/#get-all-merge-requests-assigned-to-a-single-milestone GetMilestoneMergeRequests(pid any, milestone int64, opt *GetMilestoneMergeRequestsOptions, options ...RequestOptionFunc) ([]*BasicMergeRequest, *Response, error) // PromoteMilestone promotes a project milestone to a group milestone. // // GitLab API docs: // https://docs.gitlab.com/api/milestones/#promote-a-milestone-to-group-milestone PromoteMilestone(pid any, milestone int64, options ...RequestOptionFunc) (*Response, error) // GetMilestoneBurndownChartEvents lists all burndown chart events for a // single project milestone. // // GitLab API docs: // https://docs.gitlab.com/api/milestones/#list-all-burndown-chart-events-for-a-milestone GetMilestoneBurndownChartEvents(pid any, milestone int64, opt *GetMilestoneBurndownChartEventsOptions, options ...RequestOptionFunc) ([]*BurndownChartEvent, *Response, error) } // MilestonesService handles communication with the milestone related methods Loading Loading @@ -215,3 +228,29 @@ func (s *MilestonesService) GetMilestoneMergeRequests(pid any, milestone int64, withRequestOpts(options...), ) } func (s *MilestonesService) PromoteMilestone(pid any, milestone int64, options ...RequestOptionFunc) (*Response, error) { _, resp, err := do[none](s.client, withMethod(http.MethodPost), withPath(routeProjectsIDMilestonesIDPromote, ProjectID{pid}, milestone), withRequestOpts(options...), ) return resp, err } // GetMilestoneBurndownChartEventsOptions represents the available // GetMilestoneBurndownChartEvents() options. // // GitLab API docs: // https://docs.gitlab.com/api/milestones/#list-all-burndown-chart-events-for-a-milestone type GetMilestoneBurndownChartEventsOptions struct { ListOptions } func (s *MilestonesService) GetMilestoneBurndownChartEvents(pid any, milestone int64, opt *GetMilestoneBurndownChartEventsOptions, options ...RequestOptionFunc) ([]*BurndownChartEvent, *Response, error) { return do[[]*BurndownChartEvent](s.client, withPath(routeProjectsIDMilestonesIDBurndown, ProjectID{pid}, milestone), withAPIOpts(opt), withRequestOpts(options...), ) }
milestones_test.go +67 −0 Changes for milestones_test.go: 67 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -565,3 +565,70 @@ func TestMilestonesService_GetMilestoneMergeRequests(t *testing.T) { require.Nil(t, mrs) require.Equal(t, http.StatusNotFound, resp.StatusCode) } func TestMilestonesService_PromoteMilestone(t *testing.T) { t.Parallel() mux, client := setup(t) mux.HandleFunc("/api/v4/projects/5/milestones/12/promote", func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, http.MethodPost) }) resp, err := client.Milestones.PromoteMilestone(5, 12, nil) require.NoError(t, err) require.NotNil(t, resp) resp, err = client.Milestones.PromoteMilestone(5.01, 12, nil) require.ErrorIs(t, err, ErrInvalidIDType) require.Nil(t, resp) resp, err = client.Milestones.PromoteMilestone(5, 12, nil, errorOption) require.ErrorIs(t, err, errRequestOptionFunc) require.Nil(t, resp) resp, err = client.Milestones.PromoteMilestone(3, 12, nil) require.Error(t, err) require.Equal(t, http.StatusNotFound, resp.StatusCode) } func TestMilestonesService_GetMilestoneBurndownChartEvents(t *testing.T) { t.Parallel() mux, client := setup(t) mux.HandleFunc("/api/v4/projects/5/milestones/12/burndown_events", func(w http.ResponseWriter, r *http.Request) { testMethod(t, r, http.MethodGet) fmt.Fprintf(w, ` [ { "weight": 10, "action": "update" } ] `) }) want := []*BurndownChartEvent{{ Weight: new(int64(10)), Action: new("update"), }} bces, resp, err := client.Milestones.GetMilestoneBurndownChartEvents(5, 12, nil, nil) require.NoError(t, err) require.NotNil(t, resp) require.Equal(t, want, bces) bces, resp, err = client.Milestones.GetMilestoneBurndownChartEvents(5.01, 12, nil, nil) require.ErrorIs(t, err, ErrInvalidIDType) require.Nil(t, resp) require.Nil(t, bces) bces, resp, err = client.Milestones.GetMilestoneBurndownChartEvents(5, 12, nil, nil, errorOption) require.ErrorIs(t, err, errRequestOptionFunc) require.Nil(t, resp) require.Nil(t, bces) bces, resp, err = client.Milestones.GetMilestoneBurndownChartEvents(3, 12, nil, nil) require.Error(t, err) require.Nil(t, bces) require.Equal(t, http.StatusNotFound, resp.StatusCode) }
testing/milestones_mock.go +89 −0 Changes for testing/milestones_mock.go: 89 added lines, 0 removed lines. Original line number Diff line number Diff line Loading @@ -173,6 +173,51 @@ func (c *MockMilestonesServiceInterfaceGetMilestoneCall) DoAndReturn(f func(any, return c } // GetMilestoneBurndownChartEvents mocks base method. func (m *MockMilestonesServiceInterface) GetMilestoneBurndownChartEvents(pid any, milestone int64, opt *gitlab.GetMilestoneBurndownChartEventsOptions, options ...gitlab.RequestOptionFunc) ([]*gitlab.BurndownChartEvent, *gitlab.Response, error) { m.ctrl.T.Helper() varargs := []any{pid, milestone, opt} for _, a := range options { varargs = append(varargs, a) } ret := m.ctrl.Call(m, "GetMilestoneBurndownChartEvents", varargs...) ret0, _ := ret[0].([]*gitlab.BurndownChartEvent) ret1, _ := ret[1].(*gitlab.Response) ret2, _ := ret[2].(error) return ret0, ret1, ret2 } // GetMilestoneBurndownChartEvents indicates an expected call of GetMilestoneBurndownChartEvents. func (mr *MockMilestonesServiceInterfaceMockRecorder) GetMilestoneBurndownChartEvents(pid, milestone, opt any, options ...any) *MockMilestonesServiceInterfaceGetMilestoneBurndownChartEventsCall { mr.mock.ctrl.T.Helper() varargs := append([]any{pid, milestone, opt}, options...) call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "GetMilestoneBurndownChartEvents", reflect.TypeOf((*MockMilestonesServiceInterface)(nil).GetMilestoneBurndownChartEvents), varargs...) return &MockMilestonesServiceInterfaceGetMilestoneBurndownChartEventsCall{Call: call} } // MockMilestonesServiceInterfaceGetMilestoneBurndownChartEventsCall wrap *gomock.Call type MockMilestonesServiceInterfaceGetMilestoneBurndownChartEventsCall struct { *gomock.Call } // Return rewrite *gomock.Call.Return func (c *MockMilestonesServiceInterfaceGetMilestoneBurndownChartEventsCall) Return(arg0 []*gitlab.BurndownChartEvent, arg1 *gitlab.Response, arg2 error) *MockMilestonesServiceInterfaceGetMilestoneBurndownChartEventsCall { c.Call = c.Call.Return(arg0, arg1, arg2) return c } // Do rewrite *gomock.Call.Do func (c *MockMilestonesServiceInterfaceGetMilestoneBurndownChartEventsCall) Do(f func(any, int64, *gitlab.GetMilestoneBurndownChartEventsOptions, ...gitlab.RequestOptionFunc) ([]*gitlab.BurndownChartEvent, *gitlab.Response, error)) *MockMilestonesServiceInterfaceGetMilestoneBurndownChartEventsCall { c.Call = c.Call.Do(f) return c } // DoAndReturn rewrite *gomock.Call.DoAndReturn func (c *MockMilestonesServiceInterfaceGetMilestoneBurndownChartEventsCall) DoAndReturn(f func(any, int64, *gitlab.GetMilestoneBurndownChartEventsOptions, ...gitlab.RequestOptionFunc) ([]*gitlab.BurndownChartEvent, *gitlab.Response, error)) *MockMilestonesServiceInterfaceGetMilestoneBurndownChartEventsCall { c.Call = c.Call.DoAndReturn(f) return c } // GetMilestoneIssues mocks base method. func (m *MockMilestonesServiceInterface) GetMilestoneIssues(pid any, milestone int64, opt *gitlab.GetMilestoneIssuesOptions, options ...gitlab.RequestOptionFunc) ([]*gitlab.Issue, *gitlab.Response, error) { m.ctrl.T.Helper() Loading Loading @@ -308,6 +353,50 @@ func (c *MockMilestonesServiceInterfaceListMilestonesCall) DoAndReturn(f func(an return c } // PromoteMilestone mocks base method. func (m *MockMilestonesServiceInterface) PromoteMilestone(pid any, milestone int64, options ...gitlab.RequestOptionFunc) (*gitlab.Response, error) { m.ctrl.T.Helper() varargs := []any{pid, milestone} for _, a := range options { varargs = append(varargs, a) } ret := m.ctrl.Call(m, "PromoteMilestone", varargs...) ret0, _ := ret[0].(*gitlab.Response) ret1, _ := ret[1].(error) return ret0, ret1 } // PromoteMilestone indicates an expected call of PromoteMilestone. func (mr *MockMilestonesServiceInterfaceMockRecorder) PromoteMilestone(pid, milestone any, options ...any) *MockMilestonesServiceInterfacePromoteMilestoneCall { mr.mock.ctrl.T.Helper() varargs := append([]any{pid, milestone}, options...) call := mr.mock.ctrl.RecordCallWithMethodType(mr.mock, "PromoteMilestone", reflect.TypeOf((*MockMilestonesServiceInterface)(nil).PromoteMilestone), varargs...) return &MockMilestonesServiceInterfacePromoteMilestoneCall{Call: call} } // MockMilestonesServiceInterfacePromoteMilestoneCall wrap *gomock.Call type MockMilestonesServiceInterfacePromoteMilestoneCall struct { *gomock.Call } // Return rewrite *gomock.Call.Return func (c *MockMilestonesServiceInterfacePromoteMilestoneCall) Return(arg0 *gitlab.Response, arg1 error) *MockMilestonesServiceInterfacePromoteMilestoneCall { c.Call = c.Call.Return(arg0, arg1) return c } // Do rewrite *gomock.Call.Do func (c *MockMilestonesServiceInterfacePromoteMilestoneCall) Do(f func(any, int64, ...gitlab.RequestOptionFunc) (*gitlab.Response, error)) *MockMilestonesServiceInterfacePromoteMilestoneCall { c.Call = c.Call.Do(f) return c } // DoAndReturn rewrite *gomock.Call.DoAndReturn func (c *MockMilestonesServiceInterfacePromoteMilestoneCall) DoAndReturn(f func(any, int64, ...gitlab.RequestOptionFunc) (*gitlab.Response, error)) *MockMilestonesServiceInterfacePromoteMilestoneCall { c.Call = c.Call.DoAndReturn(f) return c } // UpdateMilestone mocks base method. func (m *MockMilestonesServiceInterface) UpdateMilestone(pid any, milestone int64, opt *gitlab.UpdateMilestoneOptions, options ...gitlab.RequestOptionFunc) (*gitlab.Milestone, *gitlab.Response, error) { m.ctrl.T.Helper() Loading