d6be46d313
Co-Authored-By: Claude Opus 4.7 <noreply@anthropic.com>
40 lines
1.4 KiB
TypeScript
40 lines
1.4 KiB
TypeScript
import assert from "node:assert/strict";
|
|
import { test } from "bun:test";
|
|
|
|
import { handleTaskTreeProxyHttp } from "./tasktree-proxy.ts";
|
|
|
|
test("TaskTree proxy requires auth and forwards the unchanged API path", async () => {
|
|
const originalFetch = globalThis.fetch;
|
|
let upstreamUrl = "";
|
|
globalThis.fetch = (async (input) => {
|
|
upstreamUrl = String(input);
|
|
return Response.json({ ok: true, operation: "group.list", data: { groups: [] } });
|
|
}) as typeof fetch;
|
|
const response = captureResponse();
|
|
try {
|
|
await handleTaskTreeProxyHttp(
|
|
{ method: "GET", headers: {} },
|
|
response,
|
|
new URL("http://cloud.test/v1/tasktree/groups"),
|
|
{
|
|
env: { HWLAB_TASKTREE_URL: "http://hwlab-tasktree-api.hwlab-v03.svc.cluster.local:6673" },
|
|
accessController: { async authenticate() { return { ok: true, actor: { id: "usr_test" } }; } }
|
|
}
|
|
);
|
|
assert.equal(upstreamUrl, "http://hwlab-tasktree-api.hwlab-v03.svc.cluster.local:6673/v1/tasktree/groups");
|
|
assert.equal(response.status, 200);
|
|
assert.deepEqual(JSON.parse(response.body), { ok: true, operation: "group.list", data: { groups: [] } });
|
|
} finally {
|
|
globalThis.fetch = originalFetch;
|
|
}
|
|
});
|
|
|
|
function captureResponse() {
|
|
return {
|
|
status: 0,
|
|
body: "",
|
|
writeHead(status: number) { this.status = status; },
|
|
end(body: string) { this.body = body; }
|
|
};
|
|
}
|