diff --git a/msgraph/groups.go b/msgraph/groups.go index e1a8faae..e6061c6a 100644 --- a/msgraph/groups.go +++ b/msgraph/groups.go @@ -700,3 +700,34 @@ func (c *GroupsClient) RemoveOwners(ctx context.Context, id string, ownerIds *[] return status, nil } + +func (c *GroupsClient) ListAdministrativeUnitMemberships(ctx context.Context, id string) (*[]AdministrativeUnit, int, error) { + resp, status, _, err := c.BaseClient.Get(ctx, GetHttpRequestInput{ + ConsistencyFailureFunc: RetryOn404ConsistencyFailureFunc, + OData: odata.Query{ + Select: []string{"id"}, + }, + ValidStatusCodes: []int{http.StatusOK}, + Uri: Uri{ + Entity: fmt.Sprintf("/groups/%s/memberOf/microsoft.graph.administrativeUnit", id), + HasTenantId: true, + }, + }) + if err != nil { + return nil, status, fmt.Errorf("GroupsClient.BaseClient.Get(): %v", err) + } + defer resp.Body.Close() + respBody, err := io.ReadAll(resp.Body) + if err != nil { + return nil, status, fmt.Errorf("io.ReadAll(): %v", err) + } + + var data struct { + Members []AdministrativeUnit `json:"value"` + } + if err := json.Unmarshal(respBody, &data); err != nil { + return nil, status, fmt.Errorf("json.Unmarshal(): %v", err) + } + + return &data.Members, status, nil +} diff --git a/msgraph/groups_test.go b/msgraph/groups_test.go index 25031f47..3dec4cb5 100644 --- a/msgraph/groups_test.go +++ b/msgraph/groups_test.go @@ -27,6 +27,14 @@ func TestGroupsClient(t *testing.T) { group := testGroupsClient_Create(t, c, newGroup) testGroupsClient_Get(t, c, *group.ID()) + administrativeUnit := testAdministrativeUnitsClient_Create(t, c, msgraph.AdministrativeUnit{ + DisplayName: utils.StringPtr(fmt.Sprintf("test-administrative-unit-%s", c.RandomString)), + }) + testAdministrativeUnitsClient_AddMembers(t, c, *administrativeUnit.ID, &msgraph.Members{group.DirectoryObject}) + testGroupsClient_ListAdministrativeUnitMemberships(t, c, *group.ID()) + testAdministrativeUnitsClient_RemoveMembers(t, c, *administrativeUnit.ID, &[]string{*group.DirectoryObject.Id}) + testAdministrativeUnitsClient_Delete(t, c, *administrativeUnit.ID) + owners := testGroupsClient_ListOwners(t, c, *group.ID()) testGroupsClient_GetOwner(t, c, *group.ID(), (*owners)[0]) @@ -165,6 +173,23 @@ func testGroupsClient_ListOwners(t *testing.T, c *test.Test, id string) (owners return } +func testGroupsClient_ListAdministrativeUnitMemberships(t *testing.T, c *test.Test, id string) (administrativeUnitMemberships *[]msgraph.AdministrativeUnit) { + administrativeUnitMemberships, status, err := c.GroupsClient.ListAdministrativeUnitMemberships(c.Context, id) + if err != nil { + t.Fatalf("GroupsClient.ListAdministrativeUnitMemberships(): %v", err) + } + if status < 200 || status >= 300 { + t.Fatalf("GroupsClient.ListAdministrativeUnitMemberships(): invalid status: %d", status) + } + if administrativeUnitMemberships == nil { + t.Fatal("GroupsClient.ListAdministrativeUnitMemberships(): administrativeUnitMemberships was nil") + } + if len(*administrativeUnitMemberships) == 0 { + t.Fatal("GroupsClient.ListAdministrativeUnitMemberships(): administrativeUnitMemberships was empty") + } + return +} + func testGroupsClient_GetOwner(t *testing.T, c *test.Test, groupId string, ownerId string) (owner *string) { owner, status, err := c.GroupsClient.GetOwner(c.Context, groupId, ownerId) if err != nil {