openclaw/extensions/slack/src/probe.test.ts

65 lines
2.0 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from "vitest";
const authTestMock = vi.hoisted(() => vi.fn());
const createSlackWebClientMock = vi.hoisted(() => vi.fn());
const withTimeoutMock = vi.hoisted(() => vi.fn());
vi.mock("./client.js", () => ({
createSlackWebClient: createSlackWebClientMock,
}));
vi.mock("../../../src/utils/with-timeout.js", () => ({
withTimeout: withTimeoutMock,
}));
const { probeSlack } = await import("./probe.js");
describe("probeSlack", () => {
beforeEach(() => {
authTestMock.mockReset();
createSlackWebClientMock.mockReset();
withTimeoutMock.mockReset();
createSlackWebClientMock.mockReturnValue({
auth: {
test: authTestMock,
},
});
withTimeoutMock.mockImplementation(async (promise: Promise<unknown>) => await promise);
});
it("maps Slack auth metadata on success", async () => {
vi.spyOn(Date, "now").mockReturnValueOnce(100).mockReturnValueOnce(145);
authTestMock.mockResolvedValue({
ok: true,
user_id: "U123",
user: "openclaw-bot",
team_id: "T123",
team: "OpenClaw",
});
await expect(probeSlack("xoxb-test", 2500)).resolves.toEqual({
ok: true,
status: 200,
elapsedMs: 45,
bot: { id: "U123", name: "openclaw-bot" },
team: { id: "T123", name: "OpenClaw" },
});
expect(createSlackWebClientMock).toHaveBeenCalledWith("xoxb-test");
expect(withTimeoutMock).toHaveBeenCalledWith(expect.any(Promise), 2500);
});
it("keeps optional auth metadata fields undefined when Slack omits them", async () => {
vi.spyOn(Date, "now").mockReturnValueOnce(200).mockReturnValueOnce(235);
authTestMock.mockResolvedValue({ ok: true });
const result = await probeSlack("xoxb-test");
expect(result.ok).toBe(true);
expect(result.status).toBe(200);
expect(result.elapsedMs).toBe(35);
expect(result.bot).toStrictEqual({ id: undefined, name: undefined });
expect(result.team).toStrictEqual({ id: undefined, name: undefined });
});
});