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

Commit 1105aed

Browse files
Fix bug in Slack Conversation adapter to make emails case-insensitive
1 parent 91f947f commit 1105aed

2 files changed

Lines changed: 35 additions & 4 deletions

File tree

adapters/slack/conversation/conversation.go

Lines changed: 4 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -181,10 +181,10 @@ func (c *Conversation) Get(_ context.Context) ([]string, error) {
181181

182182
for _, user := range *users {
183183
if !user.IsBot {
184-
emails = append(emails, user.Profile.Email)
184+
emails = append(emails, strings.ToLower(user.Profile.Email))
185185

186186
// Add the email -> ID map for use with Remove method.
187-
c.cache[user.Profile.Email] = user.ID
187+
c.cache[strings.ToLower(user.Profile.Email)] = user.ID
188188
}
189189
}
190190

@@ -200,7 +200,7 @@ func (c *Conversation) Add(_ context.Context, emails []string) error {
200200
slackIds := make([]string, len(emails))
201201

202202
for index, email := range emails {
203-
user, err := c.client.GetUserByEmail(email)
203+
user, err := c.client.GetUserByEmail(strings.ToLower(email))
204204
if err != nil {
205205
return fmt.Errorf("slack.conversation.add.getuserbyemail(%s) -> %w", email, err)
206206
}
@@ -228,7 +228,7 @@ func (c *Conversation) Remove(_ context.Context, emails []string) error {
228228
}
229229

230230
for _, email := range emails {
231-
err := c.client.KickUserFromConversation(c.conversationName, c.cache[email])
231+
err := c.client.KickUserFromConversation(c.conversationName, c.cache[strings.ToLower(email)])
232232
if err != nil {
233233
if c.MuteRestrictedErrOnKickFromPublic && strings.Contains(err.Error(), "restricted_action") {
234234
c.Logger.Println("Cannot kick from public channel, but error is muted by configuration - continuing")

adapters/slack/conversation/conversation_internal_test.go

Lines changed: 31 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -121,6 +121,7 @@ func TestConversation_Add(t *testing.T) {
121121
assert.NoError(t, err)
122122
}
123123

124+
//nolint:funlen
124125
func TestConversation_Remove(t *testing.T) {
125126
t.Parallel()
126127

@@ -168,6 +169,36 @@ func TestConversation_Remove(t *testing.T) {
168169

169170
assert.NoError(t, err)
170171
})
172+
173+
t.Run("Check case sensitivity", func(t *testing.T) {
174+
t.Parallel()
175+
176+
slackClient := newMockISlackConversation(t)
177+
adapter := New(&slack.Client{}, "test")
178+
adapter.client = slackClient
179+
180+
slackClient.EXPECT().GetUsersInConversation(&slack.GetUsersInConversationParameters{
181+
ChannelID: "test",
182+
Cursor: "",
183+
Limit: 50,
184+
}).Return([]string{"foo", "bar"}, "", nil)
185+
186+
slackClient.EXPECT().GetUsersInfo("foo", "bar").Return(&[]slack.User{
187+
// Capitalise the letter E in email.
188+
{ID: "foo", IsBot: false, Profile: slack.UserProfile{Email: "foo@Email"}},
189+
{ID: "bar", IsBot: false, Profile: slack.UserProfile{Email: "bar@Email"}},
190+
}, nil)
191+
192+
_, _ = adapter.Get(ctx)
193+
194+
slackClient.EXPECT().KickUserFromConversation("test", "foo").Return(nil)
195+
slackClient.EXPECT().KickUserFromConversation("test", "bar").Return(nil)
196+
197+
// Capitalise the first letter of each email.
198+
err := adapter.Remove(ctx, []string{"Foo@email", "Bar@email"})
199+
200+
assert.NoError(t, err)
201+
})
171202
}
172203

173204
//nolint:funlen

0 commit comments

Comments
 (0)