55 lines
1.5 KiB
TypeScript
55 lines
1.5 KiB
TypeScript
import { beforeEach, describe, expect, it, vi } from 'vitest';
|
|
import type { RegisteredGroup } from './types.js';
|
|
|
|
const { handleSessionCommandMock } = vi.hoisted(() => ({
|
|
handleSessionCommandMock: vi.fn(),
|
|
}));
|
|
|
|
vi.mock('./session-commands.js', () => ({
|
|
handleSessionCommand: handleSessionCommandMock,
|
|
}));
|
|
|
|
import { handleQueuedRunGates } from './message-runtime-gating.js';
|
|
|
|
describe('message-runtime-gating', () => {
|
|
const baseArgs = {
|
|
chatJid: 'room-1',
|
|
group: {
|
|
folder: 'room-folder',
|
|
name: 'room',
|
|
isMain: false,
|
|
trigger: '코덱스',
|
|
added_at: new Date().toISOString(),
|
|
} satisfies RegisteredGroup,
|
|
runId: 'run-1',
|
|
missedMessages: [],
|
|
triggerPattern: /^코덱스/,
|
|
timezone: 'Asia/Seoul',
|
|
hasImplicitContinuationWindow: () => false,
|
|
sessionCommandDeps: {} as never,
|
|
};
|
|
|
|
beforeEach(() => {
|
|
handleSessionCommandMock.mockReset();
|
|
});
|
|
|
|
it('returns session-command results directly when a command is handled', async () => {
|
|
handleSessionCommandMock.mockResolvedValue({
|
|
handled: true,
|
|
success: false,
|
|
});
|
|
|
|
const result = await handleQueuedRunGates(baseArgs);
|
|
|
|
expect(result).toEqual({ handled: true, success: false });
|
|
});
|
|
|
|
it('falls through when no session command is handled', async () => {
|
|
handleSessionCommandMock.mockResolvedValue({ handled: false });
|
|
|
|
const result = await handleQueuedRunGates(baseArgs);
|
|
|
|
expect(result).toEqual({ handled: false });
|
|
});
|
|
});
|