| 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("../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 }); |
| }); |
| }); |
|
|