cc-libs/tools/trapos-server/test/opencode.test.ts

81 lines
2.7 KiB
TypeScript

import assert from "node:assert/strict";
import { test } from "node:test";
import { createOpencodeProbe } from "../src/opencode.js";
function jsonResponse(status: number): Response {
return new Response(JSON.stringify({}), {
status,
headers: { "content-type": "application/json" },
});
}
test("no OPENCODE_URL -> ok:false without calling fetch", async () => {
let called = false;
const probe = createOpencodeProbe({
opencodeUrl: undefined,
opencodeUsername: "opencode",
fetch: () => {
called = true;
return Promise.resolve(jsonResponse(200));
},
});
const result = await probe.probe();
assert.equal(result.ok, false);
assert.equal(result.detail, "OPENCODE_URL not set");
assert.equal(called, false);
});
test("2xx -> ok:true with no detail", async () => {
const probe = createOpencodeProbe({
opencodeUrl: "http://127.0.0.1:4242",
opencodeUsername: "opencode",
opencodeServerPassword: "pw",
fetch: () => Promise.resolve(jsonResponse(200)),
});
const result = await probe.probe();
assert.equal(result.ok, true);
assert.equal(result.detail, undefined);
});
test("401 -> ok:false with url + status in detail", async () => {
const probe = createOpencodeProbe({
opencodeUrl: "http://127.0.0.1:4242",
opencodeUsername: "opencode",
opencodeServerPassword: "pw",
fetch: () => Promise.resolve(jsonResponse(401)),
});
const result = await probe.probe();
assert.equal(result.ok, false);
assert.match(result.detail ?? "", /127\.0\.0\.1:4242/);
assert.match(result.detail ?? "", /401/);
});
test("fetch throws (timeout/network) -> ok:false with error in detail", async () => {
const probe = createOpencodeProbe({
opencodeUrl: "http://127.0.0.1:4242",
opencodeUsername: "opencode",
fetch: () => Promise.reject(new Error("The operation was aborted")),
});
const result = await probe.probe();
assert.equal(result.ok, false);
assert.match(result.detail ?? "", /aborted/);
});
test("sends Basic auth header built from username + server password", async () => {
let seenAuth: string | null = null;
const probe = createOpencodeProbe({
opencodeUrl: "http://127.0.0.1:4242",
opencodeUsername: "customuser",
opencodeServerPassword: "pw",
fetch: (input, init) => {
// hey-api passes headers on the Request input; fall back to init for safety.
const headers = new Headers(input instanceof Request ? input.headers : init?.headers);
seenAuth = headers.get("authorization") ?? new Headers(init?.headers).get("authorization");
return Promise.resolve(jsonResponse(200));
},
});
await probe.probe();
const expected = "Basic " + Buffer.from("customuser:pw").toString("base64");
assert.equal(seenAuth, expected);
});