68 lines
2.1 KiB
TypeScript
68 lines
2.1 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
|
|
vi.mock('./service-routing.js', () => ({
|
|
hasReviewerLease: vi.fn(() => false),
|
|
}));
|
|
|
|
import * as serviceRouting from './service-routing.js';
|
|
import { sendScheduledMessage } from './task-scheduler-runtime.js';
|
|
|
|
describe('scheduled message delivery identity', () => {
|
|
beforeEach(() => {
|
|
vi.mocked(serviceRouting.hasReviewerLease).mockReturnValue(false);
|
|
});
|
|
|
|
it('uses the default owner identity for owner output in paired rooms', async () => {
|
|
vi.mocked(serviceRouting.hasReviewerLease).mockReturnValue(true);
|
|
const sendMessage = vi.fn(async () => {});
|
|
const sendMessageViaReviewerBot = vi.fn(async () => {});
|
|
|
|
await sendScheduledMessage(
|
|
{ sendMessage, sendMessageViaReviewerBot } as any,
|
|
'paired@g.us',
|
|
'owner watcher done',
|
|
'owner',
|
|
);
|
|
|
|
expect(sendMessage).toHaveBeenCalledWith(
|
|
'paired@g.us',
|
|
'owner watcher done',
|
|
);
|
|
expect(sendMessageViaReviewerBot).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('uses the reviewer identity for claude output in paired rooms', async () => {
|
|
vi.mocked(serviceRouting.hasReviewerLease).mockReturnValue(true);
|
|
const sendMessage = vi.fn(async () => {});
|
|
const sendMessageViaReviewerBot = vi.fn(async () => {});
|
|
|
|
await sendScheduledMessage(
|
|
{ sendMessage, sendMessageViaReviewerBot } as any,
|
|
'paired@g.us',
|
|
'reviewer watcher done',
|
|
'reviewer',
|
|
);
|
|
|
|
expect(sendMessageViaReviewerBot).toHaveBeenCalledWith(
|
|
'paired@g.us',
|
|
'reviewer watcher done',
|
|
);
|
|
expect(sendMessage).not.toHaveBeenCalled();
|
|
});
|
|
|
|
it('fails closed for reviewer output when the reviewer bot is missing', async () => {
|
|
vi.mocked(serviceRouting.hasReviewerLease).mockReturnValue(true);
|
|
const sendMessage = vi.fn(async () => {});
|
|
|
|
await expect(
|
|
sendScheduledMessage(
|
|
{ sendMessage } as any,
|
|
'paired@g.us',
|
|
'reviewer watcher done',
|
|
'reviewer',
|
|
),
|
|
).rejects.toThrow(/reviewer Discord bot/);
|
|
expect(sendMessage).not.toHaveBeenCalled();
|
|
});
|
|
});
|