@ledgerhq/coin-cardano
Version:
Ledger Cardano Coin integration
121 lines • 4.82 kB
JavaScript
/* eslint @typescript-eslint/consistent-type-assertions: 0 */
import BigNumber from "bignumber.js";
import { getTransactionStatus } from "./getTransactionStatus";
import * as sanction from "@ledgerhq/coin-framework/sanction/index";
import { AddressesSanctionedError } from "@ledgerhq/coin-framework/sanction/errors";
import * as mode from "./handler";
import coinConfig from "../config";
describe("getTransactionStatus", () => {
it("should return not enough funds error when there are no utxos", async () => {
const initialAccount = {
pendingOperations: [],
cardanoResources: {
utxos: [],
},
};
const sendTx = {
amount: new BigNumber(1000000),
recipient: "addr1qxqm3nxwzf70ke9jqa2zrtrevjznpv6yykptxnv34perjc8a7zgxmpv5pgk4hhhe0m9kfnlsf5pt7d2ahkxaul2zygrq3nura9",
mode: "send",
family: "cardano",
poolId: undefined,
};
const sendTxRes = await getTransactionStatus(initialAccount, sendTx);
expect(sendTxRes.errors.amount.name).toBe("CardanoNotEnoughFunds");
const delegateTx = {
amount: new BigNumber(0),
recipient: "",
mode: "delegate",
family: "cardano",
poolId: "d0f48f07e4e5eb8040a988085f7ea3bd32d71a2e2998d53e9bbc959a",
};
const delegateTxRes = await getTransactionStatus(initialAccount, delegateTx);
expect(delegateTxRes.errors.amount.name).toBe("CardanoNotEnoughFunds");
const undelegateTx = {
amount: new BigNumber(0),
recipient: "",
mode: "undelegate",
family: "cardano",
poolId: undefined,
};
const undelegateTxRes = await getTransactionStatus(initialAccount, undelegateTx);
expect(undelegateTxRes.errors.amount.name).toBe("CardanoNotEnoughFunds");
});
it("should return as sender error only sanctioned utxo addresses", async () => {
const sanctionedAddresses = [
"addr1eKHLg16K8UTAak8srh6LiTRufkT2uziFKekkfZBxcRNMED",
"addr1UvY42XTJHMPHDEDch9UWagjhipLjke37Uqm7qzfcSkdPHT",
];
jest.spyOn(sanction, "isAddressSanctioned").mockImplementation((_, address) => {
return Promise.resolve(sanctionedAddresses.includes(address));
});
const utxos = [
{
address: "addr1eKHLg16K8UTAak8srh6LiTRufkT2uziFKekkfZBxcRNMED",
},
{
address: "addr1UvY42XTJHMPHDEDch9UWagjhipLjke37Uqm7qzfcSkdPHT",
},
{
address: "addr1QDz6DDTAk5CNig91MNxgTKXUpYoAbz6WnyZ7AztJUXsDDK",
},
{
address: "addr1Fwc4rtTcbrhmcq3iqDJZULdyxU8nJmam3Jx6oknhY5Jqm2",
},
];
const account = {
pendingOperations: [],
cardanoResources: {
utxos: utxos,
},
};
const transaction = {};
const status = await getTransactionStatus(account, transaction);
expect(status.errors).toEqual({
sender: new AddressesSanctionedError("AddressesSanctionedError", {
addresses: sanctionedAddresses,
}),
});
});
it("should return as no sender error when no utxo address is sanctioned", async () => {
const maxFeesWarning = BigNumber(1000000);
jest.spyOn(coinConfig, "getCoinConfig").mockReturnValue({
maxFeesWarning: maxFeesWarning,
maxFeesError: maxFeesWarning.multipliedBy(2),
});
jest.spyOn(mode, "getTransactionStatusByTransactionMode").mockResolvedValue({
errors: {},
warnings: {},
amount: BigNumber(0),
totalSpent: BigNumber(0),
estimatedFees: maxFeesWarning,
});
jest.spyOn(sanction, "isAddressSanctioned").mockResolvedValue(false);
const utxos = [
{
address: "addr1eKHLg16K8UTAak8srh6LiTRufkT2uziFKekkfZBxcRNMED",
},
{
address: "addr1UvY42XTJHMPHDEDch9UWagjhipLjke37Uqm7qzfcSkdPHT",
},
{
address: "addr1QDz6DDTAk5CNig91MNxgTKXUpYoAbz6WnyZ7AztJUXsDDK",
},
{
address: "addr1Fwc4rtTcbrhmcq3iqDJZULdyxU8nJmam3Jx6oknhY5Jqm2",
},
];
const account = {
pendingOperations: [],
cardanoResources: {
utxos: utxos,
},
};
const transaction = {
mode: "send",
};
const status = await getTransactionStatus(account, transaction);
expect(status.errors).toEqual({});
});
});
//# sourceMappingURL=getTransactionStatus.test.js.map