test: add explicit harness mock types

This commit is contained in:
Gustavo Madeira Santana 2026-02-14 16:46:06 -05:00
parent 123ae82fca
commit f94c06c53f
4 changed files with 63 additions and 22 deletions

View File

@ -256,7 +256,12 @@ vi.mock("./doctor-state-migrations.js", () => ({
runLegacyStateMigrations,
}));
export async function arrangeLegacyStateMigrationTest() {
export async function arrangeLegacyStateMigrationTest(): Promise<{
doctorCommand: unknown;
runtime: { log: MockFn; error: MockFn; exit: MockFn };
detectLegacyStateMigrations: MockFn;
runLegacyStateMigrations: MockFn;
}> {
readConfigFileSnapshot.mockResolvedValue({
path: "/tmp/openclaw.json",
exists: true,
@ -270,9 +275,9 @@ export async function arrangeLegacyStateMigrationTest() {
const { doctorCommand } = await import("./doctor.js");
const runtime = {
log: vi.fn(),
error: vi.fn(),
exit: vi.fn(),
log: vi.fn() as unknown as MockFn,
error: vi.fn() as unknown as MockFn,
exit: vi.fn() as unknown as MockFn,
};
detectLegacyStateMigrations.mockClear();

View File

@ -1,6 +1,21 @@
import { vi } from "vitest";
import type { MockFn } from "../test-utils/vitest-mock-fn.js";
export function discordWebMediaMockFactory() {
type DiscordWebMediaMockFactoryResult = {
loadWebMedia: MockFn;
loadWebMediaRaw: MockFn;
};
type DiscordRestFactoryResult = {
rest: import("@buape/carbon").RequestClient;
postMock: MockFn;
putMock: MockFn;
getMock: MockFn;
patchMock: MockFn;
deleteMock: MockFn;
};
export function discordWebMediaMockFactory(): DiscordWebMediaMockFactoryResult {
return {
loadWebMedia: vi.fn().mockResolvedValue({
buffer: Buffer.from("img"),
@ -17,12 +32,12 @@ export function discordWebMediaMockFactory() {
};
}
export function makeDiscordRest() {
const postMock = vi.fn();
const putMock = vi.fn();
const getMock = vi.fn();
const patchMock = vi.fn();
const deleteMock = vi.fn();
export function makeDiscordRest(): DiscordRestFactoryResult {
const postMock = vi.fn() as unknown as MockFn;
const putMock = vi.fn() as unknown as MockFn;
const getMock = vi.fn() as unknown as MockFn;
const patchMock = vi.fn() as unknown as MockFn;
const deleteMock = vi.fn() as unknown as MockFn;
return {
rest: {

View File

@ -1,18 +1,31 @@
import { beforeEach, vi } from "vitest";
import type { MockFn } from "../test-utils/vitest-mock-fn.js";
import { resetInboundDedupe } from "../auto-reply/reply/inbound-dedupe.js";
import { resetSystemEventsForTest } from "../infra/system-events.js";
const waitForTransportReadyMock = vi.hoisted(() => vi.fn());
const sendMock = vi.hoisted(() => vi.fn());
const replyMock = vi.hoisted(() => vi.fn());
const updateLastRouteMock = vi.hoisted(() => vi.fn());
const readAllowFromStoreMock = vi.hoisted(() => vi.fn());
const upsertPairingRequestMock = vi.hoisted(() => vi.fn());
const streamMock = vi.hoisted(() => vi.fn());
const signalCheckMock = vi.hoisted(() => vi.fn());
const signalRpcRequestMock = vi.hoisted(() => vi.fn());
type SignalToolResultTestMocks = {
waitForTransportReadyMock: MockFn;
sendMock: MockFn;
replyMock: MockFn;
updateLastRouteMock: MockFn;
readAllowFromStoreMock: MockFn;
upsertPairingRequestMock: MockFn;
streamMock: MockFn;
signalCheckMock: MockFn;
signalRpcRequestMock: MockFn;
};
export function getSignalToolResultTestMocks() {
const waitForTransportReadyMock = vi.hoisted(() => vi.fn()) as unknown as MockFn;
const sendMock = vi.hoisted(() => vi.fn()) as unknown as MockFn;
const replyMock = vi.hoisted(() => vi.fn()) as unknown as MockFn;
const updateLastRouteMock = vi.hoisted(() => vi.fn()) as unknown as MockFn;
const readAllowFromStoreMock = vi.hoisted(() => vi.fn()) as unknown as MockFn;
const upsertPairingRequestMock = vi.hoisted(() => vi.fn()) as unknown as MockFn;
const streamMock = vi.hoisted(() => vi.fn()) as unknown as MockFn;
const signalCheckMock = vi.hoisted(() => vi.fn()) as unknown as MockFn;
const signalRpcRequestMock = vi.hoisted(() => vi.fn()) as unknown as MockFn;
export function getSignalToolResultTestMocks(): SignalToolResultTestMocks {
return {
waitForTransportReadyMock,
sendMock,

View File

@ -1,4 +1,5 @@
import { beforeEach, vi } from "vitest";
import type { MockFn } from "../test-utils/vitest-mock-fn.js";
const { botApi, botCtorSpy } = vi.hoisted(() => ({
botApi: {
@ -20,6 +21,13 @@ const { loadConfig } = vi.hoisted(() => ({
loadConfig: vi.fn(() => ({})),
}));
type TelegramSendTestMocks = {
botApi: Record<string, MockFn>;
botCtorSpy: MockFn;
loadConfig: MockFn;
loadWebMedia: MockFn;
};
vi.mock("../web/media.js", () => ({
loadWebMedia,
}));
@ -48,7 +56,7 @@ vi.mock("../config/config.js", async (importOriginal) => {
};
});
export function getTelegramSendTestMocks() {
export function getTelegramSendTestMocks(): TelegramSendTestMocks {
return { botApi, botCtorSpy, loadConfig, loadWebMedia };
}