61 lines
2.2 KiB
JavaScript
61 lines
2.2 KiB
JavaScript
// The claude login dialog's step logic. Run by `npm test`, which Node runs
|
|
// with its built-in test runner and type stripping, so the `.ts` module is
|
|
// imported as it is.
|
|
import assert from "node:assert/strict";
|
|
import { test } from "node:test";
|
|
import {
|
|
afterCode,
|
|
afterStart,
|
|
claudeLoginPath,
|
|
leavesLoginRunning,
|
|
pastedCode,
|
|
startOutlivedDialog,
|
|
} from "../src/agent/claude-login/ClaudeLoginSteps.ts";
|
|
|
|
test("the routes name the agent, escaped", () => {
|
|
assert.equal(claudeLoginPath("atlas"), "/api/agents/atlas/claude-login");
|
|
assert.equal(
|
|
claudeLoginPath("atlas", true),
|
|
"/api/agents/atlas/claude-login/code",
|
|
);
|
|
assert.equal(claudeLoginPath("a/b"), "/api/agents/a%2Fb/claude-login");
|
|
});
|
|
|
|
test("a started login asks for the code at its URL", () => {
|
|
assert.deepEqual(afterStart({ url: "https://claude.ai/oauth/x" }), {
|
|
step: "code",
|
|
url: "https://claude.ai/oauth/x",
|
|
});
|
|
});
|
|
|
|
test("a start that failed shows why and has no URL", () => {
|
|
const problem = { detail: "no claude login minter is listening" };
|
|
assert.deepEqual(afterStart({ problem }), { step: "failed", problem });
|
|
});
|
|
|
|
test("an accepted code is stored; a refused one is a failure", () => {
|
|
assert.deepEqual(afterCode(null), { step: "stored" });
|
|
const problem = { detail: "OAuth error: invalid code" };
|
|
assert.deepEqual(afterCode(problem), { step: "failed", problem });
|
|
});
|
|
|
|
test("only a login waiting for its code is stopped on close", () => {
|
|
assert.equal(leavesLoginRunning({ step: "code", url: "https://u" }), true);
|
|
assert.equal(leavesLoginRunning({ step: "starting" }), false);
|
|
assert.equal(
|
|
leavesLoginRunning({ step: "submitting", url: "https://u" }),
|
|
false,
|
|
);
|
|
assert.equal(leavesLoginRunning({ step: "stored" }), false);
|
|
});
|
|
|
|
test("a start that answers after the dialog closed is stopped, unless it failed", () => {
|
|
assert.equal(startOutlivedDialog(false, null), true);
|
|
assert.equal(startOutlivedDialog(true, null), false);
|
|
assert.equal(startOutlivedDialog(false, { detail: "no minter" }), false);
|
|
});
|
|
|
|
test("a pasted code is trimmed, and a blank one is nothing", () => {
|
|
assert.equal(pastedCode(" abc-def \n"), "abc-def");
|
|
assert.equal(pastedCode(" \n "), null);
|
|
});
|