Skip to content

Commit 17aae20

Browse files
committed
fix: case insensitive user matching
1 parent d6d34d0 commit 17aae20

File tree

6 files changed

+107
-24
lines changed

6 files changed

+107
-24
lines changed

dist/index.js

Lines changed: 10 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -81719,9 +81719,9 @@ var SlackAppUrl;
8171981719

8172081720
function customMappingMatcher(githubUsername, slackUsername) {
8172181721
return {
81722-
check: (user) => user.name === slackUsername ||
81723-
user.profile?.display_name === slackUsername ||
81724-
user.profile?.real_name === slackUsername,
81722+
check: (user) => user.name?.toLowerCase() === slackUsername.toLowerCase() ||
81723+
user.profile?.display_name?.toLowerCase() === slackUsername.toLowerCase() ||
81724+
user.profile?.real_name?.toLowerCase() === slackUsername.toLowerCase(),
8172581725
description: 'custom user mapping',
8172681726
log: (user) => {
8172781727
(0,core.debug)(`Match found by custom mapping: GitHub username [${githubUsername}] to Slack username [${slackUsername}] for user [${user.id}]`);
@@ -81730,7 +81730,7 @@ function customMappingMatcher(githubUsername, slackUsername) {
8173081730
}
8173181731
function displayNameMatcher(username) {
8173281732
return {
81733-
check: (user) => user.profile?.display_name === username,
81733+
check: (user) => user.profile?.display_name?.toLowerCase() === username.toLowerCase(),
8173481734
description: 'user.profile.display_name fields',
8173581735
log: (user) => {
8173681736
(0,core.debug)(`Match found by username [${username}] matching Slack displayName [${user.profile?.display_name}]`);
@@ -81739,7 +81739,9 @@ function displayNameMatcher(username) {
8173981739
}
8174081740
function emailContainsMatcher(username) {
8174181741
return {
81742-
check: (user) => String(user.profile?.email ?? '').includes(username),
81742+
check: (user) => String(user.profile?.email ?? '')
81743+
.toLowerCase()
81744+
.includes(username.toLowerCase()),
8174381745
description: 'user.profile.email contains check',
8174481746
log: (user) => {
8174581747
(0,core.debug)(`Match found by username [${username}] contained in Slack email [${user.profile?.email}]`);
@@ -81748,7 +81750,7 @@ function emailContainsMatcher(username) {
8174881750
}
8174981751
function emailMatcher(email) {
8175081752
return {
81751-
check: (user) => user.profile?.email === email,
81753+
check: (user) => user.profile?.email?.toLowerCase() === email.toLowerCase(),
8175281754
description: 'user.profile.email fields',
8175381755
log: (user) => {
8175481756
(0,core.debug)(`Match found by email [${email}] with Slack email [${user.profile?.email}]`);
@@ -81757,7 +81759,7 @@ function emailMatcher(email) {
8175781759
}
8175881760
function realNameMatcher(username) {
8175981761
return {
81760-
check: (user) => user.profile?.real_name === username,
81762+
check: (user) => user.profile?.real_name?.toLowerCase() === username.toLowerCase(),
8176181763
description: 'user.profile.real_name fields',
8176281764
log: (user) => {
8176381765
(0,core.debug)(`Match found by username [${username}] matching Slack realName [${user.profile?.real_name}]`);
@@ -90629,7 +90631,7 @@ module.exports = {"version":"3.17.0"};
9062990631
/***/ 8330:
9063090632
/***/ ((module) => {
9063190633

90632-
module.exports = /*#__PURE__*/JSON.parse('{"UU":"@krauters/github-notifier","rE":"1.3.1","TB":"https://buymeacoffee.com/coltenkrauter"}');
90634+
module.exports = /*#__PURE__*/JSON.parse('{"UU":"@krauters/github-notifier","rE":"1.3.2","TB":"https://buymeacoffee.com/coltenkrauter"}');
9063390635

9063490636
/***/ })
9063590637

dist/index.js.map

Lines changed: 1 addition & 1 deletion
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package-lock.json

Lines changed: 6 additions & 6 deletions
Some generated files are not rendered by default. Learn more about customizing how changed files appear on GitHub.

package.json

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
{
22
"name": "@krauters/github-notifier",
33
"description": "GitHub Notifier by Krauters – Post Open Pull Requests to Slack",
4-
"version": "1.3.1",
4+
"version": "1.3.2",
55
"author": "Colten Krauter <coltenkrauter>",
66
"type": "module",
77
"homepage": "https://buymeacoffee.com/coltenkrauter",
@@ -47,7 +47,7 @@
4747
"devDependencies": {
4848
"@krauters/eslint-config": "^1.8.0",
4949
"@types/jest": "^29.5.14",
50-
"@types/node": "^22.15.0",
50+
"@types/node": "^22.15.3",
5151
"@vercel/ncc": "^0.38.3",
5252
"husky": "9.1.7",
5353
"jest": "^29.7.0",

src/utils/slack/user-matchers.ts

Lines changed: 10 additions & 7 deletions
Original file line numberDiff line numberDiff line change
@@ -20,9 +20,9 @@ export interface UserMatcher {
2020
function customMappingMatcher(githubUsername: string, slackUsername: string): UserMatcher {
2121
return {
2222
check: (user: Member) =>
23-
user.name === slackUsername ||
24-
user.profile?.display_name === slackUsername ||
25-
user.profile?.real_name === slackUsername,
23+
user.name?.toLowerCase() === slackUsername.toLowerCase() ||
24+
user.profile?.display_name?.toLowerCase() === slackUsername.toLowerCase() ||
25+
user.profile?.real_name?.toLowerCase() === slackUsername.toLowerCase(),
2626
description: 'custom user mapping',
2727
log: (user: Member) => {
2828
debug(
@@ -34,7 +34,7 @@ function customMappingMatcher(githubUsername: string, slackUsername: string): Us
3434

3535
function displayNameMatcher(username: string): UserMatcher {
3636
return {
37-
check: (user: Member) => user.profile?.display_name === username,
37+
check: (user: Member) => user.profile?.display_name?.toLowerCase() === username.toLowerCase(),
3838
description: 'user.profile.display_name fields',
3939
log: (user: Member) => {
4040
debug(`Match found by username [${username}] matching Slack displayName [${user.profile?.display_name}]`)
@@ -44,7 +44,10 @@ function displayNameMatcher(username: string): UserMatcher {
4444

4545
function emailContainsMatcher(username: string): UserMatcher {
4646
return {
47-
check: (user: Member) => String(user.profile?.email ?? '').includes(username),
47+
check: (user: Member) =>
48+
String(user.profile?.email ?? '')
49+
.toLowerCase()
50+
.includes(username.toLowerCase()),
4851
description: 'user.profile.email contains check',
4952
log: (user: Member) => {
5053
debug(`Match found by username [${username}] contained in Slack email [${user.profile?.email}]`)
@@ -54,7 +57,7 @@ function emailContainsMatcher(username: string): UserMatcher {
5457

5558
function emailMatcher(email: string): UserMatcher {
5659
return {
57-
check: (user: Member) => user.profile?.email === email,
60+
check: (user: Member) => user.profile?.email?.toLowerCase() === email.toLowerCase(),
5861
description: 'user.profile.email fields',
5962
log: (user: Member) => {
6063
debug(`Match found by email [${email}] with Slack email [${user.profile?.email}]`)
@@ -64,7 +67,7 @@ function emailMatcher(email: string): UserMatcher {
6467

6568
function realNameMatcher(username: string): UserMatcher {
6669
return {
67-
check: (user: Member) => user.profile?.real_name === username,
70+
check: (user: Member) => user.profile?.real_name?.toLowerCase() === username.toLowerCase(),
6871
description: 'user.profile.real_name fields',
6972
log: (user: Member) => {
7073
debug(`Match found by username [${username}] matching Slack realName [${user.profile?.real_name}]`)

test/utils/slack/user-matchers.test.ts

Lines changed: 78 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,23 @@ describe('user-matchers', () => {
7676
expect(matchers[0].check(userNoMatch)).toBe(false)
7777
})
7878

79+
it('should match case-insensitively by email when provided', () => {
80+
const params: MatchParams = { email: 'test@example.com' }
81+
const matchers = createUserMatchers(params)
82+
83+
const userMatch: Member = {
84+
profile: { email: 'TEST@EXAMPLE.COM' },
85+
} as Member
86+
const userNoMatch: Member = {
87+
profile: { email: 'other@example.com' },
88+
} as Member
89+
90+
// Test the email matcher with case differences
91+
expect(matchers.length).toBe(1)
92+
expect(matchers[0].check(userMatch)).toBe(true)
93+
expect(matchers[0].check(userNoMatch)).toBe(false)
94+
})
95+
7996
it('should match by username in email when provided', () => {
8097
const params: MatchParams = { username: 'testuser' }
8198
const matchers = createUserMatchers(params)
@@ -92,6 +109,22 @@ describe('user-matchers', () => {
92109
expect(matchers[0].check(userNoMatch)).toBe(false)
93110
})
94111

112+
it('should match case-insensitively by username in email when provided', () => {
113+
const params: MatchParams = { username: 'testuser' }
114+
const matchers = createUserMatchers(params)
115+
116+
const userMatch: Member = {
117+
profile: { email: 'TESTUSER@example.com' },
118+
} as Member
119+
const userNoMatch: Member = {
120+
profile: { email: 'other@example.com' },
121+
} as Member
122+
123+
// Test the username in email matcher with case differences
124+
expect(matchers[0].check(userMatch)).toBe(true)
125+
expect(matchers[0].check(userNoMatch)).toBe(false)
126+
})
127+
95128
it('should match by display_name when username provided', () => {
96129
const params: MatchParams = { username: 'displayuser' }
97130
const matchers = createUserMatchers(params)
@@ -108,6 +141,22 @@ describe('user-matchers', () => {
108141
expect(matchers[1].check(userNoMatch)).toBe(false)
109142
})
110143

144+
it('should match case-insensitively by display_name when username provided', () => {
145+
const params: MatchParams = { username: 'displayuser' }
146+
const matchers = createUserMatchers(params)
147+
148+
const userMatch: Member = {
149+
profile: { display_name: 'DISPLAYUSER' },
150+
} as Member
151+
const userNoMatch: Member = {
152+
profile: { display_name: 'otherdisplay' },
153+
} as Member
154+
155+
// Test the display_name matcher with case differences
156+
expect(matchers[1].check(userMatch)).toBe(true)
157+
expect(matchers[1].check(userNoMatch)).toBe(false)
158+
})
159+
111160
it('should match by real_name when username provided', () => {
112161
const params: MatchParams = { username: 'Real User' }
113162
const matchers = createUserMatchers(params)
@@ -124,6 +173,22 @@ describe('user-matchers', () => {
124173
expect(matchers[2].check(userNoMatch)).toBe(false)
125174
})
126175

176+
it('should match case-insensitively by real_name when username provided', () => {
177+
const params: MatchParams = { username: 'Real User' }
178+
const matchers = createUserMatchers(params)
179+
180+
const userMatch: Member = {
181+
profile: { real_name: 'real user' },
182+
} as Member
183+
const userNoMatch: Member = {
184+
profile: { real_name: 'Other Person' },
185+
} as Member
186+
187+
// Test the real_name matcher with case differences
188+
expect(matchers[2].check(userMatch)).toBe(true)
189+
expect(matchers[2].check(userNoMatch)).toBe(false)
190+
})
191+
127192
it('should create additional matchers for user mappings', () => {
128193
const userMappings: UserMapping[] = [{ githubUsername: 'github-user', slackUsername: 'slack-user' }]
129194
const params: MatchParams = { userMappings, username: 'github-user' }
@@ -195,6 +260,19 @@ describe('user-matchers', () => {
195260
expect(matchers[0].check(userNoMatch)).toBe(false)
196261
})
197262

263+
it('should match case-insensitively through user mapping', () => {
264+
const userMappings: UserMapping[] = [{ githubUsername: 'github-user', slackUsername: 'slack-name' }]
265+
const params: MatchParams = { userMappings, username: 'github-user' }
266+
const matchers = createUserMatchers(params)
267+
268+
const userMatch: Member = { name: 'SLACK-NAME' } as Member
269+
const userNoMatch: Member = { name: 'other-name' } as Member
270+
271+
// Test the mapping matcher with case differences
272+
expect(matchers[0].check(userMatch)).toBe(true)
273+
expect(matchers[0].check(userNoMatch)).toBe(false)
274+
})
275+
198276
it('should create multiple matchers for multiple mappings', () => {
199277
const userMappings: UserMapping[] = [
200278
{ githubUsername: 'github-user', slackUsername: 'slack-name-1' },

0 commit comments

Comments
 (0)