import { describe, expect, it } from "vitest" ;
import { AcpRuntimeError, isAcpRuntimeError, withAcpRuntimeErrorBoundary } from "./errors.js" ;
describe("withAcpRuntimeErrorBoundary" , () => {
it("wraps generic errors with fallback code and source message" , async () => {
await expect(
withAcpRuntimeErrorBoundary({
run: async () => {
throw new Error("boom" );
},
fallbackCode: "ACP_TURN_FAILED" ,
fallbackMessage: "fallback" ,
}),
).rejects.toMatchObject({
name: "AcpRuntimeError" ,
code: "ACP_TURN_FAILED" ,
message: "boom" ,
});
});
it("passes through existing ACP runtime errors" , async () => {
const existing = new AcpRuntimeError("ACP_BACKEND_MISSING" , "backend missing" );
await expect(
withAcpRuntimeErrorBoundary({
run: async () => {
throw existing;
},
fallbackCode: "ACP_TURN_FAILED" ,
fallbackMessage: "fallback" ,
}),
).rejects.toBe(existing);
});
it("preserves ACP runtime codes from foreign package errors" , async () => {
class ForeignAcpRuntimeError extends Error {
readonly code = "ACP_BACKEND_MISSING" as const ;
}
const foreignError = new ForeignAcpRuntimeError("backend missing" );
await expect(
withAcpRuntimeErrorBoundary({
run: async () => {
throw foreignError;
},
fallbackCode: "ACP_TURN_FAILED" ,
fallbackMessage: "fallback" ,
}),
).rejects.toMatchObject({
name: "AcpRuntimeError" ,
code: "ACP_BACKEND_MISSING" ,
message: "backend missing" ,
cause: foreignError,
});
expect(isAcpRuntimeError(foreignError)).toBe(true );
});
});
Messung V0.5 in Prozent C=100 H=98 G=98
¤ Dauer der Verarbeitung: 0.3 Sekunden
¤
*© Formatika GbR, Deutschland