UNPKG

@ledgerhq/coin-stellar

Version:
284 lines (276 loc) 8.55 kB
import { listOperations } from "./listOperations"; import coinConfig from "../config"; import { OperationCallBuilder } from "@stellar/stellar-sdk/lib/horizon/operation_call_builder"; import { HorizonApi } from "@stellar/stellar-sdk/lib/horizon"; describe("listOperations", () => { coinConfig.setCoinConfig(() => ({ status: { type: "active" }, explorer: { url: "https://stellar.coin.ledger.com" }, })); it("lists operations associated with an address", async () => { jest.spyOn(OperationCallBuilder.prototype, "call").mockResolvedValue({ records: [ { id: "operation_id1", transaction_hash: "transaction_hash1", paging_token: "token1", source_account: "address", from: "address", to: "receiver1", amount: "46.0600000", type: HorizonApi.OperationResponseType.payment, transaction_successful: true, created_at: "2025-01-01", transaction: () => ({ fee_charged: "111900", ledger_attr: 42, ledger: () => ({ hash: "block_hash1", closed_at: "2025-01-01", }), }), }, { id: "operation_id2", transaction_hash: "transaction_hash1", paging_token: "token2", source_account: "address", from: "address", to: "receiver2", amount: "666.0000000", type: HorizonApi.OperationResponseType.payment, transaction_successful: false, created_at: "2025-01-01", transaction: () => ({ fee_charged: "11100", ledger_attr: 42, ledger: () => ({ hash: "block_hash1", closed_at: "2025-01-01", }), }), }, { id: "operation_id3", transaction_hash: "transaction_hash2", paging_token: "token3", source_account: "sender", from: "sender", to: "address", amount: "50.5000000", type: HorizonApi.OperationResponseType.payment, transaction_successful: true, created_at: "2025-01-01", transaction: () => ({ fee_charged: "111", ledger_attr: 42, ledger: () => ({ hash: "block_hash1", closed_at: "2025-01-01", }), }), }, ], } as any); expect(await listOperations("address", { order: "asc", minHeight: 0 })).toEqual([ [ { id: "transaction_hash1-operation_id1", asset: { type: "native" }, senders: ["address"], recipients: ["receiver1"], tx: { block: { hash: "block_hash1", height: 42, time: new Date("2025-01-01") }, date: new Date("2025-01-01"), fees: 111900n, hash: "transaction_hash1", }, type: "OUT", value: 460600000n, details: {}, }, { id: "transaction_hash1-operation_id2", asset: { type: "native" }, senders: ["address"], recipients: ["receiver2"], tx: { block: { hash: "block_hash1", height: 42, time: new Date("2025-01-01") }, date: new Date("2025-01-01"), fees: 11100n, hash: "transaction_hash1", }, type: "OUT", value: 11100n, details: {}, }, { id: "transaction_hash2-operation_id3", asset: { type: "native" }, senders: ["sender"], recipients: ["address"], tx: { block: { hash: "block_hash1", height: 42, time: new Date("2025-01-01") }, date: new Date("2025-01-01"), fees: 111n, hash: "transaction_hash2", }, type: "IN", value: 505000000n, details: {}, }, ], "token3", ]); }); it("stops at minHeight", async () => { jest.spyOn(OperationCallBuilder.prototype, "call").mockResolvedValue({ records: [ { id: "operation_id1", transaction_hash: "transaction_hash1", paging_token: "token1", source_account: "address", from: "address", to: "receiver1", amount: "46.0600000", type: HorizonApi.OperationResponseType.payment, transaction_successful: true, created_at: "2025-01-01", transaction: () => ({ fee_charged: "111900", ledger_attr: 42, ledger: () => ({ hash: "block_hash1", closed_at: "2025-01-01", }), }), }, { id: "operation_id2", transaction_hash: "transaction_hash1", paging_token: "token2", source_account: "address", from: "address", to: "receiver2", amount: "666.0000000", type: HorizonApi.OperationResponseType.payment, transaction_successful: false, created_at: "2025-01-01", transaction: () => ({ fee_charged: "11100", ledger_attr: 41, ledger: () => ({ hash: "block_hash1", closed_at: "2025-01-01", }), }), }, { id: "operation_id3", transaction_hash: "transaction_hash2", paging_token: "token3", source_account: "sender", from: "sender", to: "address", amount: "50.5000000", type: HorizonApi.OperationResponseType.payment, transaction_successful: true, created_at: "2025-01-01", transaction: () => ({ fee_charged: "111", ledger_attr: 40, ledger: () => ({ hash: "block_hash1", closed_at: "2025-01-01", }), }), }, ], } as any); expect(await listOperations("address", { order: "asc", minHeight: 41 })).toEqual([ [ { id: "transaction_hash1-operation_id1", asset: { type: "native" }, senders: ["address"], recipients: ["receiver1"], tx: { block: { hash: "block_hash1", height: 42, time: new Date("2025-01-01") }, date: new Date("2025-01-01"), fees: 111900n, hash: "transaction_hash1", }, type: "OUT", value: 460600000n, details: {}, }, { id: "transaction_hash1-operation_id2", asset: { type: "native" }, senders: ["address"], recipients: ["receiver2"], tx: { block: { hash: "block_hash1", height: 41, time: new Date("2025-01-01") }, date: new Date("2025-01-01"), fees: 11100n, hash: "transaction_hash1", }, type: "OUT", value: 11100n, details: {}, }, ], "", ]); }); it("should return memo if set", async () => { jest.spyOn(OperationCallBuilder.prototype, "call").mockResolvedValue({ records: [ { id: "operation_id1", transaction_hash: "transaction_hash1", paging_token: "token1", source_account: "address", from: "address", to: "receiver1", amount: "46.0600000", type: HorizonApi.OperationResponseType.payment, transaction_successful: true, created_at: "2025-01-01", transaction: () => ({ fee_charged: "111900", ledger_attr: 42, memo: "momo", ledger: () => ({ hash: "block_hash1", closed_at: "2025-01-01", }), }), }, ], } as any); expect(await listOperations("address", { order: "asc", minHeight: 0 })).toEqual([ [ { id: "transaction_hash1-operation_id1", asset: { type: "native" }, senders: ["address"], recipients: ["receiver1"], tx: { block: { hash: "block_hash1", height: 42, time: new Date("2025-01-01") }, date: new Date("2025-01-01"), fees: 111900n, hash: "transaction_hash1", }, type: "OUT", value: 460600000n, details: { memo: "momo", }, }, ], "token1", ]); }); });