UNPKG

@ledgerhq/coin-stellar

Version:
116 lines 5.68 kB
"use strict"; var __importDefault = (this && this.__importDefault) || function (mod) { return (mod && mod.__esModule) ? mod : { "default": mod }; }; Object.defineProperty(exports, "__esModule", { value: true }); const index_1 = require("./index"); const expect_1 = __importDefault(require("expect")); const mockGetOperations = jest.fn(); jest.mock("../logic/listOperations", () => ({ listOperations: () => mockGetOperations(), })); const CUSTOM_FEES = 300n; const estimateFeesMock = jest.fn(() => CUSTOM_FEES); jest.mock("../logic/estimateFees", () => ({ estimateFees: () => estimateFeesMock(), })); const logicCraftTransactionMock = jest.fn((_account, _transaction) => { return { xdr: undefined }; }); jest.mock("../logic/craftTransaction", () => ({ craftTransaction: (account, transaction) => logicCraftTransactionMock(account, transaction), })); const api = (0, index_1.createApi)({ explorer: { url: "explorer.com", fetchLimit: 200, }, useStaticFees: true, enableNetworkLogs: false, }); const fromGenesis = { minHeight: 0 }; describe("operations", () => { beforeEach(() => { jest.clearAllMocks(); }); const mockOperation = { asset: { type: "native" }, tx: { hash: "e035a56c32003e3b0e4c9c5499b0750d71d98233ae6ae94323ff0a458b05a30b", fees: 0.0291, block: { hash: "hash", time: new Date("2024-03-20T10:00:00Z"), height: 10, }, date: new Date("2024-03-20T10:00:00Z"), }, type: "Operation", value: 200, senders: ["addr"], recipients: ["recipient"], }; it("should return 0 operations for a valid account", async () => { mockGetOperations.mockResolvedValue([[], ""]); // When const operations = await api.listOperations("addr", fromGenesis); // Then (0, expect_1.default)(operations).toEqual([[], ""]); (0, expect_1.default)(mockGetOperations).toHaveBeenCalledTimes(1); }); it("should return 1 operation for a valid account", async () => { mockGetOperations.mockResolvedValue([[mockOperation], ""]); // When const operations = await api.listOperations("addr", fromGenesis); // Then (0, expect_1.default)(operations).toEqual([[mockOperation], ""]); (0, expect_1.default)(mockGetOperations).toHaveBeenCalledTimes(1); }); it("should call multiple times listOperations", async () => { mockGetOperations .mockResolvedValueOnce([[mockOperation], "10"]) .mockResolvedValueOnce([[mockOperation], ""]); // When const operations = await api.listOperations("addr", fromGenesis); // Then (0, expect_1.default)(operations).toEqual([[mockOperation, mockOperation], ""]); (0, expect_1.default)(mockGetOperations).toHaveBeenCalledTimes(2); }); }); describe("Testing craftTransaction function", () => { beforeEach(() => { estimateFeesMock.mockClear(); logicCraftTransactionMock.mockClear(); }); it("should use estimated fees when user does not provide them for crafting a transaction", async () => { await api.craftTransaction({ asset: {} }); (0, expect_1.default)(estimateFeesMock).toHaveBeenCalledTimes(1); (0, expect_1.default)(logicCraftTransactionMock).toHaveBeenCalledWith(expect_1.default.any(Object), expect_1.default.objectContaining({ fee: CUSTOM_FEES })); }); it.each([[1n], [50n], [99n]])("should use custom user fees when user provide them for crafting a transaction", async (fees) => { await api.craftTransaction({ asset: {} }, fees); (0, expect_1.default)(estimateFeesMock).toHaveBeenCalledTimes(0); (0, expect_1.default)(logicCraftTransactionMock).toHaveBeenCalledWith(expect_1.default.any(Object), expect_1.default.objectContaining({ fee: fees })); }); }); describe("Testing transaction loading functions", () => { it("should deserialize a transaction as expected", async () => { const transactionPayloadXDR = "esM5l1ROMXXSZr0CJDmyLNsWUIwBFj8m5csqPhBFqXkAAAACAAAAAEFMhHdla/OhHE2CYrF1VVPnLgBThGuzpNFZyYMh" + "8L6XAAAAZAAAJ/cAAAkYAAAAAQAAAAAAAAAAAAAAAAAAAAAAAAABAAAABHRlc3QAAAABAAAAAAAAAAAAAAAA/QIumXyU" + "+Nq3dDZfGCXjgxYI7uvPElz8zGb0gN+vWD8AAAAAAA9CQAAAAAA="; const transactionEnvelopeXDR = "AAAAAgAAAABBTIR3ZWvzoRxNgmKxdVVT5y4AU4Rrs6TRWcmDIfC+lwAAAGQAACf3AAAJGAAAAAEAAAAAAAAAAAAAAAAA" + "AAAAAAAAAQAAAAR0ZXN0AAAAAQAAAAAAAAAAAAAAAP0CLpl8lPjat3Q2Xxgl44MWCO7rzxJc/Mxm9IDfr1g/AAAAAAAP" + "QkAAAAAAAAAAAA=="; const txFromSignaturePayload = (0, index_1.envelopeFromAnyXDR)(transactionPayloadXDR, "base64"); const txFromEnvelope = (0, index_1.envelopeFromAnyXDR)(transactionEnvelopeXDR, "base64"); (0, expect_1.default)(txFromEnvelope).toEqual(txFromSignaturePayload); (0, expect_1.default)(txFromEnvelope.toXDR("base64")).toEqual(transactionEnvelopeXDR); (0, expect_1.default)(txFromSignaturePayload.toXDR("base64")).toEqual(transactionEnvelopeXDR); }); it("throw expected error when deserializing an invalid transaction", async () => { (0, expect_1.default)(() => (0, index_1.envelopeFromAnyXDR)("lulz", "base64")).toThrowError("Failed decoding transaction as an envelope (TypeError: XDR Read Error: attempt to read outside the boundary of" + " the buffer) or as a signature base: (TypeError: XDR Read Error: attempt to read outside the boundary of the" + " buffer)"); }); }); //# sourceMappingURL=index.test.js.map