mirror of
https://github.com/openclaw/openclaw.git
synced 2026-05-29 17:15:03 +00:00
test: dedupe and optimize test suites
This commit is contained in:
@@ -47,6 +47,21 @@ function createRemoteQrConfig(params?: { withTailscale?: boolean }) {
|
||||
}
|
||||
|
||||
describe("registerQrCli", () => {
|
||||
function createProgram() {
|
||||
const program = new Command();
|
||||
registerQrCli(program);
|
||||
return program;
|
||||
}
|
||||
|
||||
async function runQr(args: string[]) {
|
||||
const program = createProgram();
|
||||
await program.parseAsync(["qr", ...args], { from: "user" });
|
||||
}
|
||||
|
||||
async function expectQrExit(args: string[]) {
|
||||
await expect(runQr(args)).rejects.toThrow("exit");
|
||||
}
|
||||
|
||||
beforeEach(() => {
|
||||
vi.clearAllMocks();
|
||||
vi.stubEnv("OPENCLAW_GATEWAY_TOKEN", "");
|
||||
@@ -68,10 +83,7 @@ describe("registerQrCli", () => {
|
||||
},
|
||||
});
|
||||
|
||||
const program = new Command();
|
||||
registerQrCli(program);
|
||||
|
||||
await program.parseAsync(["qr", "--setup-code-only"], { from: "user" });
|
||||
await runQr(["--setup-code-only"]);
|
||||
|
||||
const expected = encodePairingSetupCode({
|
||||
url: "ws://gateway.local:18789",
|
||||
@@ -90,10 +102,7 @@ describe("registerQrCli", () => {
|
||||
},
|
||||
});
|
||||
|
||||
const program = new Command();
|
||||
registerQrCli(program);
|
||||
|
||||
await program.parseAsync(["qr"], { from: "user" });
|
||||
await runQr([]);
|
||||
|
||||
expect(qrGenerate).toHaveBeenCalledTimes(1);
|
||||
const output = runtime.log.mock.calls.map((call) => String(call[0] ?? "")).join("\n");
|
||||
@@ -111,12 +120,7 @@ describe("registerQrCli", () => {
|
||||
},
|
||||
});
|
||||
|
||||
const program = new Command();
|
||||
registerQrCli(program);
|
||||
|
||||
await program.parseAsync(["qr", "--setup-code-only", "--token", "override-token"], {
|
||||
from: "user",
|
||||
});
|
||||
await runQr(["--setup-code-only", "--token", "override-token"]);
|
||||
|
||||
const expected = encodePairingSetupCode({
|
||||
url: "ws://gateway.local:18789",
|
||||
@@ -133,10 +137,7 @@ describe("registerQrCli", () => {
|
||||
},
|
||||
});
|
||||
|
||||
const program = new Command();
|
||||
registerQrCli(program);
|
||||
|
||||
await expect(program.parseAsync(["qr"], { from: "user" })).rejects.toThrow("exit");
|
||||
await expectQrExit([]);
|
||||
|
||||
const output = runtime.error.mock.calls.map((call) => String(call[0] ?? "")).join("\n");
|
||||
expect(output).toContain("only bound to loopback");
|
||||
@@ -144,10 +145,7 @@ describe("registerQrCli", () => {
|
||||
|
||||
it("uses gateway.remote.url when --remote is set (ignores device-pair publicUrl)", async () => {
|
||||
loadConfig.mockReturnValue(createRemoteQrConfig());
|
||||
|
||||
const program = new Command();
|
||||
registerQrCli(program);
|
||||
await program.parseAsync(["qr", "--setup-code-only", "--remote"], { from: "user" });
|
||||
await runQr(["--setup-code-only", "--remote"]);
|
||||
|
||||
const expected = encodePairingSetupCode({
|
||||
url: "wss://remote.example.com:444",
|
||||
@@ -156,12 +154,18 @@ describe("registerQrCli", () => {
|
||||
expect(runtime.log).toHaveBeenCalledWith(expected);
|
||||
});
|
||||
|
||||
it("reports gateway.remote.url as source in --remote json output", async () => {
|
||||
loadConfig.mockReturnValue(createRemoteQrConfig());
|
||||
it.each([
|
||||
{ name: "without tailscale configured", withTailscale: false },
|
||||
{ name: "when tailscale is configured", withTailscale: true },
|
||||
])("reports gateway.remote.url as source in --remote json output ($name)", async (testCase) => {
|
||||
loadConfig.mockReturnValue(createRemoteQrConfig({ withTailscale: testCase.withTailscale }));
|
||||
runCommandWithTimeout.mockResolvedValue({
|
||||
code: 0,
|
||||
stdout: '{"Self":{"DNSName":"ts-host.tailnet.ts.net."}}',
|
||||
stderr: "",
|
||||
});
|
||||
|
||||
const program = new Command();
|
||||
registerQrCli(program);
|
||||
await program.parseAsync(["qr", "--json", "--remote"], { from: "user" });
|
||||
await runQr(["--json", "--remote"]);
|
||||
|
||||
const payload = JSON.parse(String(runtime.log.mock.calls.at(-1)?.[0] ?? "{}")) as {
|
||||
setupCode?: string;
|
||||
@@ -172,6 +176,7 @@ describe("registerQrCli", () => {
|
||||
expect(payload.gatewayUrl).toBe("wss://remote.example.com:444");
|
||||
expect(payload.auth).toBe("token");
|
||||
expect(payload.urlSource).toBe("gateway.remote.url");
|
||||
expect(runCommandWithTimeout).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("errors when --remote is set but no remote URL is configured", async () => {
|
||||
@@ -183,33 +188,8 @@ describe("registerQrCli", () => {
|
||||
},
|
||||
});
|
||||
|
||||
const program = new Command();
|
||||
registerQrCli(program);
|
||||
|
||||
await expect(program.parseAsync(["qr", "--remote"], { from: "user" })).rejects.toThrow("exit");
|
||||
|
||||
await expectQrExit(["--remote"]);
|
||||
const output = runtime.error.mock.calls.map((call) => String(call[0] ?? "")).join("\n");
|
||||
expect(output).toContain("qr --remote requires");
|
||||
});
|
||||
|
||||
it("prefers gateway.remote.url over tailscale when --remote is set", async () => {
|
||||
loadConfig.mockReturnValue(createRemoteQrConfig({ withTailscale: true }));
|
||||
runCommandWithTimeout.mockResolvedValue({
|
||||
code: 0,
|
||||
stdout: '{"Self":{"DNSName":"ts-host.tailnet.ts.net."}}',
|
||||
stderr: "",
|
||||
});
|
||||
|
||||
const program = new Command();
|
||||
registerQrCli(program);
|
||||
await program.parseAsync(["qr", "--json", "--remote"], { from: "user" });
|
||||
|
||||
const payload = JSON.parse(String(runtime.log.mock.calls.at(-1)?.[0] ?? "{}")) as {
|
||||
gatewayUrl?: string;
|
||||
urlSource?: string;
|
||||
};
|
||||
expect(payload.gatewayUrl).toBe("wss://remote.example.com:444");
|
||||
expect(payload.urlSource).toBe("gateway.remote.url");
|
||||
expect(runCommandWithTimeout).not.toHaveBeenCalled();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user