Skip to content
This repository was archived by the owner on Jan 21, 2026. It is now read-only.

Commit b696129

Browse files
Add custom role/delivery settings when adding users
1 parent 54fe4fc commit b696129

2 files changed

Lines changed: 69 additions & 1 deletion

File tree

pkg/adapters/google/group/group.go

Lines changed: 23 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -45,6 +45,10 @@ type Group struct {
4545
name string
4646
logger types.Logger
4747

48+
// Custom configuration for adding emails.
49+
deliverySettings string
50+
role string
51+
4852
callList func(ctx context.Context, call *admin.MembersListCall, pageToken string) (*admin.Members, error)
4953
callInsert func(ctx context.Context, call *admin.MembersInsertCall) (*admin.Member, error)
5054
callDelete func(ctx context.Context, call *admin.MembersDeleteCall) error
@@ -57,6 +61,20 @@ func OptionLogger(logger types.Logger) func(*Group) {
5761
}
5862
}
5963

64+
// WithRole sets a custom role for new emails being added.
65+
func WithRole(role string) func(*Group) {
66+
return func(group *Group) {
67+
group.role = role
68+
}
69+
}
70+
71+
// WithDeliverySettings sets custom deliver settings when adding emails.
72+
func WithDeliverySettings(deliverySettings string) func(*Group) {
73+
return func(group *Group) {
74+
group.deliverySettings = deliverySettings
75+
}
76+
}
77+
6078
// New instantiates a new Google Group adapter.
6179
func New(client *admin.Service, name string, optsFn ...func(*Group)) *Group {
6280
group := &Group{
@@ -112,7 +130,11 @@ func (g *Group) Add(ctx context.Context, emails []string) error {
112130
g.logger.Printf("Adding %s to Google Group %s", emails, g.name)
113131

114132
for _, email := range emails {
115-
_, err := g.callInsert(ctx, g.membersService.Insert(g.name, &admin.Member{Email: email}))
133+
_, err := g.callInsert(ctx, g.membersService.Insert(g.name, &admin.Member{
134+
Email: email,
135+
DeliverySettings: g.deliverySettings,
136+
Role: g.role,
137+
}))
116138
if err != nil {
117139
return fmt.Errorf("google.group.add(%s, %s) -> %w", g.name, email, err)
118140
}

pkg/adapters/google/group/group_internal_test.go

Lines changed: 46 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -116,3 +116,49 @@ func TestGroups_Remove(t *testing.T) {
116116

117117
assert.NoError(t, err)
118118
}
119+
120+
func TestWithRole(t *testing.T) {
121+
t.Parallel()
122+
123+
ctx := context.TODO()
124+
125+
mockMembersService := mocks.NewIMembersService(t)
126+
mockMembersService.EXPECT().Insert("test", &admin.Member{
127+
Email: "foo@email",
128+
Role: "test-role",
129+
}).Return(nil)
130+
131+
mockCall := new(mockCalls)
132+
mockCall.On("callInsert", ctx, mock.Anything).Return(&admin.Member{}, nil)
133+
134+
group := New(&admin.Service{}, "test", WithRole("test-role"))
135+
group.membersService = mockMembersService
136+
group.callInsert = mockCall.callInsert
137+
138+
err := group.Add(ctx, []string{"foo@email"})
139+
140+
assert.NoError(t, err)
141+
}
142+
143+
func TestWithDeliverySettings(t *testing.T) {
144+
t.Parallel()
145+
146+
ctx := context.TODO()
147+
148+
mockMembersService := mocks.NewIMembersService(t)
149+
mockMembersService.EXPECT().Insert("test", &admin.Member{
150+
Email: "foo@email",
151+
DeliverySettings: "test-delivery-settings",
152+
}).Return(nil)
153+
154+
mockCall := new(mockCalls)
155+
mockCall.On("callInsert", ctx, mock.Anything).Return(&admin.Member{}, nil)
156+
157+
group := New(&admin.Service{}, "test", WithDeliverySettings("test-delivery-settings"))
158+
group.membersService = mockMembersService
159+
group.callInsert = mockCall.callInsert
160+
161+
err := group.Add(ctx, []string{"foo@email"})
162+
163+
assert.NoError(t, err)
164+
}

0 commit comments

Comments
 (0)