25 lines
1.2 KiB
JavaScript
25 lines
1.2 KiB
JavaScript
import assert from "node:assert/strict";
|
|
import test from "node:test";
|
|
import { buildLocalMulticaCallbackUrl, buildManagedMulticaLoginUrl, parseMulticaLoginOutput } from "./multica-oauth.js";
|
|
|
|
const output = `Waiting for authentication...\nhttps://mul.example/login?cli_callback=http%3A%2F%2Flocalhost%3A43239%2Fcallback&cli_state=nonce`;
|
|
|
|
test("parses Multica login output", () => {
|
|
const parsed = parseMulticaLoginOutput(output);
|
|
assert.equal(parsed.callbackUrl.port, "43239");
|
|
assert.equal(parsed.state, "nonce");
|
|
});
|
|
|
|
test("rewrites Multica login to the managed callback endpoint", () => {
|
|
const loginUrl = new URL(buildManagedMulticaLoginUrl(output, "https://agent.example", "session-id"));
|
|
assert.equal(loginUrl.searchParams.get("cli_callback"), "https://agent.example/api/integrations/multica/oauth/callback/session-id");
|
|
});
|
|
|
|
test("builds the local callback only when state matches", () => {
|
|
assert.equal(
|
|
buildLocalMulticaCallbackUrl(output, { token: "secret", state: "nonce" }),
|
|
"http://localhost:43239/callback?token=secret&state=nonce",
|
|
);
|
|
assert.throws(() => buildLocalMulticaCallbackUrl(output, { token: "secret", state: "wrong" }), /校验失败/);
|
|
});
|