Skip to content

Commit ed2207f

Browse files
Cover consumeTracking cleanup failures without masking root errors
Co-authored-by: Eric Allam <eric@trigger.dev>
1 parent 654bab0 commit ed2207f

File tree

1 file changed

+118
-0
lines changed

1 file changed

+118
-0
lines changed

packages/ai/src/chatTransport.test.ts

Lines changed: 118 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -1963,6 +1963,124 @@ describe("TriggerChatTransport", function () {
19631963
});
19641964
});
19651965

1966+
it("preserves consumeTrackingStream failures when cleanup run-store set throws", async function () {
1967+
const errors: TriggerChatTransportError[] = [];
1968+
const runStore = new FailingCleanupSetRunStore(2);
1969+
1970+
const server = await startServer(function (req, res) {
1971+
if (req.method === "POST" && req.url === "/api/v1/tasks/chat-task/trigger") {
1972+
res.writeHead(200, {
1973+
"content-type": "application/json",
1974+
"x-trigger-jwt": "pk_run_tracking_cleanup_set_failure",
1975+
});
1976+
res.end(JSON.stringify({ id: "run_tracking_cleanup_set_failure" }));
1977+
return;
1978+
}
1979+
1980+
res.writeHead(404);
1981+
res.end();
1982+
});
1983+
1984+
const transport = new TriggerChatTransport({
1985+
task: "chat-task",
1986+
stream: "chat-stream",
1987+
accessToken: "pk_trigger",
1988+
baseURL: server.url,
1989+
runStore,
1990+
onError: function onError(error) {
1991+
errors.push(error);
1992+
},
1993+
});
1994+
1995+
(transport as any).fetchRunStream = async function fetchRunStream() {
1996+
return new ReadableStream({
1997+
start(controller) {
1998+
controller.error(new Error("tracking failed root cause"));
1999+
},
2000+
});
2001+
};
2002+
2003+
const stream = await transport.sendMessages({
2004+
trigger: "submit-message",
2005+
chatId: "chat-tracking-cleanup-set-failure",
2006+
messageId: undefined,
2007+
messages: [],
2008+
abortSignal: undefined,
2009+
});
2010+
2011+
await expect(readChunks(stream)).rejects.toThrowError("tracking failed root cause");
2012+
2013+
await waitForCondition(function () {
2014+
return errors.length === 1;
2015+
});
2016+
2017+
expect(errors[0]).toMatchObject({
2018+
phase: "consumeTrackingStream",
2019+
chatId: "chat-tracking-cleanup-set-failure",
2020+
runId: "run_tracking_cleanup_set_failure",
2021+
});
2022+
expect(errors[0]?.error.message).toBe("tracking failed root cause");
2023+
});
2024+
2025+
it("preserves consumeTrackingStream failures when cleanup run-store delete throws", async function () {
2026+
const errors: TriggerChatTransportError[] = [];
2027+
const runStore = new FailingCleanupDeleteRunStore(1);
2028+
2029+
const server = await startServer(function (req, res) {
2030+
if (req.method === "POST" && req.url === "/api/v1/tasks/chat-task/trigger") {
2031+
res.writeHead(200, {
2032+
"content-type": "application/json",
2033+
"x-trigger-jwt": "pk_run_tracking_cleanup_delete_failure",
2034+
});
2035+
res.end(JSON.stringify({ id: "run_tracking_cleanup_delete_failure" }));
2036+
return;
2037+
}
2038+
2039+
res.writeHead(404);
2040+
res.end();
2041+
});
2042+
2043+
const transport = new TriggerChatTransport({
2044+
task: "chat-task",
2045+
stream: "chat-stream",
2046+
accessToken: "pk_trigger",
2047+
baseURL: server.url,
2048+
runStore,
2049+
onError: function onError(error) {
2050+
errors.push(error);
2051+
},
2052+
});
2053+
2054+
(transport as any).fetchRunStream = async function fetchRunStream() {
2055+
return new ReadableStream({
2056+
start(controller) {
2057+
controller.error(new Error("tracking failed root cause"));
2058+
},
2059+
});
2060+
};
2061+
2062+
const stream = await transport.sendMessages({
2063+
trigger: "submit-message",
2064+
chatId: "chat-tracking-cleanup-delete-failure",
2065+
messageId: undefined,
2066+
messages: [],
2067+
abortSignal: undefined,
2068+
});
2069+
2070+
await expect(readChunks(stream)).rejects.toThrowError("tracking failed root cause");
2071+
2072+
await waitForCondition(function () {
2073+
return errors.length === 1;
2074+
});
2075+
2076+
expect(errors[0]).toMatchObject({
2077+
phase: "consumeTrackingStream",
2078+
chatId: "chat-tracking-cleanup-delete-failure",
2079+
runId: "run_tracking_cleanup_delete_failure",
2080+
});
2081+
expect(errors[0]?.error.message).toBe("tracking failed root cause");
2082+
});
2083+
19662084
it("reports reconnect failures through onError", async function () {
19672085
const errors: TriggerChatTransportError[] = [];
19682086
const runStore = new InMemoryTriggerChatRunStore();

0 commit comments

Comments
 (0)