Files
claude-code/src/utils/__tests__/directMemberMessage.test.ts
2026-05-01 21:39:30 +08:00

120 lines
3.5 KiB
TypeScript

import { describe, expect, test } from 'bun:test'
import {
parseDirectMemberMessage,
sendDirectMemberMessage,
} from '../directMemberMessage'
describe('parseDirectMemberMessage', () => {
test("parses '@agent-name hello world'", () => {
const result = parseDirectMemberMessage('@agent-name hello world')
expect(result).toEqual({
recipientName: 'agent-name',
message: 'hello world',
})
})
test("parses '@agent-name single-word'", () => {
const result = parseDirectMemberMessage('@agent-name single-word')
expect(result).toEqual({
recipientName: 'agent-name',
message: 'single-word',
})
})
test('returns null for non-matching input', () => {
expect(parseDirectMemberMessage('hello world')).toBeNull()
})
test('returns null for empty string', () => {
expect(parseDirectMemberMessage('')).toBeNull()
})
test("returns null for '@name' without message", () => {
expect(parseDirectMemberMessage('@name')).toBeNull()
})
test("handles hyphenated agent names like '@my-agent msg'", () => {
const result = parseDirectMemberMessage('@my-agent msg')
expect(result).toEqual({ recipientName: 'my-agent', message: 'msg' })
})
test('handles multiline message content', () => {
const result = parseDirectMemberMessage('@agent line1\nline2')
expect(result).toEqual({ recipientName: 'agent', message: 'line1\nline2' })
})
test('extracts correct recipientName and message', () => {
const result = parseDirectMemberMessage('@alice please fix the bug')
expect(result?.recipientName).toBe('alice')
expect(result?.message).toBe('please fix the bug')
})
test('trims message whitespace', () => {
const result = parseDirectMemberMessage('@agent hello ')
expect(result?.message).toBe('hello')
})
})
describe('sendDirectMemberMessage', () => {
test('returns error when no team context', async () => {
const result = await sendDirectMemberMessage('agent', 'hello', null as any)
expect(result).toEqual({ success: false, error: 'no_team_context' })
})
test('returns error for unknown recipient', async () => {
const teamContext = {
teamName: 'team1',
teammates: { alice: { name: 'alice' } },
}
const result = await sendDirectMemberMessage(
'bob',
'hello',
teamContext as any,
async () => {},
)
expect(result).toEqual({
success: false,
error: 'unknown_recipient',
recipientName: 'bob',
})
})
test('calls writeToMailbox with correct args for valid recipient', async () => {
let mailboxArgs: any = null
const teamContext = {
teamName: 'team1',
teammates: { alice: { name: 'alice' } },
}
const result = await sendDirectMemberMessage(
'alice',
'hello',
teamContext as any,
async (recipient, msg, team) => {
mailboxArgs = { recipient, msg, team }
},
)
expect(result).toEqual({ success: true, recipientName: 'alice' })
expect(mailboxArgs.recipient).toBe('alice')
expect(mailboxArgs.msg.text).toBe('hello')
expect(mailboxArgs.msg.from).toBe('user')
expect(mailboxArgs.team).toBe('team1')
})
test('returns success for valid message', async () => {
const teamContext = {
teamName: 'team1',
teammates: { bob: { name: 'bob' } },
}
const result = await sendDirectMemberMessage(
'bob',
'test message',
teamContext as any,
async () => {},
)
expect(result.success).toBe(true)
if (result.success) {
expect(result.recipientName).toBe('bob')
}
})
})