mirror of
https://github.com/paperclipai/paperclip.git
synced 2026-10-09 16:35:27 +02:00
83 lines
3.0 KiB
JavaScript
83 lines
3.0 KiB
JavaScript
import { describe, expect, it } from "vitest";
|
|
|
|
import { createLiveConsoleBrowserMiddleware, loadLiveConsoleRunner } from "./live-console-browser-server.mjs";
|
|
|
|
describe("Live console Vite transport bootstrap", () => {
|
|
it("loads the demo helpers from their owning modules instead of the public barrel", async () => {
|
|
const paths = [];
|
|
const runner = await loadLiveConsoleRunner(async (url) => {
|
|
const path = new URL(url).pathname;
|
|
paths.push(path.slice(path.lastIndexOf("/dist/") + 6));
|
|
// Exercise real exports without requiring generated dist in unit tests.
|
|
return import(url.replace("/dist/", "/src/").replace(/\.js$/, ".ts"));
|
|
});
|
|
expect(paths).toEqual([
|
|
"mock-core/live-console-demo-server.js",
|
|
"mock-core/live-console-demo-manifests.js",
|
|
"mock-core/live-console-scripted-driver.js",
|
|
"drivers/codex/codex-app-server-driver.js",
|
|
]);
|
|
expect(runner.assertLiveConsoleLoopbackBindHost).toBeTypeOf("function");
|
|
expect(runner.LiveConsoleDemoServer).toBeTypeOf("function");
|
|
expect(runner.LiveConsoleScriptedDriver).toBeTypeOf("function");
|
|
expect(runner.CodexAppServerDriver).toBeTypeOf("function");
|
|
expect(runner.liveConsoleDemoManifestCatalogue().length).toBeGreaterThan(0);
|
|
expect(() => runner.assertLiveConsoleLoopbackBindHost("0.0.0.0")).toThrow();
|
|
const middleware = createLiveConsoleBrowserMiddleware({
|
|
workingDirectory: "/server-owned-workspace",
|
|
loadRunner: async () => runner,
|
|
});
|
|
await middleware.prepare("127.0.0.1");
|
|
await middleware.close();
|
|
});
|
|
|
|
it("uses the runner's shared bind guard before constructing middleware", async () => {
|
|
const calls = [];
|
|
const middleware = createLiveConsoleBrowserMiddleware({
|
|
workingDirectory: "/server-owned-workspace",
|
|
loadRunner: async () => ({
|
|
assertLiveConsoleLoopbackBindHost(host) {
|
|
calls.push(host);
|
|
throw new Error("shared guard rejected non-loopback bind");
|
|
},
|
|
}),
|
|
});
|
|
|
|
await expect(middleware.prepare("0.0.0.0")).rejects.toThrow(
|
|
"shared guard rejected non-loopback bind",
|
|
);
|
|
expect(calls).toEqual(["0.0.0.0"]);
|
|
});
|
|
|
|
it("passes the validated Vite bind host into the shared demo server", async () => {
|
|
let serverOptions;
|
|
const middleware = createLiveConsoleBrowserMiddleware({
|
|
workingDirectory: "/server-owned-workspace",
|
|
loadRunner: async () => ({
|
|
assertLiveConsoleLoopbackBindHost(host) {
|
|
expect(host).toBe("127.0.0.1");
|
|
},
|
|
liveConsoleDemoManifestCatalogue: () => [],
|
|
LiveConsoleScriptedDriver: class {},
|
|
LiveConsoleDemoServer: class {
|
|
constructor(options) {
|
|
serverOptions = options;
|
|
}
|
|
|
|
middleware() {
|
|
return () => undefined;
|
|
}
|
|
|
|
async close() {}
|
|
},
|
|
}),
|
|
});
|
|
|
|
await middleware.prepare("127.0.0.1");
|
|
expect(serverOptions).toMatchObject({
|
|
host: "127.0.0.1",
|
|
workingDirectory: "/server-owned-workspace",
|
|
});
|
|
});
|
|
});
|