diff --git a/internal/groups/api/endpoint_test.go b/internal/groups/api/endpoint_test.go index a55eb198fb..ed8ed32e57 100644 --- a/internal/groups/api/endpoint_test.go +++ b/internal/groups/api/endpoint_test.go @@ -467,6 +467,41 @@ func TestUpdateGroupEndpoint(t *testing.T) { func TestListGroupsEndpoint(t *testing.T) { svc := new(mocks.Service) + childGroup := groups.Group{ + ID: testsutil.GenerateUUID(t), + Name: valid, + Description: valid, + Domain: testsutil.GenerateUUID(t), + Parent: validGroupResp.ID, + Metadata: clients.Metadata{ + "name": "test", + }, + Level: -1, + Children: []*groups.Group{}, + CreatedAt: time.Now().Add(-1 * time.Second), + UpdatedAt: time.Now(), + UpdatedBy: testsutil.GenerateUUID(t), + Status: clients.EnabledStatus, + } + parentGroup := groups.Group{ + ID: testsutil.GenerateUUID(t), + Name: valid, + Description: valid, + Domain: testsutil.GenerateUUID(t), + Metadata: clients.Metadata{ + "name": "test", + }, + Level: 1, + Children: []*groups.Group{}, + CreatedAt: time.Now().Add(-1 * time.Second), + UpdatedAt: time.Now(), + UpdatedBy: testsutil.GenerateUUID(t), + Status: clients.EnabledStatus, + } + + validGroupResp.Children = append(validGroupResp.Children, &childGroup) + parentGroup.Children = append(parentGroup.Children, &validGroupResp) + cases := []struct { desc string memberKind string @@ -542,7 +577,7 @@ func TestListGroupsEndpoint(t *testing.T) { memberID: testsutil.GenerateUUID(t), }, svcResp: groups.Page{ - Groups: []groups.Group{validGroupResp}, + Groups: []groups.Group{validGroupResp, childGroup}, }, svcErr: nil, resp: groupPageRes{ @@ -554,6 +589,64 @@ func TestListGroupsEndpoint(t *testing.T) { }, err: nil, }, + { + desc: "list children groups successfully without tree", + memberKind: auth.UsersKind, + req: listGroupsReq{ + Page: groups.Page{ + PageMeta: groups.PageMeta{ + Limit: 10, + }, + ID: validGroupResp.ID, + Direction: -1, + }, + tree: false, + token: valid, + memberKind: auth.UsersKind, + memberID: testsutil.GenerateUUID(t), + }, + svcResp: groups.Page{ + Groups: []groups.Group{validGroupResp, childGroup}, + }, + svcErr: nil, + resp: groupPageRes{ + Groups: []viewGroupRes{ + { + Group: childGroup, + }, + }, + }, + err: nil, + }, + { + desc: "list parent group successfully without tree", + memberKind: auth.UsersKind, + req: listGroupsReq{ + Page: groups.Page{ + PageMeta: groups.PageMeta{ + Limit: 10, + }, + ID: validGroupResp.ID, + Direction: 1, + }, + tree: false, + token: valid, + memberKind: auth.UsersKind, + memberID: testsutil.GenerateUUID(t), + }, + svcResp: groups.Page{ + Groups: []groups.Group{parentGroup, validGroupResp}, + }, + svcErr: nil, + resp: groupPageRes{ + Groups: []viewGroupRes{ + { + Group: parentGroup, + }, + }, + }, + err: nil, + }, { desc: "unsuccessfully with invalid request", memberKind: auth.ThingsKind, diff --git a/internal/groups/api/endpoints.go b/internal/groups/api/endpoints.go index be436343e2..645cc4fdd1 100644 --- a/internal/groups/api/endpoints.go +++ b/internal/groups/api/endpoints.go @@ -128,8 +128,9 @@ func ListGroupsEndpoint(svc groups.Service, memberKind string) endpoint.Endpoint if req.tree { return buildGroupsResponseTree(page), nil } + filterByID := req.Page.ID != "" - return buildGroupsResponse(page), nil + return buildGroupsResponse(page, filterByID), nil } } @@ -262,7 +263,7 @@ func toViewGroupRes(group groups.Group) viewGroupRes { return view } -func buildGroupsResponse(gp groups.Page) groupPageRes { +func buildGroupsResponse(gp groups.Page, filterByID bool) groupPageRes { res := groupPageRes{ pageRes: pageRes{ Total: gp.Total, @@ -275,6 +276,9 @@ func buildGroupsResponse(gp groups.Page) groupPageRes { view := viewGroupRes{ Group: group, } + if filterByID && group.Level == 0 { + continue + } res.Groups = append(res.Groups, view) }