Skip to content
This repository was archived by the owner on Sep 3, 2025. It is now read-only.

Commit 6e80ce0

Browse files
authored
Merge pull request #278 from Varantha/feature-accesspackageresourcerole
Adding AccessPackageResourceRoleClient
2 parents e1c3966 + e9853d9 commit 6e80ce0

File tree

3 files changed

+238
-0
lines changed

3 files changed

+238
-0
lines changed

internal/test/testing.go

Lines changed: 6 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -97,6 +97,7 @@ type Test struct {
9797
AccessPackageClient *msgraph.AccessPackageClient
9898
AccessPackageResourceClient *msgraph.AccessPackageResourceClient
9999
AccessPackageResourceRequestClient *msgraph.AccessPackageResourceRequestClient
100+
AccessPackageResourceRoleClient *msgraph.AccessPackageResourceRoleClient
100101
AccessPackageResourceRoleScopeClient *msgraph.AccessPackageResourceRoleScopeClient
101102
AdministrativeUnitsClient *msgraph.AdministrativeUnitsClient
102103
ApplicationTemplatesClient *msgraph.ApplicationTemplatesClient
@@ -228,6 +229,11 @@ func NewTest(t *testing.T) (c *Test) {
228229
c.AccessPackageResourceRequestClient.BaseClient.Endpoint = *endpoint
229230
c.AccessPackageAssignmentPolicyClient.BaseClient.RetryableClient.RetryMax = retry
230231

232+
c.AccessPackageResourceRoleClient = msgraph.NewAccessPackageResourceRoleClient()
233+
c.AccessPackageResourceRoleClient.BaseClient.Authorizer = c.Connections["default"].Authorizer
234+
c.AccessPackageResourceRoleClient.BaseClient.Endpoint = *endpoint
235+
c.AccessPackageResourceRoleClient.BaseClient.RetryableClient.RetryMax = retry
236+
231237
c.AccessPackageResourceRoleScopeClient = msgraph.NewAccessPackageResourceRoleScopeClient()
232238
c.AccessPackageResourceRoleScopeClient.BaseClient.Authorizer = c.Connections["default"].Authorizer
233239
c.AccessPackageResourceRoleScopeClient.BaseClient.Endpoint = *endpoint
Lines changed: 63 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,63 @@
1+
package msgraph
2+
3+
import (
4+
"context"
5+
"encoding/json"
6+
"fmt"
7+
"io"
8+
"net/http"
9+
10+
"github.com/hashicorp/go-azure-sdk/sdk/odata"
11+
)
12+
13+
type AccessPackageResourceRoleClient struct {
14+
BaseClient Client
15+
}
16+
17+
func NewAccessPackageResourceRoleClient() *AccessPackageResourceRoleClient {
18+
return &AccessPackageResourceRoleClient{
19+
BaseClient: NewClient(VersionBeta),
20+
}
21+
}
22+
23+
// List retrieves a list of AccessPackageResourceRoles for a specific accessPackageResource for a particular catalog / originSystem
24+
// This method requires us to use an Odata Filter / Expand to function correctly
25+
func (c *AccessPackageResourceRoleClient) List(ctx context.Context, catalogId string, originSystem AccessPackageResourceOriginSystem, accessPackageResourceId string) (*[]AccessPackageResourceRole, int, error) {
26+
resp, status, _, err := c.BaseClient.Get(ctx, GetHttpRequestInput{
27+
ConsistencyFailureFunc: RetryOn404ConsistencyFailureFunc,
28+
OData: odata.Query{
29+
Filter: fmt.Sprintf("originSystem eq '%s' and accessPackageResource/id eq '%s'", originSystem, accessPackageResourceId),
30+
Expand: odata.Expand{
31+
Relationship: "accessPackageResource",
32+
},
33+
},
34+
ValidStatusCodes: []int{http.StatusOK},
35+
Uri: Uri{
36+
Entity: fmt.Sprintf("/identityGovernance/entitlementManagement/accessPackageCatalogs/%s/accessPackageResourceRoles", catalogId),
37+
},
38+
})
39+
if err != nil {
40+
return nil, status, fmt.Errorf("AccessPackageResourceRoleClient.BaseClient.Get(): %v", err)
41+
}
42+
43+
defer resp.Body.Close()
44+
respBody, err := io.ReadAll(resp.Body)
45+
if err != nil {
46+
return nil, status, fmt.Errorf("io.ReadAll(): %v", err)
47+
}
48+
49+
var data struct {
50+
AccessPackageResourceRoles []AccessPackageResourceRole `json:"value"`
51+
}
52+
if err := json.Unmarshal(respBody, &data); err != nil {
53+
return nil, status, fmt.Errorf("json.Unmarshal(): %v", err)
54+
}
55+
56+
AccessPackageResourceRoles := data.AccessPackageResourceRoles
57+
58+
if len(AccessPackageResourceRoles) == 0 {
59+
return nil, http.StatusNotFound, fmt.Errorf("no AccessPackageResourceRoles found with catalogId %v, originSystem %v and accessPackageResourceId %v", catalogId, originSystem, accessPackageResourceId)
60+
}
61+
62+
return &AccessPackageResourceRoles, status, nil
63+
}
Lines changed: 169 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,169 @@
1+
package msgraph_test
2+
3+
import (
4+
"fmt"
5+
"testing"
6+
7+
"github.com/manicminer/hamilton/internal/test"
8+
"github.com/manicminer/hamilton/internal/utils"
9+
"github.com/manicminer/hamilton/msgraph"
10+
)
11+
12+
func TestAccessPackageResourceRoleClient(t *testing.T) {
13+
c := test.NewTest(t)
14+
defer c.CancelFunc()
15+
16+
self := testDirectoryObjectsClient_Get(t, c, c.Claims.ObjectId)
17+
18+
// Create group
19+
aadGroup := testAccessPackageResourceRoleGroup_Create(t, c, msgraph.Owners{*self})
20+
21+
// Create test catalog
22+
accessPackageCatalog := testAccessPackageResourceRoleCatalog_Create(t, c)
23+
24+
// Create access package
25+
accessPackage := testAccessPackageResourceRoleAP_Create(t, c, msgraph.AccessPackage{
26+
DisplayName: utils.StringPtr(fmt.Sprintf("test-accesspackage-%s", c.RandomString)),
27+
Catalog: &msgraph.AccessPackageCatalog{
28+
ID: accessPackageCatalog.ID,
29+
},
30+
Description: utils.StringPtr("Test Access Package"),
31+
IsHidden: utils.BoolPtr(false),
32+
})
33+
34+
// Create Resource Request and poll for ID
35+
accessPackageResourceRequest := testAccessPackageResourceRoleResourceRequest_Create(t, c, msgraph.AccessPackageResourceRequest{
36+
CatalogId: accessPackage.Catalog.ID,
37+
RequestType: utils.StringPtr("AdminAdd"),
38+
AccessPackageResource: &msgraph.AccessPackageResource{
39+
OriginId: aadGroup.ID(),
40+
OriginSystem: msgraph.AccessPackageResourceOriginSystemAadGroup,
41+
//ResourceType: utils.StringPtr("Security Group") // This is not mandatory for groups but is seen in sharepoint emails
42+
},
43+
}, true)
44+
45+
// Try to get roles for group we added to Catalog
46+
testAccessPackageResourceRoleClient_List(t, c, *accessPackage.Catalog.ID, msgraph.AccessPackageResourceOriginSystemAadGroup, *accessPackageResourceRequest.AccessPackageResource.ID)
47+
48+
// Cleanup
49+
testAccessPackageResourceRoleAP_Delete(t, c, *accessPackage.ID)
50+
testAccessPackageResourceRoleResourceRequest_Delete(t, c, accessPackageResourceRequest)
51+
testAccessPackageResourceRoleCatalog_Delete(t, c, *accessPackageCatalog.ID)
52+
testAccessPackageResourceRoleGroup_Delete(t, c, aadGroup)
53+
}
54+
55+
// AccessPackageResourceRole
56+
func testAccessPackageResourceRoleClient_List(t *testing.T, c *test.Test, catalogId string, originSystem msgraph.AccessPackageResourceOriginSystem, accessPackageResourceId string) (accessPackageResourceRoleScope *msgraph.AccessPackageResourceRoleScope) {
57+
accessPackageResourceRole, status, err := c.AccessPackageResourceRoleClient.List(c.Context, catalogId, originSystem, accessPackageResourceId)
58+
if err != nil {
59+
t.Fatalf("AccessPackageResourceRequestClient.Get(): %v", err)
60+
}
61+
if status < 200 || status >= 300 {
62+
t.Fatalf("AccessPackageResourceRequestClient.Get(): invalid status: %d", status)
63+
}
64+
if accessPackageResourceRole == nil {
65+
t.Fatal("AccessPackageResourceRequestClient.Get(): policy was nil")
66+
}
67+
return
68+
}
69+
70+
// AccessPackageResourceRequest
71+
func testAccessPackageResourceRoleResourceRequest_Create(t *testing.T, c *test.Test, a msgraph.AccessPackageResourceRequest, pollForId bool) (accessPackageResourceRequest *msgraph.AccessPackageResourceRequest) {
72+
accessPackageResourceRequest, status, err := c.AccessPackageResourceRequestClient.Create(c.Context, a, pollForId)
73+
if err != nil {
74+
t.Fatalf("AccessPackageResourceRequestClient.Create(): %v", err)
75+
}
76+
if status < 200 || status >= 300 {
77+
t.Fatalf("AccessPackageResourceRequestClient.Create(): invalid status: %d", status)
78+
}
79+
if accessPackageResourceRequest == nil {
80+
t.Fatal("AccessPackageResourceRequestClient.Create(): accessPackageResourceRequest was nil")
81+
}
82+
if accessPackageResourceRequest.ID == nil {
83+
t.Fatal("AccessPackageResourceRequestClient.Create(): accessPackageResourceRequest.ID was nil")
84+
}
85+
return
86+
}
87+
88+
func testAccessPackageResourceRoleResourceRequest_Delete(t *testing.T, c *test.Test, accessPackageResourceRequest *msgraph.AccessPackageResourceRequest) {
89+
status, err := c.AccessPackageResourceRequestClient.Delete(c.Context, *accessPackageResourceRequest)
90+
if err != nil {
91+
t.Fatalf("AccessPackageResourceRequestClient.Delete(): %v", err)
92+
}
93+
if status < 200 || status >= 300 {
94+
t.Fatalf("AccessPackageResourceRequestClient.Delete(): invalid status: %d", status)
95+
}
96+
}
97+
98+
// AccessPackage
99+
func testAccessPackageResourceRoleAP_Create(t *testing.T, c *test.Test, a msgraph.AccessPackage) (accessPackage *msgraph.AccessPackage) {
100+
accessPackage, status, err := c.AccessPackageClient.Create(c.Context, a)
101+
if err != nil {
102+
t.Fatalf("AccessPackageClient.Create(): %v", err)
103+
}
104+
if status < 200 || status >= 300 {
105+
t.Fatalf("AccessPackageClient.Create(): invalid status: %d", status)
106+
}
107+
if accessPackage == nil {
108+
t.Fatal("AccessPackageClient.Create(): accessPackage was nil")
109+
}
110+
if accessPackage.ID == nil {
111+
t.Fatal("AccessPackageClient.Create(): accessPackage.ID was nil")
112+
}
113+
return
114+
}
115+
116+
func testAccessPackageResourceRoleAP_Delete(t *testing.T, c *test.Test, id string) {
117+
status, err := c.AccessPackageClient.Delete(c.Context, id)
118+
if err != nil {
119+
t.Fatalf("AccessPackageClient.Delete(): %v", err)
120+
}
121+
if status < 200 || status >= 300 {
122+
t.Fatalf("AccessPackageClient.Delete(): invalid status: %d", status)
123+
}
124+
}
125+
126+
// AccessPackageCatalog
127+
func testAccessPackageResourceRoleCatalog_Create(t *testing.T, c *test.Test) (accessPackageCatalog *msgraph.AccessPackageCatalog) {
128+
accessPackageCatalog, _, err := c.AccessPackageCatalogClient.Create(c.Context, msgraph.AccessPackageCatalog{
129+
DisplayName: utils.StringPtr(fmt.Sprintf("test-catalog-%s", c.RandomString)),
130+
CatalogType: msgraph.AccessPackageCatalogTypeUserManaged,
131+
State: msgraph.AccessPackageCatalogStatePublished,
132+
Description: utils.StringPtr("Test Access Catalog"),
133+
IsExternallyVisible: utils.BoolPtr(false),
134+
})
135+
136+
if err != nil {
137+
t.Fatalf("AccessPackageCatalogClient.Create() - Could not create test AccessPackage catalog: %v", err)
138+
}
139+
return
140+
}
141+
142+
func testAccessPackageResourceRoleCatalog_Delete(t *testing.T, c *test.Test, id string) {
143+
_, err := c.AccessPackageCatalogClient.Delete(c.Context, id)
144+
if err != nil {
145+
t.Fatalf("AccessPackageCatalogClient.Delete() - Could not delete test AccessPackage catalog")
146+
}
147+
}
148+
149+
func testAccessPackageResourceRoleGroup_Create(t *testing.T, c *test.Test, self msgraph.Owners) (group *msgraph.Group) {
150+
group, _, err := c.GroupsClient.Create(c.Context, msgraph.Group{
151+
DisplayName: utils.StringPtr(fmt.Sprintf("%s-%s", "testapresourcerequest", c.RandomString)),
152+
MailEnabled: utils.BoolPtr(false),
153+
MailNickname: utils.StringPtr(fmt.Sprintf("%s-%s", "testapresourcerequest", c.RandomString)),
154+
SecurityEnabled: utils.BoolPtr(true),
155+
Owners: &self,
156+
})
157+
158+
if err != nil {
159+
t.Fatalf("GroupsClient.Create() - Could not create test group: %v", err)
160+
}
161+
return
162+
}
163+
164+
func testAccessPackageResourceRoleGroup_Delete(t *testing.T, c *test.Test, group *msgraph.Group) {
165+
_, err := c.GroupsClient.Delete(c.Context, *group.ID())
166+
if err != nil {
167+
t.Fatalf("GroupsClient.Delete() - Could not delete test group: %v", err)
168+
}
169+
}

0 commit comments

Comments
 (0)