openclaw/src/commands/oauth-tls-preflight.test.ts
2026-03-02 21:39:43 +00:00

67 lines
2.2 KiB
TypeScript

import { beforeEach, describe, expect, it, vi } from "vitest";
import {
formatOpenAIOAuthTlsPreflightFix,
runOpenAIOAuthTlsPreflight,
} from "./oauth-tls-preflight.js";
describe("runOpenAIOAuthTlsPreflight", () => {
beforeEach(() => {
vi.clearAllMocks();
});
it("returns ok when OpenAI auth endpoint is reachable", async () => {
const fetchImpl = vi.fn(
async () => new Response("", { status: 400 }),
) as unknown as typeof fetch;
const result = await runOpenAIOAuthTlsPreflight({ fetchImpl, timeoutMs: 20 });
expect(result).toEqual({ ok: true });
});
it("classifies TLS trust failures from fetch cause code", async () => {
const tlsFetchImpl = vi.fn(async () => {
const cause = new Error("unable to get local issuer certificate") as Error & {
code?: string;
};
cause.code = "UNABLE_TO_GET_ISSUER_CERT_LOCALLY";
throw new TypeError("fetch failed", { cause });
}) as unknown as typeof fetch;
const result = await runOpenAIOAuthTlsPreflight({ fetchImpl: tlsFetchImpl, timeoutMs: 20 });
expect(result).toMatchObject({
ok: false,
kind: "tls-cert",
code: "UNABLE_TO_GET_ISSUER_CERT_LOCALLY",
});
});
it("keeps generic TLS transport failures in network classification", async () => {
const networkFetchImpl = vi.fn(async () => {
throw new TypeError("fetch failed", {
cause: new Error(
"Client network socket disconnected before secure TLS connection was established",
),
});
}) as unknown as typeof fetch;
const result = await runOpenAIOAuthTlsPreflight({
fetchImpl: networkFetchImpl,
timeoutMs: 20,
});
expect(result).toMatchObject({
ok: false,
kind: "network",
});
});
});
describe("formatOpenAIOAuthTlsPreflightFix", () => {
it("includes remediation commands for TLS failures", () => {
const text = formatOpenAIOAuthTlsPreflightFix({
ok: false,
kind: "tls-cert",
code: "UNABLE_TO_GET_ISSUER_CERT_LOCALLY",
message: "unable to get local issuer certificate",
});
expect(text).toContain("brew postinstall ca-certificates");
expect(text).toContain("brew postinstall openssl@3");
});
});