56 lines
1.8 KiB
TypeScript
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);
|
|
});
|
|
});
|