mirror of
https://github.com/openclaw/openclaw.git
synced 2026-04-09 08:11:09 +00:00
fix(types): annotate portable exported helper types
This commit is contained in:
@@ -1,31 +1,77 @@
|
||||
import { vi } from "vitest";
|
||||
import { vi, type Mock } from "vitest";
|
||||
|
||||
type BoundConversation = {
|
||||
bindingId: string;
|
||||
targetSessionKey: string;
|
||||
};
|
||||
type UnknownMock = Mock<(...args: unknown[]) => unknown>;
|
||||
type AsyncUnknownMock = Mock<(...args: unknown[]) => Promise<unknown>>;
|
||||
type FinalizeInboundContextMock = Mock<
|
||||
(ctx: Record<string, unknown>, opts?: unknown) => Record<string, unknown>
|
||||
>;
|
||||
type DispatchReplyCounts = {
|
||||
final: number;
|
||||
block?: number;
|
||||
tool?: number;
|
||||
};
|
||||
type DispatchReplyContext = Record<string, unknown> & {
|
||||
SessionKey?: string;
|
||||
};
|
||||
type DispatchReplyDispatcher = {
|
||||
sendFinalReply: (payload: { text: string }) => unknown | Promise<unknown>;
|
||||
};
|
||||
type DispatchReplyFromConfigMock = Mock<
|
||||
(params: {
|
||||
ctx: DispatchReplyContext;
|
||||
dispatcher: DispatchReplyDispatcher;
|
||||
}) => Promise<{ queuedFinal: boolean; counts: DispatchReplyCounts }>
|
||||
>;
|
||||
type WithReplyDispatcherMock = Mock<
|
||||
(params: { run: () => unknown | Promise<unknown> }) => Promise<unknown>
|
||||
>;
|
||||
type FeishuLifecycleTestMocks = {
|
||||
createEventDispatcherMock: UnknownMock;
|
||||
monitorWebSocketMock: AsyncUnknownMock;
|
||||
monitorWebhookMock: AsyncUnknownMock;
|
||||
createFeishuThreadBindingManagerMock: UnknownMock;
|
||||
createFeishuReplyDispatcherMock: UnknownMock;
|
||||
resolveBoundConversationMock: Mock<() => BoundConversation | null>;
|
||||
touchBindingMock: UnknownMock;
|
||||
resolveAgentRouteMock: UnknownMock;
|
||||
resolveConfiguredBindingRouteMock: UnknownMock;
|
||||
ensureConfiguredBindingRouteReadyMock: UnknownMock;
|
||||
dispatchReplyFromConfigMock: DispatchReplyFromConfigMock;
|
||||
withReplyDispatcherMock: WithReplyDispatcherMock;
|
||||
finalizeInboundContextMock: FinalizeInboundContextMock;
|
||||
getMessageFeishuMock: AsyncUnknownMock;
|
||||
listFeishuThreadMessagesMock: AsyncUnknownMock;
|
||||
sendMessageFeishuMock: AsyncUnknownMock;
|
||||
sendCardFeishuMock: AsyncUnknownMock;
|
||||
};
|
||||
|
||||
const feishuLifecycleTestMocks = vi.hoisted(() => ({
|
||||
createEventDispatcherMock: vi.fn(),
|
||||
monitorWebSocketMock: vi.fn(async () => {}),
|
||||
monitorWebhookMock: vi.fn(async () => {}),
|
||||
createFeishuThreadBindingManagerMock: vi.fn(() => ({ stop: vi.fn() })),
|
||||
createFeishuReplyDispatcherMock: vi.fn(),
|
||||
resolveBoundConversationMock: vi.fn<() => BoundConversation | null>(() => null),
|
||||
touchBindingMock: vi.fn(),
|
||||
resolveAgentRouteMock: vi.fn(),
|
||||
resolveConfiguredBindingRouteMock: vi.fn(),
|
||||
ensureConfiguredBindingRouteReadyMock: vi.fn(),
|
||||
dispatchReplyFromConfigMock: vi.fn(),
|
||||
withReplyDispatcherMock: vi.fn(),
|
||||
finalizeInboundContextMock: vi.fn((ctx) => ctx),
|
||||
getMessageFeishuMock: vi.fn(async () => null),
|
||||
listFeishuThreadMessagesMock: vi.fn(async () => []),
|
||||
sendMessageFeishuMock: vi.fn(async () => ({ messageId: "om_sent", chatId: "chat_default" })),
|
||||
sendCardFeishuMock: vi.fn(async () => ({ messageId: "om_card", chatId: "chat_default" })),
|
||||
}));
|
||||
const feishuLifecycleTestMocks = vi.hoisted(
|
||||
(): FeishuLifecycleTestMocks => ({
|
||||
createEventDispatcherMock: vi.fn(),
|
||||
monitorWebSocketMock: vi.fn(async () => {}),
|
||||
monitorWebhookMock: vi.fn(async () => {}),
|
||||
createFeishuThreadBindingManagerMock: vi.fn(() => ({ stop: vi.fn() })),
|
||||
createFeishuReplyDispatcherMock: vi.fn(),
|
||||
resolveBoundConversationMock: vi.fn<() => BoundConversation | null>(() => null),
|
||||
touchBindingMock: vi.fn(),
|
||||
resolveAgentRouteMock: vi.fn(),
|
||||
resolveConfiguredBindingRouteMock: vi.fn(),
|
||||
ensureConfiguredBindingRouteReadyMock: vi.fn(),
|
||||
dispatchReplyFromConfigMock: vi.fn(),
|
||||
withReplyDispatcherMock: vi.fn(),
|
||||
finalizeInboundContextMock: vi.fn((ctx) => ctx),
|
||||
getMessageFeishuMock: vi.fn(async () => null),
|
||||
listFeishuThreadMessagesMock: vi.fn(async () => []),
|
||||
sendMessageFeishuMock: vi.fn(async () => ({ messageId: "om_sent", chatId: "chat_default" })),
|
||||
sendCardFeishuMock: vi.fn(async () => ({ messageId: "om_card", chatId: "chat_default" })),
|
||||
}),
|
||||
);
|
||||
|
||||
export function getFeishuLifecycleTestMocks() {
|
||||
export function getFeishuLifecycleTestMocks(): FeishuLifecycleTestMocks {
|
||||
return feishuLifecycleTestMocks;
|
||||
}
|
||||
|
||||
|
||||
@@ -1,5 +1,5 @@
|
||||
import { randomUUID } from "node:crypto";
|
||||
import { expect, vi } from "vitest";
|
||||
import { expect, vi, type Mock } from "vitest";
|
||||
import { createPluginRuntimeMock } from "../../../../test/helpers/plugins/plugin-runtime-mock.js";
|
||||
import type { ClawdbotConfig, PluginRuntime, RuntimeEnv } from "../../runtime-api.js";
|
||||
import { setFeishuRuntime } from "../runtime.js";
|
||||
@@ -9,6 +9,37 @@ type InboundDebouncerParams<T> = {
|
||||
onFlush?: (items: T[]) => Promise<void>;
|
||||
onError?: (err: unknown, items: T[]) => void;
|
||||
};
|
||||
type UnknownMock = Mock<(...args: unknown[]) => unknown>;
|
||||
type AsyncUnknownMock = Mock<(...args: unknown[]) => Promise<unknown>>;
|
||||
type FeishuDispatchReplyCounts = {
|
||||
final: number;
|
||||
block?: number;
|
||||
tool?: number;
|
||||
};
|
||||
type FeishuDispatchReplyContext = Record<string, unknown> & {
|
||||
SessionKey?: string;
|
||||
};
|
||||
type FeishuDispatchReplyDispatcher = {
|
||||
sendFinalReply: (payload: { text: string }) => unknown | Promise<unknown>;
|
||||
};
|
||||
type FeishuDispatchReplyMock = Mock<
|
||||
(args: {
|
||||
ctx: FeishuDispatchReplyContext;
|
||||
dispatcher: FeishuDispatchReplyDispatcher;
|
||||
}) => Promise<{ queuedFinal: boolean; counts: FeishuDispatchReplyCounts }>
|
||||
>;
|
||||
type FeishuLifecycleReplyDispatcher = {
|
||||
dispatcher: {
|
||||
sendToolResult: UnknownMock;
|
||||
sendBlockReply: UnknownMock;
|
||||
sendFinalReply: AsyncUnknownMock;
|
||||
waitForIdle: AsyncUnknownMock;
|
||||
getQueuedCounts: UnknownMock;
|
||||
markComplete: UnknownMock;
|
||||
};
|
||||
replyOptions: Record<string, never>;
|
||||
markDispatchIdle: UnknownMock;
|
||||
};
|
||||
|
||||
export function setFeishuLifecycleStateDir(prefix: string) {
|
||||
process.env.OPENCLAW_STATE_DIR = `/tmp/${prefix}-${randomUUID()}`;
|
||||
@@ -28,7 +59,7 @@ export const FEISHU_PREFETCHED_BOT_OPEN_ID_SOURCE = {
|
||||
botName: "Bot",
|
||||
} as const;
|
||||
|
||||
export function createFeishuLifecycleReplyDispatcher() {
|
||||
export function createFeishuLifecycleReplyDispatcher(): FeishuLifecycleReplyDispatcher {
|
||||
return {
|
||||
dispatcher: {
|
||||
sendToolResult: vi.fn(() => false),
|
||||
@@ -134,16 +165,7 @@ export function installFeishuLifecycleReplyRuntime(params: {
|
||||
}
|
||||
|
||||
export function mockFeishuReplyOnceDispatch(params: {
|
||||
dispatchReplyFromConfigMock: {
|
||||
mockImplementation: (
|
||||
fn: (args: {
|
||||
ctx?: unknown;
|
||||
dispatcher?: {
|
||||
sendFinalReply?: (payload: { text: string }) => Promise<unknown>;
|
||||
};
|
||||
}) => Promise<unknown>,
|
||||
) => void;
|
||||
};
|
||||
dispatchReplyFromConfigMock: FeishuDispatchReplyMock;
|
||||
replyText: string;
|
||||
shouldSendFinalReply?: (ctx: unknown) => boolean;
|
||||
}) {
|
||||
|
||||
Reference in New Issue
Block a user