openclaw/src/webchat/server.test.ts

45 lines
1.4 KiB
TypeScript
Raw Normal View History

2025-12-09 23:16:57 +01:00
import http from "node:http";
import type { AddressInfo } from "node:net";
2025-12-09 14:41:55 +01:00
import { describe, expect, test } from "vitest";
2025-12-09 23:16:57 +01:00
import { startWebChatServer, stopWebChatServer } from "./server.js";
2025-12-09 14:41:55 +01:00
async function getFreePort(): Promise<number> {
const { createServer } = await import("node:net");
return await new Promise((resolve, reject) => {
const server = createServer();
server.listen(0, "127.0.0.1", () => {
const address = server.address() as AddressInfo;
const port = address.port as number;
2025-12-09 14:41:55 +01:00
server.close((err: Error | null) => (err ? reject(err) : resolve(port)));
});
});
}
2025-12-09 23:16:57 +01:00
const fetchText = (url: string) =>
new Promise<string>((resolve, reject) => {
http
.get(url, (res) => {
const chunks: Buffer[] = [];
res
.on("data", (c) =>
chunks.push(Buffer.isBuffer(c) ? c : Buffer.from(c)),
)
.on("end", () => resolve(Buffer.concat(chunks).toString("utf-8")))
.on("error", reject);
})
.on("error", reject);
});
2025-12-09 14:41:55 +01:00
2025-12-09 23:16:57 +01:00
describe("webchat server (static only)", () => {
test("serves index.html over loopback", { timeout: 8000 }, async () => {
const port = await getFreePort();
await startWebChatServer(port);
try {
const body = await fetchText(`http://127.0.0.1:${port}/`);
expect(body.toLowerCase()).toContain("<html");
} finally {
await stopWebChatServer();
}
});
2025-12-09 14:41:55 +01:00
});