Skip to content
New issue

Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.

By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.

Already on GitHub? Sign in to your account

Add TransferSubGroup to transfer a group to a new parent group #1468

Merged
merged 5 commits into from
May 10, 2022
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Jump to
Jump to file
Failed to load files.
Diff view
Diff view
34 changes: 34 additions & 0 deletions groups.go
Expand Up @@ -345,6 +345,40 @@ func (s *GroupsService) TransferGroup(gid interface{}, pid interface{}, options
return g, resp, err
}

// TransferSubGroupOptions represents the available TransferSubGroup() options.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/groups.html#transfer-a-group-to-a-new-parent-group--turn-a-subgroup-to-a-top-level-group
type TransferSubGroupOptions struct {
GroupID *int `url:"group_id,omitempty" json:"group_id,omitempty"`
}

// TransferSubGroup transfers a group to a new parent group or turn a subgroup
// to a top-level group. Available to administrators and users.
//
// GitLab API docs:
// https://docs.gitlab.com/ee/api/groups.html#transfer-a-group-to-a-new-parent-group--turn-a-subgroup-to-a-top-level-group
func (s *GroupsService) TransferSubGroup(gid interface{}, opt *TransferSubGroupOptions, options ...RequestOptionFunc) (*Group, *Response, error) {
group, err := parseID(gid)
if err != nil {
return nil, nil, err
}
u := fmt.Sprintf("groups/%s/transfer", PathEscape(group))

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

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

return g, resp, err
}

// UpdateGroupOptions represents the available UpdateGroup() options.
//
// GitLab API docs: https://docs.gitlab.com/ee/api/groups.html#update-group
Expand Down
25 changes: 25 additions & 0 deletions groups_test.go
Expand Up @@ -117,6 +117,31 @@ func TestTransferGroup(t *testing.T) {
}
}

func TestTransferSubGroup(t *testing.T) {
mux, server, client := setup(t)
defer teardown(server)

mux.HandleFunc("/api/v4/groups/1/transfer",
func(w http.ResponseWriter, r *http.Request) {
testMethod(t, r, http.MethodPost)
fmt.Fprintf(w, `{"id": 1, "parent_id": 2}`)
})

opt := &TransferSubGroupOptions{
GroupID: Int(2),
}

group, _, err := client.Groups.TransferSubGroup(1, opt)
if err != nil {
t.Errorf("Groups.TransferSubGroup returned error: %v", err)
}

want := &Group{ID: 1, ParentID: 2}
if !reflect.DeepEqual(group, want) {
t.Errorf("Groups.TransferSubGroup returned %+v, want %+v", group, want)
}
}

func TestDeleteGroup(t *testing.T) {
mux, server, client := setup(t)
defer teardown(server)
Expand Down