mirror of https://github.com/openclaw/openclaw.git
61 lines
1.6 KiB
TypeScript
61 lines
1.6 KiB
TypeScript
import { afterEach, beforeEach, describe, expect, it, vi } from "vitest";
|
|
import { probeZalouser } from "./probe.js";
|
|
import { getZaloUserInfo } from "./zalo-js.js";
|
|
|
|
vi.mock("./zalo-js.js", () => ({
|
|
getZaloUserInfo: vi.fn(),
|
|
}));
|
|
|
|
const mockGetUserInfo = vi.mocked(getZaloUserInfo);
|
|
|
|
describe("probeZalouser", () => {
|
|
beforeEach(() => {
|
|
mockGetUserInfo.mockReset();
|
|
});
|
|
|
|
afterEach(() => {
|
|
vi.useRealTimers();
|
|
});
|
|
|
|
it("returns ok=true with user when authenticated", async () => {
|
|
mockGetUserInfo.mockResolvedValueOnce({
|
|
userId: "123",
|
|
displayName: "Alice",
|
|
});
|
|
|
|
await expect(probeZalouser("default")).resolves.toEqual({
|
|
ok: true,
|
|
user: { userId: "123", displayName: "Alice" },
|
|
});
|
|
});
|
|
|
|
it("returns not authenticated when no user info is returned", async () => {
|
|
mockGetUserInfo.mockResolvedValueOnce(null);
|
|
await expect(probeZalouser("default")).resolves.toEqual({
|
|
ok: false,
|
|
error: "Not authenticated",
|
|
});
|
|
});
|
|
|
|
it("returns error when user lookup throws", async () => {
|
|
mockGetUserInfo.mockRejectedValueOnce(new Error("network down"));
|
|
await expect(probeZalouser("default")).resolves.toEqual({
|
|
ok: false,
|
|
error: "network down",
|
|
});
|
|
});
|
|
|
|
it("times out when lookup takes too long", async () => {
|
|
vi.useFakeTimers();
|
|
mockGetUserInfo.mockReturnValueOnce(new Promise(() => undefined));
|
|
|
|
const pending = probeZalouser("default", 10);
|
|
await vi.advanceTimersByTimeAsync(1000);
|
|
|
|
await expect(pending).resolves.toEqual({
|
|
ok: false,
|
|
error: "Not authenticated",
|
|
});
|
|
});
|
|
});
|