@ledgerhq/coin-icon
Version:
Ledger Icon Coin integration
112 lines • 5.53 kB
JavaScript
;
var __importDefault = (this && this.__importDefault) || function (mod) {
return (mod && mod.__esModule) ? mod : { "default": mod };
};
Object.defineProperty(exports, "__esModule", { value: true });
const bignumber_js_1 = require("bignumber.js");
const icon_sdk_js_1 = __importDefault(require("icon-sdk-js"));
const logic_1 = require("../../logic");
const cryptoassets_1 = require("@ledgerhq/cryptoassets");
const constants_1 = require("../../constants");
jest.mock("@ledgerhq/cryptoassets", () => ({
getCryptoCurrencyById: jest.fn(),
}));
const { IconAmount } = icon_sdk_js_1.default;
describe("Icon Utils", () => {
describe("Conversion functions", () => {
it("should convert loop to ICX correctly", () => {
const value = "1000000000000000000";
const result = (0, logic_1.convertLoopToIcx)(value);
expect(result.isEqualTo(new bignumber_js_1.BigNumber(IconAmount.fromLoop(value, IconAmount.Unit.ICX.toString())))).toBe(true);
});
it("should convert ICX to loop correctly", () => {
const value = "1";
const result = (0, logic_1.convertICXtoLoop)(value);
expect(result.isEqualTo(new bignumber_js_1.BigNumber(IconAmount.toLoop(value, IconAmount.Unit.ICX.toString())))).toBe(true);
});
});
describe("Validation functions", () => {
it("should validate address correctly", () => {
const validAddress = "hx1234567890123456789012345678901234567890";
const invalidAddress = "hx12345";
expect((0, logic_1.isValidAddress)(validAddress)).toBe(true);
expect((0, logic_1.isValidAddress)(invalidAddress)).toBe(false);
});
});
describe("Transaction-related functions", () => {
it("should identify self transaction correctly", () => {
const account = { freshAddress: "hx1234567890123456789012345678901234567890" };
const transaction = {
recipient: "hx1234567890123456789012345678901234567890",
};
expect((0, logic_1.isSelfTransaction)(account, transaction)).toBe(true);
});
it("should get nonce correctly", () => {
const account = {
iconResources: { nonce: 5 },
pendingOperations: [{ transactionSequenceNumber: 4 }],
};
expect((0, logic_1.getNonce)(account)).toBe(5);
account.pendingOperations = [{ transactionSequenceNumber: 6 }];
expect((0, logic_1.getNonce)(account)).toBe(7);
});
});
describe("Network-related functions", () => {
it("should identify testnet correctly", () => {
cryptoassets_1.getCryptoCurrencyById.mockReturnValue({ isTestnetFor: true });
const currency = { id: "icon" };
expect((0, logic_1.isTestnet)(currency)).toBe(true);
});
it("should return correct network ID", () => {
cryptoassets_1.getCryptoCurrencyById.mockReturnValue({ isTestnetFor: true });
const currency = { id: "icon" };
expect((0, logic_1.getNid)(currency)).toBe(constants_1.BERLIN_TESTNET_NID);
cryptoassets_1.getCryptoCurrencyById.mockReturnValue({ isTestnetFor: false });
expect((0, logic_1.getNid)(currency)).toBe(constants_1.MAINNET_NID);
});
});
describe("Amount calculation functions", () => {
it("should calculate correct amount if useAllAmount is true and mode is send", () => {
const account = {
spendableBalance: new bignumber_js_1.BigNumber(1000),
};
const transaction = {
useAllAmount: true,
mode: "send",
fees: new bignumber_js_1.BigNumber(10),
};
const result = (0, logic_1.calculateAmount)({ account, transaction });
expect(result.isEqualTo(new bignumber_js_1.BigNumber(990))).toBe(true);
});
it("should calculate correct amount if useAllAmount is true and mode is not send", () => {
const account = {
spendableBalance: new bignumber_js_1.BigNumber(1000),
};
const transaction = {
useAllAmount: true,
mode: "other",
fees: new bignumber_js_1.BigNumber(10),
};
const result = (0, logic_1.calculateAmount)({ account, transaction });
expect(result.isEqualTo(new bignumber_js_1.BigNumber(990))).toBe(true);
});
it("calculates the correct amount if useAllAmount is false", () => {
const account = {};
const transaction = {
useAllAmount: false,
amount: new bignumber_js_1.BigNumber("10000000000000000000000000000000000"),
};
const result = (0, logic_1.calculateAmount)({ account, transaction });
expect(result).toStrictEqual(new bignumber_js_1.BigNumber("10000000000000000000000000000000000"));
});
it("should calculate minimum balance correctly", () => {
const account = {
balance: new bignumber_js_1.BigNumber(1000),
spendableBalance: new bignumber_js_1.BigNumber(900),
};
const result = (0, logic_1.getMinimumBalance)(account);
expect(result.isEqualTo(logic_1.EXISTENTIAL_DEPOSIT.minus(new bignumber_js_1.BigNumber(100)))).toBe(true);
});
});
});
//# sourceMappingURL=logic.unit.test.js.map