From 4afd393b37bf052b72434c75a48efcec3ba97f59 Mon Sep 17 00:00:00 2001 From: Jose Gabriel Companioni Benitez <53531665+elC0mpa@users.noreply.github.com> Date: Mon, 15 Sep 2025 22:25:46 +0400 Subject: [PATCH 1/3] refactor: decouple group and project request approval settings --- merge_request_approval_settings.go | 29 ++++++++++++++----- merge_request_approval_settings_test.go | 5 ++-- .../merge_request_approval_settings_mock.go | 12 ++++---- 3 files changed, 29 insertions(+), 17 deletions(-) diff --git a/merge_request_approval_settings.go b/merge_request_approval_settings.go index c1701be2..7a6e9b84 100644 --- a/merge_request_approval_settings.go +++ b/merge_request_approval_settings.go @@ -22,9 +22,9 @@ import ( type ( MergeRequestApprovalSettingsServiceInterface interface { GetGroupMergeRequestApprovalSettings(gid any, options ...RequestOptionFunc) (*MergeRequestApprovalSettings, *Response, error) - UpdateGroupMergeRequestApprovalSettings(gid any, opt *UpdateMergeRequestApprovalSettingsOptions, options ...RequestOptionFunc) (*MergeRequestApprovalSettings, *Response, error) + UpdateGroupMergeRequestApprovalSettings(gid any, opt *UpdateGroupRequestApprovalSettingsOptions, options ...RequestOptionFunc) (*MergeRequestApprovalSettings, *Response, error) GetProjectMergeRequestApprovalSettings(pid any, options ...RequestOptionFunc) (*MergeRequestApprovalSettings, *Response, error) - UpdateProjectMergeRequestApprovalSettings(pid any, opt *UpdateMergeRequestApprovalSettingsOptions, options ...RequestOptionFunc) (*MergeRequestApprovalSettings, *Response, error) + UpdateProjectMergeRequestApprovalSettings(pid any, opt *UpdateProjectMergeRequestApprovalSettingsOptions, options ...RequestOptionFunc) (*MergeRequestApprovalSettings, *Response, error) } // MergeRequestApprovalSettingsService handles communication with the merge @@ -90,19 +90,32 @@ func (s *MergeRequestApprovalSettingsService) GetGroupMergeRequestApprovalSettin return settings, resp, nil } -// UpdateMergeRequestApprovalSettingsOptions represents the available -// UpdateGroupMergeRequestApprovalSettings() and UpdateProjectMergeRequestApprovalSettings() +// UpdateProjectMergeRequestApprovalSettingsOptions represents the available +// UpdateProjectMergeRequestApprovalSettings() // options. // // GitLab API docs: -// https://docs.gitlab.com/api/merge_request_approval_settings/#update-group-mr-approval-settings // https://docs.gitlab.com/api/merge_request_approval_settings/#update-project-mr-approval-settings -type UpdateMergeRequestApprovalSettingsOptions struct { +type UpdateProjectMergeRequestApprovalSettingsOptions struct { AllowAuthorApproval *bool `url:"allow_author_approval,omitempty" json:"allow_author_approval,omitempty"` AllowCommitterApproval *bool `url:"allow_committer_approval,omitempty" json:"allow_committer_approval,omitempty"` AllowOverridesToApproverListPerMergeRequest *bool `url:"allow_overrides_to_approver_list_per_merge_request,omitempty" json:"allow_overrides_to_approver_list_per_merge_request,omitempty"` RetainApprovalsOnPush *bool `url:"retain_approvals_on_push,omitempty" json:"retain_approvals_on_push,omitempty"` + RequireReauthenticationToApprove *bool `url:"require_reauthentication_to_approve,omitempty" json:"require_reauthentication_to_approve,omitempty"` SelectiveCodeOwnerRemovals *bool `url:"selective_code_owner_removals,omitempty" json:"selective_code_owner_removals,omitempty"` +} + +// UpdateGroupRequestApprovalSettingsOptions represents the available +// UpdateGroupRequestApprovalSettings() +// options. +// +// GitLab API docs: +// https://docs.gitlab.com/api/merge_request_approval_settings/#update-group-mr-approval-settings +type UpdateGroupRequestApprovalSettingsOptions struct { + AllowAuthorApproval *bool `url:"allow_author_approval,omitempty" json:"allow_author_approval,omitempty"` + AllowCommitterApproval *bool `url:"allow_committer_approval,omitempty" json:"allow_committer_approval,omitempty"` + AllowOverridesToApproverListPerMergeRequest *bool `url:"allow_overrides_to_approver_list_per_merge_request,omitempty" json:"allow_overrides_to_approver_list_per_merge_request,omitempty"` + RetainApprovalsOnPush *bool `url:"retain_approvals_on_push,omitempty" json:"retain_approvals_on_push,omitempty"` RequireReauthenticationToApprove *bool `url:"require_reauthentication_to_approve,omitempty" json:"require_reauthentication_to_approve,omitempty"` } @@ -111,7 +124,7 @@ type UpdateMergeRequestApprovalSettingsOptions struct { // // GitLab API docs: // https://docs.gitlab.com/api/merge_request_approval_settings/#update-group-mr-approval-settings -func (s *MergeRequestApprovalSettingsService) UpdateGroupMergeRequestApprovalSettings(gid any, opt *UpdateMergeRequestApprovalSettingsOptions, options ...RequestOptionFunc) (*MergeRequestApprovalSettings, *Response, error) { +func (s *MergeRequestApprovalSettingsService) UpdateGroupMergeRequestApprovalSettings(gid any, opt *UpdateGroupRequestApprovalSettingsOptions, options ...RequestOptionFunc) (*MergeRequestApprovalSettings, *Response, error) { group, err := parseID(gid) if err != nil { return nil, nil, err @@ -163,7 +176,7 @@ func (s *MergeRequestApprovalSettingsService) GetProjectMergeRequestApprovalSett // // GitLab API docs: // https://docs.gitlab.com/api/merge_request_approval_settings/#update-project-mr-approval-settings -func (s *MergeRequestApprovalSettingsService) UpdateProjectMergeRequestApprovalSettings(pid any, opt *UpdateMergeRequestApprovalSettingsOptions, options ...RequestOptionFunc) (*MergeRequestApprovalSettings, *Response, error) { +func (s *MergeRequestApprovalSettingsService) UpdateProjectMergeRequestApprovalSettings(pid any, opt *UpdateProjectMergeRequestApprovalSettingsOptions, options ...RequestOptionFunc) (*MergeRequestApprovalSettings, *Response, error) { project, err := parseID(pid) if err != nil { return nil, nil, err diff --git a/merge_request_approval_settings_test.go b/merge_request_approval_settings_test.go index cd154936..f1142e98 100644 --- a/merge_request_approval_settings_test.go +++ b/merge_request_approval_settings_test.go @@ -183,12 +183,11 @@ func TestUpdateGroupMergeRequestApprovalSettings(t *testing.T) { }, } - settings, resp, err := client.MergeRequestApprovalSettings.UpdateGroupMergeRequestApprovalSettings(1, &UpdateMergeRequestApprovalSettingsOptions{ + settings, resp, err := client.MergeRequestApprovalSettings.UpdateGroupMergeRequestApprovalSettings(1, &UpdateGroupRequestApprovalSettingsOptions{ AllowAuthorApproval: Ptr(false), AllowCommitterApproval: Ptr(false), AllowOverridesToApproverListPerMergeRequest: Ptr(false), RetainApprovalsOnPush: Ptr(true), - SelectiveCodeOwnerRemovals: Ptr(true), RequireReauthenticationToApprove: Ptr(true), }) assert.NoError(t, err) @@ -372,7 +371,7 @@ func TestUpdateProjectMergeRequestApprovalSettings(t *testing.T) { }, } - settings, resp, err := client.MergeRequestApprovalSettings.UpdateProjectMergeRequestApprovalSettings(1, &UpdateMergeRequestApprovalSettingsOptions{ + settings, resp, err := client.MergeRequestApprovalSettings.UpdateProjectMergeRequestApprovalSettings(1, &UpdateProjectMergeRequestApprovalSettingsOptions{ AllowAuthorApproval: Ptr(false), AllowCommitterApproval: Ptr(false), AllowOverridesToApproverListPerMergeRequest: Ptr(false), diff --git a/testing/merge_request_approval_settings_mock.go b/testing/merge_request_approval_settings_mock.go index 62faa029..4b6a1c96 100644 --- a/testing/merge_request_approval_settings_mock.go +++ b/testing/merge_request_approval_settings_mock.go @@ -131,7 +131,7 @@ func (c *MockMergeRequestApprovalSettingsServiceInterfaceGetProjectMergeRequestA } // UpdateGroupMergeRequestApprovalSettings mocks base method. -func (m *MockMergeRequestApprovalSettingsServiceInterface) UpdateGroupMergeRequestApprovalSettings(gid any, opt *gitlab.UpdateMergeRequestApprovalSettingsOptions, options ...gitlab.RequestOptionFunc) (*gitlab.MergeRequestApprovalSettings, *gitlab.Response, error) { +func (m *MockMergeRequestApprovalSettingsServiceInterface) UpdateGroupMergeRequestApprovalSettings(gid any, opt *gitlab.UpdateGroupRequestApprovalSettingsOptions, options ...gitlab.RequestOptionFunc) (*gitlab.MergeRequestApprovalSettings, *gitlab.Response, error) { m.ctrl.T.Helper() varargs := []any{gid, opt} for _, a := range options { @@ -164,19 +164,19 @@ func (c *MockMergeRequestApprovalSettingsServiceInterfaceUpdateGroupMergeRequest } // Do rewrite *gomock.Call.Do -func (c *MockMergeRequestApprovalSettingsServiceInterfaceUpdateGroupMergeRequestApprovalSettingsCall) Do(f func(any, *gitlab.UpdateMergeRequestApprovalSettingsOptions, ...gitlab.RequestOptionFunc) (*gitlab.MergeRequestApprovalSettings, *gitlab.Response, error)) *MockMergeRequestApprovalSettingsServiceInterfaceUpdateGroupMergeRequestApprovalSettingsCall { +func (c *MockMergeRequestApprovalSettingsServiceInterfaceUpdateGroupMergeRequestApprovalSettingsCall) Do(f func(any, *gitlab.UpdateProjectMergeRequestApprovalSettingsOptions, ...gitlab.RequestOptionFunc) (*gitlab.MergeRequestApprovalSettings, *gitlab.Response, error)) *MockMergeRequestApprovalSettingsServiceInterfaceUpdateGroupMergeRequestApprovalSettingsCall { c.Call = c.Call.Do(f) return c } // DoAndReturn rewrite *gomock.Call.DoAndReturn -func (c *MockMergeRequestApprovalSettingsServiceInterfaceUpdateGroupMergeRequestApprovalSettingsCall) DoAndReturn(f func(any, *gitlab.UpdateMergeRequestApprovalSettingsOptions, ...gitlab.RequestOptionFunc) (*gitlab.MergeRequestApprovalSettings, *gitlab.Response, error)) *MockMergeRequestApprovalSettingsServiceInterfaceUpdateGroupMergeRequestApprovalSettingsCall { +func (c *MockMergeRequestApprovalSettingsServiceInterfaceUpdateGroupMergeRequestApprovalSettingsCall) DoAndReturn(f func(any, *gitlab.UpdateGroupRequestApprovalSettingsOptions, ...gitlab.RequestOptionFunc) (*gitlab.MergeRequestApprovalSettings, *gitlab.Response, error)) *MockMergeRequestApprovalSettingsServiceInterfaceUpdateGroupMergeRequestApprovalSettingsCall { c.Call = c.Call.DoAndReturn(f) return c } // UpdateProjectMergeRequestApprovalSettings mocks base method. -func (m *MockMergeRequestApprovalSettingsServiceInterface) UpdateProjectMergeRequestApprovalSettings(pid any, opt *gitlab.UpdateMergeRequestApprovalSettingsOptions, options ...gitlab.RequestOptionFunc) (*gitlab.MergeRequestApprovalSettings, *gitlab.Response, error) { +func (m *MockMergeRequestApprovalSettingsServiceInterface) UpdateProjectMergeRequestApprovalSettings(pid any, opt *gitlab.UpdateProjectMergeRequestApprovalSettingsOptions, options ...gitlab.RequestOptionFunc) (*gitlab.MergeRequestApprovalSettings, *gitlab.Response, error) { m.ctrl.T.Helper() varargs := []any{pid, opt} for _, a := range options { @@ -209,13 +209,13 @@ func (c *MockMergeRequestApprovalSettingsServiceInterfaceUpdateProjectMergeReque } // Do rewrite *gomock.Call.Do -func (c *MockMergeRequestApprovalSettingsServiceInterfaceUpdateProjectMergeRequestApprovalSettingsCall) Do(f func(any, *gitlab.UpdateMergeRequestApprovalSettingsOptions, ...gitlab.RequestOptionFunc) (*gitlab.MergeRequestApprovalSettings, *gitlab.Response, error)) *MockMergeRequestApprovalSettingsServiceInterfaceUpdateProjectMergeRequestApprovalSettingsCall { +func (c *MockMergeRequestApprovalSettingsServiceInterfaceUpdateProjectMergeRequestApprovalSettingsCall) Do(f func(any, *gitlab.UpdateProjectMergeRequestApprovalSettingsOptions, ...gitlab.RequestOptionFunc) (*gitlab.MergeRequestApprovalSettings, *gitlab.Response, error)) *MockMergeRequestApprovalSettingsServiceInterfaceUpdateProjectMergeRequestApprovalSettingsCall { c.Call = c.Call.Do(f) return c } // DoAndReturn rewrite *gomock.Call.DoAndReturn -func (c *MockMergeRequestApprovalSettingsServiceInterfaceUpdateProjectMergeRequestApprovalSettingsCall) DoAndReturn(f func(any, *gitlab.UpdateMergeRequestApprovalSettingsOptions, ...gitlab.RequestOptionFunc) (*gitlab.MergeRequestApprovalSettings, *gitlab.Response, error)) *MockMergeRequestApprovalSettingsServiceInterfaceUpdateProjectMergeRequestApprovalSettingsCall { +func (c *MockMergeRequestApprovalSettingsServiceInterfaceUpdateProjectMergeRequestApprovalSettingsCall) DoAndReturn(f func(any, *gitlab.UpdateProjectMergeRequestApprovalSettingsOptions, ...gitlab.RequestOptionFunc) (*gitlab.MergeRequestApprovalSettings, *gitlab.Response, error)) *MockMergeRequestApprovalSettingsServiceInterfaceUpdateProjectMergeRequestApprovalSettingsCall { c.Call = c.Call.DoAndReturn(f) return c } -- GitLab From ca59a9c4bb5fae443f8b73e203b078d6a6284dfc Mon Sep 17 00:00:00 2001 From: Jose Gabriel Companioni Benitez <53531665+elC0mpa@users.noreply.github.com> Date: Mon, 15 Sep 2025 22:54:30 +0400 Subject: [PATCH 2/3] refactor: solved pipeline issues --- testing/merge_request_approval_settings_mock.go | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/testing/merge_request_approval_settings_mock.go b/testing/merge_request_approval_settings_mock.go index 4b6a1c96..e37ee395 100644 --- a/testing/merge_request_approval_settings_mock.go +++ b/testing/merge_request_approval_settings_mock.go @@ -164,7 +164,7 @@ func (c *MockMergeRequestApprovalSettingsServiceInterfaceUpdateGroupMergeRequest } // Do rewrite *gomock.Call.Do -func (c *MockMergeRequestApprovalSettingsServiceInterfaceUpdateGroupMergeRequestApprovalSettingsCall) Do(f func(any, *gitlab.UpdateProjectMergeRequestApprovalSettingsOptions, ...gitlab.RequestOptionFunc) (*gitlab.MergeRequestApprovalSettings, *gitlab.Response, error)) *MockMergeRequestApprovalSettingsServiceInterfaceUpdateGroupMergeRequestApprovalSettingsCall { +func (c *MockMergeRequestApprovalSettingsServiceInterfaceUpdateGroupMergeRequestApprovalSettingsCall) Do(f func(any, *gitlab.UpdateGroupRequestApprovalSettingsOptions, ...gitlab.RequestOptionFunc) (*gitlab.MergeRequestApprovalSettings, *gitlab.Response, error)) *MockMergeRequestApprovalSettingsServiceInterfaceUpdateGroupMergeRequestApprovalSettingsCall { c.Call = c.Call.Do(f) return c } -- GitLab From 7980c6373668a904bd1b0341da77c95d0435d588 Mon Sep 17 00:00:00 2001 From: Jose Gabriel Companioni Benitez <53531665+elC0mpa@users.noreply.github.com> Date: Wed, 17 Sep 2025 00:55:18 +0400 Subject: [PATCH 3/3] fix: naming typo --- merge_request_approval_settings.go | 8 ++++---- merge_request_approval_settings_test.go | 2 +- testing/merge_request_approval_settings_mock.go | 6 +++--- 3 files changed, 8 insertions(+), 8 deletions(-) diff --git a/merge_request_approval_settings.go b/merge_request_approval_settings.go index 7a6e9b84..6d183a64 100644 --- a/merge_request_approval_settings.go +++ b/merge_request_approval_settings.go @@ -22,7 +22,7 @@ import ( type ( MergeRequestApprovalSettingsServiceInterface interface { GetGroupMergeRequestApprovalSettings(gid any, options ...RequestOptionFunc) (*MergeRequestApprovalSettings, *Response, error) - UpdateGroupMergeRequestApprovalSettings(gid any, opt *UpdateGroupRequestApprovalSettingsOptions, options ...RequestOptionFunc) (*MergeRequestApprovalSettings, *Response, error) + UpdateGroupMergeRequestApprovalSettings(gid any, opt *UpdateGroupMergeRequestApprovalSettingsOptions, options ...RequestOptionFunc) (*MergeRequestApprovalSettings, *Response, error) GetProjectMergeRequestApprovalSettings(pid any, options ...RequestOptionFunc) (*MergeRequestApprovalSettings, *Response, error) UpdateProjectMergeRequestApprovalSettings(pid any, opt *UpdateProjectMergeRequestApprovalSettingsOptions, options ...RequestOptionFunc) (*MergeRequestApprovalSettings, *Response, error) } @@ -105,13 +105,13 @@ type UpdateProjectMergeRequestApprovalSettingsOptions struct { SelectiveCodeOwnerRemovals *bool `url:"selective_code_owner_removals,omitempty" json:"selective_code_owner_removals,omitempty"` } -// UpdateGroupRequestApprovalSettingsOptions represents the available +// UpdateGroupMergeRequestApprovalSettingsOptions represents the available // UpdateGroupRequestApprovalSettings() // options. // // GitLab API docs: // https://docs.gitlab.com/api/merge_request_approval_settings/#update-group-mr-approval-settings -type UpdateGroupRequestApprovalSettingsOptions struct { +type UpdateGroupMergeRequestApprovalSettingsOptions struct { AllowAuthorApproval *bool `url:"allow_author_approval,omitempty" json:"allow_author_approval,omitempty"` AllowCommitterApproval *bool `url:"allow_committer_approval,omitempty" json:"allow_committer_approval,omitempty"` AllowOverridesToApproverListPerMergeRequest *bool `url:"allow_overrides_to_approver_list_per_merge_request,omitempty" json:"allow_overrides_to_approver_list_per_merge_request,omitempty"` @@ -124,7 +124,7 @@ type UpdateGroupRequestApprovalSettingsOptions struct { // // GitLab API docs: // https://docs.gitlab.com/api/merge_request_approval_settings/#update-group-mr-approval-settings -func (s *MergeRequestApprovalSettingsService) UpdateGroupMergeRequestApprovalSettings(gid any, opt *UpdateGroupRequestApprovalSettingsOptions, options ...RequestOptionFunc) (*MergeRequestApprovalSettings, *Response, error) { +func (s *MergeRequestApprovalSettingsService) UpdateGroupMergeRequestApprovalSettings(gid any, opt *UpdateGroupMergeRequestApprovalSettingsOptions, options ...RequestOptionFunc) (*MergeRequestApprovalSettings, *Response, error) { group, err := parseID(gid) if err != nil { return nil, nil, err diff --git a/merge_request_approval_settings_test.go b/merge_request_approval_settings_test.go index f1142e98..e2905009 100644 --- a/merge_request_approval_settings_test.go +++ b/merge_request_approval_settings_test.go @@ -183,7 +183,7 @@ func TestUpdateGroupMergeRequestApprovalSettings(t *testing.T) { }, } - settings, resp, err := client.MergeRequestApprovalSettings.UpdateGroupMergeRequestApprovalSettings(1, &UpdateGroupRequestApprovalSettingsOptions{ + settings, resp, err := client.MergeRequestApprovalSettings.UpdateGroupMergeRequestApprovalSettings(1, &UpdateGroupMergeRequestApprovalSettingsOptions{ AllowAuthorApproval: Ptr(false), AllowCommitterApproval: Ptr(false), AllowOverridesToApproverListPerMergeRequest: Ptr(false), diff --git a/testing/merge_request_approval_settings_mock.go b/testing/merge_request_approval_settings_mock.go index e37ee395..12efeb52 100644 --- a/testing/merge_request_approval_settings_mock.go +++ b/testing/merge_request_approval_settings_mock.go @@ -131,7 +131,7 @@ func (c *MockMergeRequestApprovalSettingsServiceInterfaceGetProjectMergeRequestA } // UpdateGroupMergeRequestApprovalSettings mocks base method. -func (m *MockMergeRequestApprovalSettingsServiceInterface) UpdateGroupMergeRequestApprovalSettings(gid any, opt *gitlab.UpdateGroupRequestApprovalSettingsOptions, options ...gitlab.RequestOptionFunc) (*gitlab.MergeRequestApprovalSettings, *gitlab.Response, error) { +func (m *MockMergeRequestApprovalSettingsServiceInterface) UpdateGroupMergeRequestApprovalSettings(gid any, opt *gitlab.UpdateGroupMergeRequestApprovalSettingsOptions, options ...gitlab.RequestOptionFunc) (*gitlab.MergeRequestApprovalSettings, *gitlab.Response, error) { m.ctrl.T.Helper() varargs := []any{gid, opt} for _, a := range options { @@ -164,13 +164,13 @@ func (c *MockMergeRequestApprovalSettingsServiceInterfaceUpdateGroupMergeRequest } // Do rewrite *gomock.Call.Do -func (c *MockMergeRequestApprovalSettingsServiceInterfaceUpdateGroupMergeRequestApprovalSettingsCall) Do(f func(any, *gitlab.UpdateGroupRequestApprovalSettingsOptions, ...gitlab.RequestOptionFunc) (*gitlab.MergeRequestApprovalSettings, *gitlab.Response, error)) *MockMergeRequestApprovalSettingsServiceInterfaceUpdateGroupMergeRequestApprovalSettingsCall { +func (c *MockMergeRequestApprovalSettingsServiceInterfaceUpdateGroupMergeRequestApprovalSettingsCall) Do(f func(any, *gitlab.UpdateGroupMergeRequestApprovalSettingsOptions, ...gitlab.RequestOptionFunc) (*gitlab.MergeRequestApprovalSettings, *gitlab.Response, error)) *MockMergeRequestApprovalSettingsServiceInterfaceUpdateGroupMergeRequestApprovalSettingsCall { c.Call = c.Call.Do(f) return c } // DoAndReturn rewrite *gomock.Call.DoAndReturn -func (c *MockMergeRequestApprovalSettingsServiceInterfaceUpdateGroupMergeRequestApprovalSettingsCall) DoAndReturn(f func(any, *gitlab.UpdateGroupRequestApprovalSettingsOptions, ...gitlab.RequestOptionFunc) (*gitlab.MergeRequestApprovalSettings, *gitlab.Response, error)) *MockMergeRequestApprovalSettingsServiceInterfaceUpdateGroupMergeRequestApprovalSettingsCall { +func (c *MockMergeRequestApprovalSettingsServiceInterfaceUpdateGroupMergeRequestApprovalSettingsCall) DoAndReturn(f func(any, *gitlab.UpdateGroupMergeRequestApprovalSettingsOptions, ...gitlab.RequestOptionFunc) (*gitlab.MergeRequestApprovalSettings, *gitlab.Response, error)) *MockMergeRequestApprovalSettingsServiceInterfaceUpdateGroupMergeRequestApprovalSettingsCall { c.Call = c.Call.DoAndReturn(f) return c } -- GitLab