// 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); });