Skip to content
Merged
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
18 changes: 10 additions & 8 deletions dist/index.js
Original file line number Diff line number Diff line change
Expand Up @@ -81719,9 +81719,9 @@ var SlackAppUrl;

function customMappingMatcher(githubUsername, slackUsername) {
return {
check: (user) => user.name === slackUsername ||
user.profile?.display_name === slackUsername ||
user.profile?.real_name === slackUsername,
check: (user) => user.name?.toLowerCase() === slackUsername.toLowerCase() ||
user.profile?.display_name?.toLowerCase() === slackUsername.toLowerCase() ||
user.profile?.real_name?.toLowerCase() === slackUsername.toLowerCase(),
description: 'custom user mapping',
log: (user) => {
(0,core.debug)(`Match found by custom mapping: GitHub username [${githubUsername}] to Slack username [${slackUsername}] for user [${user.id}]`);
Expand All @@ -81730,7 +81730,7 @@ function customMappingMatcher(githubUsername, slackUsername) {
}
function displayNameMatcher(username) {
return {
check: (user) => user.profile?.display_name === username,
check: (user) => user.profile?.display_name?.toLowerCase() === username.toLowerCase(),
description: 'user.profile.display_name fields',
log: (user) => {
(0,core.debug)(`Match found by username [${username}] matching Slack displayName [${user.profile?.display_name}]`);
Expand All @@ -81739,7 +81739,9 @@ function displayNameMatcher(username) {
}
function emailContainsMatcher(username) {
return {
check: (user) => String(user.profile?.email ?? '').includes(username),
check: (user) => String(user.profile?.email ?? '')
.toLowerCase()
.includes(username.toLowerCase()),
description: 'user.profile.email contains check',
log: (user) => {
(0,core.debug)(`Match found by username [${username}] contained in Slack email [${user.profile?.email}]`);
Expand All @@ -81748,7 +81750,7 @@ function emailContainsMatcher(username) {
}
function emailMatcher(email) {
return {
check: (user) => user.profile?.email === email,
check: (user) => user.profile?.email?.toLowerCase() === email.toLowerCase(),
description: 'user.profile.email fields',
log: (user) => {
(0,core.debug)(`Match found by email [${email}] with Slack email [${user.profile?.email}]`);
Expand All @@ -81757,7 +81759,7 @@ function emailMatcher(email) {
}
function realNameMatcher(username) {
return {
check: (user) => user.profile?.real_name === username,
check: (user) => user.profile?.real_name?.toLowerCase() === username.toLowerCase(),
description: 'user.profile.real_name fields',
log: (user) => {
(0,core.debug)(`Match found by username [${username}] matching Slack realName [${user.profile?.real_name}]`);
Expand Down Expand Up @@ -90629,7 +90631,7 @@ module.exports = {"version":"3.17.0"};
/***/ 8330:
/***/ ((module) => {

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

/***/ })

Expand Down
2 changes: 1 addition & 1 deletion dist/index.js.map

Large diffs are not rendered by default.

12 changes: 6 additions & 6 deletions package-lock.json

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

4 changes: 2 additions & 2 deletions package.json
Original file line number Diff line number Diff line change
@@ -1,7 +1,7 @@
{
"name": "@krauters/github-notifier",
"description": "GitHub Notifier by Krauters – Post Open Pull Requests to Slack",
"version": "1.3.1",
"version": "1.3.2",
"author": "Colten Krauter <coltenkrauter>",
"type": "module",
"homepage": "https://buymeacoffee.com/coltenkrauter",
Expand Down Expand Up @@ -47,7 +47,7 @@
"devDependencies": {
"@krauters/eslint-config": "^1.8.0",
"@types/jest": "^29.5.14",
"@types/node": "^22.15.0",
"@types/node": "^22.15.3",
"@vercel/ncc": "^0.38.3",
"husky": "9.1.7",
"jest": "^29.7.0",
Expand Down
17 changes: 10 additions & 7 deletions src/utils/slack/user-matchers.ts
Original file line number Diff line number Diff line change
Expand Up @@ -20,9 +20,9 @@ export interface UserMatcher {
function customMappingMatcher(githubUsername: string, slackUsername: string): UserMatcher {
return {
check: (user: Member) =>
user.name === slackUsername ||
user.profile?.display_name === slackUsername ||
user.profile?.real_name === slackUsername,
user.name?.toLowerCase() === slackUsername.toLowerCase() ||
user.profile?.display_name?.toLowerCase() === slackUsername.toLowerCase() ||
user.profile?.real_name?.toLowerCase() === slackUsername.toLowerCase(),
description: 'custom user mapping',
log: (user: Member) => {
debug(
Expand All @@ -34,7 +34,7 @@ function customMappingMatcher(githubUsername: string, slackUsername: string): Us

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

function emailContainsMatcher(username: string): UserMatcher {
return {
check: (user: Member) => String(user.profile?.email ?? '').includes(username),
check: (user: Member) =>
String(user.profile?.email ?? '')
.toLowerCase()
.includes(username.toLowerCase()),
description: 'user.profile.email contains check',
log: (user: Member) => {
debug(`Match found by username [${username}] contained in Slack email [${user.profile?.email}]`)
Expand All @@ -54,7 +57,7 @@ function emailContainsMatcher(username: string): UserMatcher {

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

function realNameMatcher(username: string): UserMatcher {
return {
check: (user: Member) => user.profile?.real_name === username,
check: (user: Member) => user.profile?.real_name?.toLowerCase() === username.toLowerCase(),
description: 'user.profile.real_name fields',
log: (user: Member) => {
debug(`Match found by username [${username}] matching Slack realName [${user.profile?.real_name}]`)
Expand Down
78 changes: 78 additions & 0 deletions test/utils/slack/user-matchers.test.ts
Original file line number Diff line number Diff line change
Expand Up @@ -76,6 +76,23 @@ describe('user-matchers', () => {
expect(matchers[0].check(userNoMatch)).toBe(false)
})

it('should match case-insensitively by email when provided', () => {
const params: MatchParams = { email: '[email protected]' }
const matchers = createUserMatchers(params)

const userMatch: Member = {
profile: { email: '[email protected]' },
} as Member
const userNoMatch: Member = {
profile: { email: '[email protected]' },
} as Member

// Test the email matcher with case differences
expect(matchers.length).toBe(1)
expect(matchers[0].check(userMatch)).toBe(true)
expect(matchers[0].check(userNoMatch)).toBe(false)
})

it('should match by username in email when provided', () => {
const params: MatchParams = { username: 'testuser' }
const matchers = createUserMatchers(params)
Expand All @@ -92,6 +109,22 @@ describe('user-matchers', () => {
expect(matchers[0].check(userNoMatch)).toBe(false)
})

it('should match case-insensitively by username in email when provided', () => {
const params: MatchParams = { username: 'testuser' }
const matchers = createUserMatchers(params)

const userMatch: Member = {
profile: { email: '[email protected]' },
} as Member
const userNoMatch: Member = {
profile: { email: '[email protected]' },
} as Member

// Test the username in email matcher with case differences
expect(matchers[0].check(userMatch)).toBe(true)
expect(matchers[0].check(userNoMatch)).toBe(false)
})

it('should match by display_name when username provided', () => {
const params: MatchParams = { username: 'displayuser' }
const matchers = createUserMatchers(params)
Expand All @@ -108,6 +141,22 @@ describe('user-matchers', () => {
expect(matchers[1].check(userNoMatch)).toBe(false)
})

it('should match case-insensitively by display_name when username provided', () => {
const params: MatchParams = { username: 'displayuser' }
const matchers = createUserMatchers(params)

const userMatch: Member = {
profile: { display_name: 'DISPLAYUSER' },
} as Member
const userNoMatch: Member = {
profile: { display_name: 'otherdisplay' },
} as Member

// Test the display_name matcher with case differences
expect(matchers[1].check(userMatch)).toBe(true)
expect(matchers[1].check(userNoMatch)).toBe(false)
})

it('should match by real_name when username provided', () => {
const params: MatchParams = { username: 'Real User' }
const matchers = createUserMatchers(params)
Expand All @@ -124,6 +173,22 @@ describe('user-matchers', () => {
expect(matchers[2].check(userNoMatch)).toBe(false)
})

it('should match case-insensitively by real_name when username provided', () => {
const params: MatchParams = { username: 'Real User' }
const matchers = createUserMatchers(params)

const userMatch: Member = {
profile: { real_name: 'real user' },
} as Member
const userNoMatch: Member = {
profile: { real_name: 'Other Person' },
} as Member

// Test the real_name matcher with case differences
expect(matchers[2].check(userMatch)).toBe(true)
expect(matchers[2].check(userNoMatch)).toBe(false)
})

it('should create additional matchers for user mappings', () => {
const userMappings: UserMapping[] = [{ githubUsername: 'github-user', slackUsername: 'slack-user' }]
const params: MatchParams = { userMappings, username: 'github-user' }
Expand Down Expand Up @@ -195,6 +260,19 @@ describe('user-matchers', () => {
expect(matchers[0].check(userNoMatch)).toBe(false)
})

it('should match case-insensitively through user mapping', () => {
const userMappings: UserMapping[] = [{ githubUsername: 'github-user', slackUsername: 'slack-name' }]
const params: MatchParams = { userMappings, username: 'github-user' }
const matchers = createUserMatchers(params)

const userMatch: Member = { name: 'SLACK-NAME' } as Member
const userNoMatch: Member = { name: 'other-name' } as Member

// Test the mapping matcher with case differences
expect(matchers[0].check(userMatch)).toBe(true)
expect(matchers[0].check(userNoMatch)).toBe(false)
})

it('should create multiple matchers for multiple mappings', () => {
const userMappings: UserMapping[] = [
{ githubUsername: 'github-user', slackUsername: 'slack-name-1' },
Expand Down
Loading