ai-chatbot/tests/routes/canvas-runtime-internal-endpoint.test.ts

56 lines
1.8 KiB
TypeScript

import { expect, test } from "@playwright/test";
import { resolveCanvasRuntimeEndpoint } from "@/lib/canvas/capabilities/internal-endpoint";
import {
enqueueCanvasCapabilityExecution,
getCanvasCapabilityQueueDepth,
} from "@/lib/canvas/capabilities/task-queue";
test.describe("canvas runtime internal endpoints", () => {
test("uses the local HTTP listener for server-internal capability calls", () => {
expect(
resolveCanvasRuntimeEndpoint(
"/api/enhance",
"https://ai.yydd.ai/api/canvas/canvas-1/capabilities",
{ port: "3125" }
)
).toBe("http://127.0.0.1:3125/api/enhance");
expect(
resolveCanvasRuntimeEndpoint(
"/api/enhance",
"https://ai.yydd.ai/api/canvas/canvas-1/capabilities",
{ internalOrigin: "http://canvas-runtime:3000/base" }
)
).toBe("http://canvas-runtime:3000/api/enhance");
});
test("falls back to the incoming origin without an internal listener", () => {
expect(
resolveCanvasRuntimeEndpoint(
"/api/enhance",
"https://ai.yydd.ai/api/canvas/canvas-1/capabilities",
{ port: "invalid" }
)
).toBe("https://ai.yydd.ai/api/enhance");
});
test("continues the project queue after a failed capability execution", async () => {
await expect(
enqueueCanvasCapabilityExecution({
projectId: "failed-capability-project",
execute: async () => {
throw new Error("expected capability failure");
},
})
).rejects.toThrow("expected capability failure");
await expect(
enqueueCanvasCapabilityExecution({
projectId: "failed-capability-project",
execute: async () => "recovered",
})
).resolves.toBe("recovered");
expect(getCanvasCapabilityQueueDepth("failed-capability-project")).toBe(0);
});
});