Files
EJClaw/src/message-runtime-gating.test.ts

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