@@ -86,6 +86,14 @@ func TestClient_CreateChannel(t *testing.T) {
86
86
[]CreateChannelOptionFunc {HideForCreator (true )},
87
87
false ,
88
88
},
89
+ {"create channel with ChannelMembers" , "messaging" , "" , userID ,
90
+ & ChannelRequest {
91
+ ChannelMembers : []* ChannelMember {
92
+ {UserID : userID },
93
+ {UserID : randomUsersID (t , c , 1 )[0 ]},
94
+ },
95
+ }, nil , false ,
96
+ },
89
97
}
90
98
91
99
for _ , tt := range tests {
@@ -152,6 +160,99 @@ func TestChannel_AddMembers(t *testing.T) {
152
160
assert .Equal (t , user .ID , ch .Members [0 ].User .ID , "members contain user id" )
153
161
}
154
162
163
+ func TestChannel_AddChannelMembers (t * testing.T ) {
164
+ c := initClient (t )
165
+ ctx := context .Background ()
166
+ AddChannelMemberUser := randomUser (t , c )
167
+
168
+ channelModeratorID := randomUser (t , c ).ID
169
+ channelAdminID := randomUser (t , c ).ID
170
+
171
+ tests := []struct {
172
+ name string
173
+ members []* ChannelMember
174
+ options []AddMembersOptions
175
+ expectedCount int
176
+ expectedRoles map [string ]string // userID -> expected role
177
+ expectedUsers []string // expected user IDs
178
+ }{
179
+ {
180
+ name : "Add members with ID only" ,
181
+ members : []* ChannelMember {
182
+ {UserID : randomUser (t , c ).ID },
183
+ {UserID : randomUser (t , c ).ID },
184
+ },
185
+ options : []AddMembersOptions {
186
+ AddMembersWithMessage (& Message {Text : "adding members with ID only" , User : AddChannelMemberUser }),
187
+ AddMembersWithHideHistory (),
188
+ },
189
+ expectedCount : 2 ,
190
+ expectedRoles : map [string ]string {},
191
+ expectedUsers : []string {},
192
+ },
193
+ {
194
+ name : "Add members with ID and role" ,
195
+ members : []* ChannelMember {
196
+ {UserID : randomUser (t , c ).ID , ChannelRole : "channel_moderator" },
197
+ {UserID : randomUser (t , c ).ID , ChannelRole : "channel_member" },
198
+ },
199
+ options : []AddMembersOptions {
200
+ AddMembersWithMessage (& Message {Text : "adding members with roles" , User : AddChannelMemberUser }),
201
+ },
202
+ expectedCount : 2 ,
203
+ expectedRoles : map [string ]string {
204
+ channelModeratorID : "channel_moderator" ,
205
+ channelAdminID : "channel_member" ,
206
+ },
207
+ expectedUsers : []string {},
208
+ },
209
+ }
210
+
211
+ for _ , tt := range tests {
212
+ t .Run (tt .name , func (t * testing.T ) {
213
+ // Store user IDs for verification
214
+ userIDs := make ([]string , len (tt .members ))
215
+ for i , member := range tt .members {
216
+ userIDs [i ] = member .UserID
217
+ }
218
+
219
+ chanID := randomString (12 )
220
+ resp , err := c .CreateChannel (ctx , "messaging" , chanID , AddChannelMemberUser .ID , nil )
221
+ require .NoError (t , err , "create channel" )
222
+ ch := resp .Channel
223
+ assert .Empty (t , ch .Members , "members are empty" )
224
+
225
+ // Add members
226
+ _ , err = ch .AddChannelMembers (ctx , tt .members , tt .options ... )
227
+ require .NoError (t , err , "add channel members" )
228
+
229
+ // Refresh channel state
230
+ require .NoError (t , ch .refresh (ctx ), "refresh channel" )
231
+
232
+ // Verify member count
233
+ assert .Len (t , ch .Members , tt .expectedCount , "member count should match" )
234
+
235
+ // Verify each member
236
+ for i , userID := range userIDs {
237
+ found := false
238
+ for _ , member := range ch .Members {
239
+ if member .User .ID == userID {
240
+ found = true
241
+
242
+ // Check role if expected
243
+ if tt .members [i ].ChannelRole != "" {
244
+ assert .Equal (t , tt .members [i ].ChannelRole , member .ChannelRole ,
245
+ "user %s should have role %s" , userID , tt .members [i ].ChannelRole )
246
+ }
247
+ break
248
+ }
249
+ }
250
+ assert .True (t , found , "user %s should be found in members" , userID )
251
+ }
252
+ })
253
+ }
254
+ }
255
+
155
256
func TestChannel_AssignRoles (t * testing.T ) {
156
257
c := initClient (t )
157
258
ctx := context .Background ()
0 commit comments