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') } }) })