test: cover gmail tailscale error formatting

This commit is contained in:
Peter Steinberger
2026-01-07 03:16:52 +01:00
parent 2986447935
commit 023a124312

View File

@@ -45,3 +45,79 @@ describe("resolvePythonExecutablePath", () => {
}
}, 60_000);
});
describe("ensureTailscaleEndpoint", () => {
it("includes stdout and exit code when tailscale serve fails", async () => {
vi.doMock("../process/exec.js", () => ({
runCommandWithTimeout: vi.fn(),
}));
const { ensureTailscaleEndpoint } = await import("./gmail-setup-utils.js");
const { runCommandWithTimeout } = await import("../process/exec.js");
const runCommand = vi.mocked(runCommandWithTimeout);
runCommand
.mockResolvedValueOnce({
stdout: JSON.stringify({ Self: { DNSName: "host.tailnet.ts.net." } }),
stderr: "",
code: 0,
signal: null,
killed: false,
})
.mockResolvedValueOnce({
stdout: "tailscale output",
stderr: "Warning: client version mismatch",
code: 1,
signal: null,
killed: false,
});
let message = "";
try {
await ensureTailscaleEndpoint({
mode: "serve",
path: "/gmail-pubsub",
port: 8788,
});
} catch (err) {
message = err instanceof Error ? err.message : String(err);
}
expect(message).toContain("code=1");
expect(message).toContain("stderr: Warning: client version mismatch");
expect(message).toContain("stdout: tailscale output");
});
it("includes JSON parse failure details with stdout", async () => {
vi.doMock("../process/exec.js", () => ({
runCommandWithTimeout: vi.fn(),
}));
const { ensureTailscaleEndpoint } = await import("./gmail-setup-utils.js");
const { runCommandWithTimeout } = await import("../process/exec.js");
const runCommand = vi.mocked(runCommandWithTimeout);
runCommand.mockResolvedValueOnce({
stdout: "not-json",
stderr: "",
code: 0,
signal: null,
killed: false,
});
let message = "";
try {
await ensureTailscaleEndpoint({
mode: "funnel",
path: "/gmail-pubsub",
port: 8788,
});
} catch (err) {
message = err instanceof Error ? err.message : String(err);
}
expect(message).toContain("returned invalid JSON");
expect(message).toContain("stdout: not-json");
expect(message).toContain("code=0");
});
});