UNPKG

@ledgerhq/coin-aptos

Version:
151 lines (120 loc) 5.37 kB
import { createFixtureAccount, createFixtureAccountWithSubAccount, createFixtureTransaction, createFixtureTransactionWithSubAccount, } from "../../bridge/bridge.fixture"; import buildTransaction from "../../logic/buildTransaction"; import { AptosAPI } from "../../network"; import { normalizeTransactionOptions } from "../../logic/normalizeTransactionOptions"; import type { InputEntryFunctionData } from "@aptos-labs/ts-sdk"; import type { TransactionOptions } from "../../types"; const generateTransaction = jest.fn(() => "tx"); jest.mock("../../logic/normalizeTransactionOptions", () => ({ normalizeTransactionOptions: jest.fn(() => ({ maxGasAmount: "100", gasUnitPrice: "200", })), })); jest.mock("../../constants", () => { const originalModules = jest.requireActual("../../constants"); return { ...originalModules, DEFAULT_GAS: 100, DEFAULT_GAS_PRICE: 200, }; }); jest.mock("../../network", () => { return { AptosAPI: function () { return { generateTransaction, }; }, }; }); afterEach(() => { jest.clearAllMocks(); }); describe("buildTransaction Test", () => { it("should return transaction for main account", async () => { const account = createFixtureAccount(); const transaction = createFixtureTransaction(); const aptosClient = new AptosAPI(account.currency.id); const result = await buildTransaction(account, transaction, aptosClient); const expected = "tx"; expect(result).toBe(expected); const mockedNormalizeTransactionOptions = jest.mocked(normalizeTransactionOptions); expect(mockedNormalizeTransactionOptions).toHaveBeenCalledTimes(1); expect(generateTransaction).toHaveBeenCalledTimes(1); const generateTransactionArgs: [string, InputEntryFunctionData, TransactionOptions][] = generateTransaction.mock.calls[0]; expect(mockedNormalizeTransactionOptions.mock.calls[0][0]).toEqual({ maxGasAmount: "0", gasUnitPrice: "0", }); expect(generateTransactionArgs[0]).toBe("address"); expect(generateTransactionArgs[1]).toEqual({ function: "0x1::aptos_account::transfer_coins", typeArguments: ["0x1::aptos_coin::AptosCoin"], functionArguments: ["recipient", "0"], }); expect(generateTransactionArgs[2]).toEqual({ maxGasAmount: "100", gasUnitPrice: "200" }); }); it("should return transaction for token account of type fungible asset", async () => { const account = createFixtureAccountWithSubAccount("fungible_asset"); const transaction = createFixtureTransactionWithSubAccount(); const aptosClient = new AptosAPI(account.currency.id); const result = await buildTransaction(account, transaction, aptosClient); const expected = "tx"; expect(result).toBe(expected); const mockedNormalizeTransactionOptions = jest.mocked(normalizeTransactionOptions); expect(mockedNormalizeTransactionOptions).toHaveBeenCalledTimes(1); expect(generateTransaction).toHaveBeenCalledTimes(1); const generateTransactionArgs: [string, InputEntryFunctionData, TransactionOptions][] = generateTransaction.mock.calls[0]; expect(mockedNormalizeTransactionOptions.mock.calls[0][0]).toEqual({ maxGasAmount: "0", gasUnitPrice: "0", }); expect(generateTransactionArgs[0]).toBe("address"); expect(generateTransactionArgs[1]).toEqual({ function: "0x1::primary_fungible_store::transfer", typeArguments: ["0x1::fungible_asset::Metadata"], functionArguments: ["contract_address", "recipient", "0"], }); expect(generateTransactionArgs[2]).toEqual({ maxGasAmount: "100", gasUnitPrice: "200" }); }); it("should return transaction for token account of type coin", async () => { const account = createFixtureAccountWithSubAccount("coin"); const transaction = createFixtureTransactionWithSubAccount(); const aptosClient = new AptosAPI(account.currency.id); const result = await buildTransaction(account, transaction, aptosClient); const expected = "tx"; expect(result).toBe(expected); const mockedNormalizeTransactionOptions = jest.mocked(normalizeTransactionOptions); expect(mockedNormalizeTransactionOptions).toHaveBeenCalledTimes(1); expect(generateTransaction).toHaveBeenCalledTimes(1); const generateTransactionArgs: [string, InputEntryFunctionData, TransactionOptions][] = generateTransaction.mock.calls[0]; expect(mockedNormalizeTransactionOptions.mock.calls[0][0]).toEqual({ maxGasAmount: "0", gasUnitPrice: "0", }); expect(generateTransactionArgs[0]).toBe("address"); expect(generateTransactionArgs[1]).toEqual({ function: "0x1::aptos_account::transfer_coins", typeArguments: ["contract_address"], functionArguments: ["recipient", "0"], }); expect(generateTransactionArgs[2]).toEqual({ maxGasAmount: "100", gasUnitPrice: "200" }); }); it("should throw error if token is not supported", async () => { const account = createFixtureAccountWithSubAccount("not_supported_token_type"); const transaction = createFixtureTransactionWithSubAccount(); const aptosClient = new AptosAPI(account.currency.id); expect(async () => await buildTransaction(account, transaction, aptosClient)).rejects.toThrow( "Token type not_supported_token_type not supported", ); }); });