Files
clawdbot/test/mocks/twilio.ts
2025-11-25 00:10:34 +01:00

55 lines
1.5 KiB
TypeScript

import { vi } from "vitest";
type MockFn<T extends (...args: never[]) => unknown> = ReturnType<typeof vi.fn<T>>;
export type MockTwilioClient = {
messages: ((sid?: string) => { fetch: MockFn<() => unknown> }) & {
create: MockFn<() => unknown>;
list: MockFn<() => unknown>;
};
request?: MockFn<() => unknown>;
messaging?: {
v2: { channelsSenders: ((sid?: string) => { fetch: MockFn<() => unknown>; update: MockFn<() => unknown> }) & { list: MockFn<() => unknown> } };
v1: { services: MockFn<() => { update: MockFn<() => unknown>; fetch: MockFn<() => unknown> }> };
};
incomingPhoneNumbers?: ((sid?: string) => { update: MockFn<() => unknown> }) & {
list: MockFn<() => unknown>;
};
};
export function createMockTwilio() {
const messages = Object.assign(vi.fn((sid?: string) => ({ fetch: vi.fn() })), {
create: vi.fn(),
list: vi.fn(),
});
const channelsSenders = Object.assign(
vi.fn((sid?: string) => ({ fetch: vi.fn(), update: vi.fn() })),
{ list: vi.fn() },
);
const services = vi.fn(() => ({ update: vi.fn(), fetch: vi.fn() }));
const incomingPhoneNumbers = Object.assign(
vi.fn((sid?: string) => ({ update: vi.fn() })),
{ list: vi.fn() },
);
const client: MockTwilioClient = {
messages,
request: vi.fn(),
messaging: {
v2: { channelsSenders },
v1: { services },
},
incomingPhoneNumbers,
};
const factory = Object.assign(vi.fn(() => client), {
_client: client,
_createClient: () => client,
});
return { client, factory };
}