Skip to content

Commit 526b66f

Browse files
Cover completion path when cleanup set and delete both fail
Co-authored-by: Eric Allam <eric@trigger.dev>
1 parent 3c24068 commit 526b66f

File tree

1 file changed

+70
-0
lines changed

1 file changed

+70
-0
lines changed

packages/ai/src/chatTransport.test.ts

Lines changed: 70 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -2701,6 +2701,76 @@ describe("TriggerChatTransport", function () {
27012701
expect(runStore.deleteCalls).toContain("chat-cleanup-set-failure");
27022702
});
27032703

2704+
it("keeps completed streams successful when cleanup set and delete both fail", async function () {
2705+
const errors: TriggerChatTransportError[] = [];
2706+
const runStore = new FailingCleanupSetAndDeleteRunStore(4);
2707+
2708+
const server = await startServer(function (req, res) {
2709+
if (req.method === "POST" && req.url === "/api/v1/tasks/chat-task/trigger") {
2710+
res.writeHead(200, {
2711+
"content-type": "application/json",
2712+
"x-trigger-jwt": "pk_run_cleanup_set_delete_failure",
2713+
});
2714+
res.end(JSON.stringify({ id: "run_cleanup_set_delete_failure" }));
2715+
return;
2716+
}
2717+
2718+
if (
2719+
req.method === "GET" &&
2720+
req.url === "/realtime/v1/streams/run_cleanup_set_delete_failure/chat-stream"
2721+
) {
2722+
res.writeHead(200, {
2723+
"content-type": "text/event-stream",
2724+
});
2725+
writeSSE(
2726+
res,
2727+
"1-0",
2728+
JSON.stringify({ type: "text-start", id: "cleanup_set_delete_failure_1" })
2729+
);
2730+
writeSSE(
2731+
res,
2732+
"2-0",
2733+
JSON.stringify({ type: "text-end", id: "cleanup_set_delete_failure_1" })
2734+
);
2735+
res.end();
2736+
return;
2737+
}
2738+
2739+
res.writeHead(404);
2740+
res.end();
2741+
});
2742+
2743+
const transport = new TriggerChatTransport({
2744+
task: "chat-task",
2745+
stream: "chat-stream",
2746+
accessToken: "pk_trigger",
2747+
baseURL: server.url,
2748+
runStore,
2749+
onError: function onError(error) {
2750+
errors.push(error);
2751+
},
2752+
});
2753+
2754+
const stream = await transport.sendMessages({
2755+
trigger: "submit-message",
2756+
chatId: "chat-cleanup-set-delete-failure",
2757+
messageId: undefined,
2758+
messages: [],
2759+
abortSignal: undefined,
2760+
});
2761+
2762+
const chunks = await readChunks(stream);
2763+
expect(chunks).toHaveLength(2);
2764+
expect(errors).toHaveLength(0);
2765+
2766+
await waitForCondition(function () {
2767+
const state = runStore.get("chat-cleanup-set-delete-failure");
2768+
return Boolean(state && state.isActive === true && state.lastEventId === "2-0");
2769+
});
2770+
expect(runStore.setCalls).toContain("chat-cleanup-set-delete-failure");
2771+
expect(runStore.deleteCalls).toContain("chat-cleanup-set-delete-failure");
2772+
});
2773+
27042774
it("returns null from reconnect after stream completion cleanup", async function () {
27052775
const server = await startServer(function (req, res) {
27062776
if (req.method === "POST" && req.url === "/api/v1/tasks/chat-task/trigger") {

0 commit comments

Comments
 (0)