@ledgerhq/coin-icon
Version:
Ledger Icon Coin integration
77 lines (67 loc) • 2.6 kB
text/typescript
import BigNumber from "bignumber.js";
import { Transaction, IconAccount } from "../../types";
import { createFixtureAccount, createFixtureTransaction } from "../../types/bridge.fixture";
import { buildTransaction } from "../../buildTransaction";
const mockFrom = jest.fn().mockReturnThis();
const mockTo = jest.fn().mockReturnThis();
const mockValue = jest.fn().mockReturnThis();
const mockNid = jest.fn().mockReturnThis();
const mockNonce = jest.fn().mockReturnThis();
const mockTimestamp = jest.fn().mockReturnThis();
const mockVersion = jest.fn().mockReturnThis();
const mockStepLimit = jest.fn().mockReturnThis();
const mockBuild = jest.fn().mockReturnValue("mocked-transaction");
jest.mock("icon-sdk-js", () => ({
IconBuilder: {
IcxTransactionBuilder: jest.fn().mockImplementation(() => ({
from: mockFrom,
to: mockTo,
value: mockValue,
nid: mockNid,
nonce: mockNonce,
timestamp: mockTimestamp,
version: mockVersion,
stepLimit: mockStepLimit,
build: mockBuild,
})),
},
IconConverter: {
toHexNumber: jest.fn(value => `0x${value}`),
},
}));
jest.mock("../../logic", () => ({
getNid: jest.fn().mockReturnValue(1),
getNonce: jest.fn().mockReturnValue(1),
}));
describe("buildTransaction", () => {
const account = createFixtureAccount() as IconAccount;
const transaction = createFixtureTransaction({
mode: "send",
recipient: "WHATEVER",
}) as Transaction;
afterEach(() => {
jest.clearAllMocks();
});
it("should build a transfer transaction", async () => {
const stepLimit = new BigNumber(100000);
const result = await buildTransaction(account, transaction, stepLimit);
expect(mockFrom).toHaveBeenCalledWith(account.freshAddress);
expect(mockTo).toHaveBeenCalledWith(transaction.recipient);
expect(mockValue).toHaveBeenCalledWith(expect.any(String));
expect(mockNid).toHaveBeenCalledWith(expect.any(String));
expect(mockNonce).toHaveBeenCalledWith(expect.any(String));
expect(mockTimestamp).toHaveBeenCalledWith(expect.any(String));
expect(mockVersion).toHaveBeenCalledWith(expect.any(String));
expect(mockStepLimit).toHaveBeenCalledWith(expect.any(String));
expect(result.unsigned).toBe("mocked-transaction");
});
it("should throw an error for unsupported transaction mode", async () => {
const invalidTransaction: Transaction = {
...transaction,
mode: "invalid-mode",
};
await expect(buildTransaction(account, invalidTransaction)).rejects.toThrow(
"Unsupported transaction mode: invalid-mode",
);
});
});