forked from StellarRouter/StellarRouter
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy patherrors.test.ts
More file actions
69 lines (60 loc) · 2.52 KB
/
Copy patherrors.test.ts
File metadata and controls
69 lines (60 loc) · 2.52 KB
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
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
import {
ROUTER_CORE_ERRORS,
ROUTER_QUOTE_ERRORS,
RouterSdkError,
parseContractErrorCode,
} from "../src/errors.js";
describe("parseContractErrorCode", () => {
it("extracts the numeric code from a Soroban contract error", () => {
expect(parseContractErrorCode("HostError: Error(Contract, #4)")).toBe(4);
expect(parseContractErrorCode("host error: Error(Contract, #9). Invalid")).toBe(9);
});
it("falls back to a loose Contract match", () => {
expect(parseContractErrorCode("Contract: 7")).toBe(7);
expect(parseContractErrorCode("some Contract, #3 text")).toBe(3);
});
it("returns undefined for non-contract errors", () => {
expect(parseContractErrorCode(undefined)).toBeUndefined();
expect(parseContractErrorCode("")).toBeUndefined();
expect(parseContractErrorCode("host error: ValueNotFound")).toBeUndefined();
expect(parseContractErrorCode("ClientError: bad request")).toBeUndefined();
});
});
describe("error code tables", () => {
it("mirrors router-core RouterError discriminants", () => {
expect(ROUTER_CORE_ERRORS[4]).toBe("RouteNotFound");
expect(ROUTER_CORE_ERRORS[6]).toBe("RouterPaused");
expect(ROUTER_CORE_ERRORS[7]).toBe("RouteAlreadyExists");
});
it("mirrors router-quote QuoteError discriminants", () => {
expect(ROUTER_QUOTE_ERRORS[4]).toBe("InvalidAmount");
expect(ROUTER_QUOTE_ERRORS[8]).toBe("InvalidPriceImpactBps");
expect(ROUTER_QUOTE_ERRORS[9]).toBe("AmountOverflow");
});
});
describe("RouterSdkError", () => {
it("maps a known core error code to its name", () => {
const err = RouterSdkError.fromContractCode(4, { contract: "core" });
expect(err).toBeInstanceOf(RouterSdkError);
expect(err).toBeInstanceOf(Error);
expect(err.code).toBe("RouteNotFound");
expect(err.contractErrorCode).toBe(4);
expect(err.message).toContain("router-core");
});
it("falls back to a numeric code for unknown errors", () => {
const err = RouterSdkError.fromContractCode(99, { contract: "core" });
expect(err.code).toBe("ContractError99");
});
it("wraps thrown causes", () => {
const cause = new Error("boom");
const err = RouterSdkError.fromCause("core", cause);
expect(err.code).toBe("RpcError");
expect(err.cause).toBe(cause);
});
it("preserves custom properties on the name/code fields", () => {
const err = new RouterSdkError("NoSigner", "need a signer", { contract: "quote" });
expect(err.name).toBe("RouterSdkError");
expect(err.code).toBe("NoSigner");
expect(err.contract).toBe("quote");
});
});