File size: 1,910 Bytes
9299241 | 1 2 3 4 5 6 7 8 9 10 11 12 13 14 15 16 17 18 19 20 21 22 23 24 25 26 27 28 29 30 31 32 33 34 35 36 37 38 39 40 41 42 43 44 45 46 47 48 49 50 51 52 | // Covers approval-not-found error detection.
import { describe, expect, it } from "vitest";
import { isApprovalNotFoundError, isApprovalStaleError } from "./approval-errors.js";
describe("isApprovalNotFoundError", () => {
it("matches direct approval-not-found gateway codes", () => {
const err = Object.assign(new Error("approval not found"), {
gatewayCode: "APPROVAL_NOT_FOUND",
});
expect(isApprovalNotFoundError(err)).toBe(true);
});
it("matches structured invalid-request approval-not-found details", () => {
const err = Object.assign(new Error("approval not found"), {
gatewayCode: "INVALID_REQUEST",
details: { reason: "APPROVAL_NOT_FOUND" },
});
expect(isApprovalNotFoundError(err)).toBe(true);
});
it("matches legacy message-only not-found errors", () => {
expect(isApprovalNotFoundError(new Error("unknown or expired approval id"))).toBe(true);
expect(isApprovalNotFoundError(new Error("approval expired or not found"))).toBe(true);
});
it("ignores unrelated errors", () => {
expect(isApprovalNotFoundError(new Error("network timeout"))).toBe(false);
expect(isApprovalNotFoundError("unknown or expired approval id")).toBe(false);
});
});
describe("isApprovalStaleError", () => {
it("matches structured already-resolved gateway errors", () => {
const err = Object.assign(new Error("request rejected"), {
gatewayCode: "INVALID_REQUEST",
details: { reason: "APPROVAL_ALREADY_RESOLVED" },
});
expect(isApprovalStaleError(err)).toBe(true);
});
it("includes approval-not-found errors", () => {
const err = Object.assign(new Error("approval not found"), {
gatewayCode: "APPROVAL_NOT_FOUND",
});
expect(isApprovalStaleError(err)).toBe(true);
});
it("ignores transient errors", () => {
expect(isApprovalStaleError(new Error("gateway unavailable"))).toBe(false);
});
});
|