test: fix gateway handler and typing lease helper types

This commit is contained in:
Gustavo Madeira Santana 2026-03-28 01:11:24 -04:00
parent e2a2492248
commit 21c00165ef
No known key found for this signature in database
2 changed files with 34 additions and 18 deletions

View File

@ -1,4 +1,5 @@
import { beforeEach, describe, expect, it, vi } from "vitest";
import type { GatewayRequestHandlerOptions } from "./types.js";
const mocks = vi.hoisted(() => ({
loadConfig: vi.fn(),
@ -42,6 +43,26 @@ vi.mock("../../infra/channel-activity.js", () => ({
import { channelsHandlers } from "./channels.js";
function createOptions(
params: Record<string, unknown>,
overrides?: Partial<GatewayRequestHandlerOptions>,
): GatewayRequestHandlerOptions {
return {
req: { type: "req", id: "req-1", method: "channels.status", params },
params,
client: null,
isWebchatConnect: () => false,
respond: vi.fn(),
context: {
getRuntimeSnapshot: () => ({
channels: {},
channelAccounts: {},
}),
},
...overrides,
} as unknown as GatewayRequestHandlerOptions;
}
describe("channelsHandlers channels.status", () => {
beforeEach(() => {
vi.clearAllMocks();
@ -80,20 +101,14 @@ describe("channelsHandlers channels.status", () => {
const autoEnabledConfig = { autoEnabled: true };
mocks.applyPluginAutoEnable.mockReturnValue({ config: autoEnabledConfig, changes: [] });
const respond = vi.fn();
const opts = createOptions(
{ probe: false, timeoutMs: 2000 },
{
respond,
},
);
await channelsHandlers["channels.status"]({
req: {} as never,
params: { probe: false, timeoutMs: 2000 } as never,
client: null,
isWebchatConnect: () => false,
respond,
context: {
getRuntimeSnapshot: () => ({
channels: {},
channelAccounts: {},
}),
} as never,
});
await channelsHandlers["channels.status"](opts);
expect(mocks.applyPluginAutoEnable).toHaveBeenCalledWith({
config: {},

View File

@ -1,4 +1,5 @@
import { expect, vi } from "vitest";
import type { MockFn } from "../../test-utils/vitest-mock-fn.js";
export function expectTypingPulseCount(pulse: { mock: { calls: unknown[] } }, expected: number) {
expect(pulse.mock.calls).toHaveLength(expected);
@ -8,13 +9,13 @@ export function createPulseWithBackgroundFailure<
TPulse extends (...args: never[]) => Promise<unknown>,
>() {
let callCount = 0;
const pulse = vi.fn((() => {
const pulse: MockFn<TPulse> = vi.fn(async () => {
callCount += 1;
if (callCount === 2) {
return Promise.reject(new Error("boom"));
throw new Error("boom");
}
return Promise.resolve(undefined);
}) as TPulse);
return undefined;
}) as MockFn<TPulse>;
return pulse;
}
@ -26,7 +27,7 @@ export async function expectIndependentTypingLeases<
buildParams: (pulse: TParams["pulse"]) => TParams;
}) {
vi.useFakeTimers();
const pulse = vi.fn(async () => undefined) as TParams["pulse"];
const pulse: MockFn<TParams["pulse"]> = vi.fn(async () => undefined) as MockFn<TParams["pulse"]>;
const leaseA = await params.createLease(params.buildParams(pulse));
const leaseB = await params.createLease(params.buildParams(pulse));