@ledgerhq/live-common
Version:
Common ground for the Ledger Live apps
72 lines (63 loc) • 2.13 kB
text/typescript
import BigNumber from "bignumber.js";
import { genericGetTransactionStatus } from "../getTransactionStatus";
import { getAlpacaApi } from "../alpaca";
import * as utils from "../utils";
jest.mock("../alpaca", () => ({
getAlpacaApi: jest.fn(),
}));
jest.mock("../utils", () => ({
...jest.requireActual("../utils"),
transactionToIntent: jest.fn(),
applyMemoToIntent: jest.fn(),
extractBalances: jest.fn(),
}));
const mockTransactionToIntent = utils.transactionToIntent as jest.Mock;
const mockApplyMemoToIntent = utils.applyMemoToIntent as jest.Mock;
const mockExtractBalances = utils.extractBalances as jest.Mock;
describe("genericGetTransactionStatus", () => {
const account = {
id: "test-account",
currency: { id: "ethereum" },
pendingOperations: [],
} as any;
const validatedAmount = 1000n;
const validateIntentResult = {
errors: {},
warnings: {},
estimatedFees: 50n,
amount: validatedAmount,
totalSpent: 1050n,
totalFees: 50n,
};
beforeEach(() => {
jest.clearAllMocks();
mockTransactionToIntent.mockReturnValue({ intent: true });
mockApplyMemoToIntent.mockImplementation((intent: unknown) => intent);
mockExtractBalances.mockReturnValue({});
(getAlpacaApi as jest.Mock).mockReturnValue({
validateIntent: jest.fn().mockResolvedValue(validateIntentResult),
});
});
it.each([
["useAllAmount is true", new BigNumber(999), true, new BigNumber(validatedAmount.toString())],
["amount is 0", new BigNumber(0), false, new BigNumber(validatedAmount.toString())],
[
"useAllAmount is false and amount > 0",
new BigNumber(500),
false,
new BigNumber(validatedAmount.toString()),
],
])(
"returns validated amount from validateIntent when %s",
async (_label, txAmount, useAllAmount, expected) => {
const getStatus = genericGetTransactionStatus("mainnet", "evm");
const result = await getStatus(account, {
amount: txAmount,
useAllAmount,
recipient: "0x",
family: "evm",
} as any);
expect(result.amount).toEqual(expected);
},
);
});