UNPKG

@coinbase/agentkit

Version:

Coinbase AgentKit core primitives

86 lines (85 loc) 3.77 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const viem_1 = require("viem"); const constants_1 = require("./constants"); const superfluidWrapperActionProvider_1 = require("./superfluidWrapperActionProvider"); const viem_2 = require("viem"); describe("SuperfluidWrapperActionProvider", () => { const MOCK_ADDRESS = "0xe6b2af36b3bb8d47206a129ff11d5a2de2a63c83"; const MOCK_ERC20_CONTRACT = "0x1234567890123456789012345678901234567890"; const MOCK_SUPERTOKEN_CONTRACT = "0x1234567890123456789012345678901234567890"; const MOCK_WRAP_AMOUNT = 100; const MOCK_DECIMALS = 18; const MOCK_NAME = "TestToken"; const MOCK_SYMBOL = "TT"; let mockWallet; const actionProvider = (0, superfluidWrapperActionProvider_1.superfluidWrapperActionProvider)(); beforeEach(() => { mockWallet = { getAddress: jest.fn().mockReturnValue(MOCK_ADDRESS), getNetwork: jest.fn().mockReturnValue({ protocolFamily: "evm" }), sendTransaction: jest.fn(), waitForTransactionReceipt: jest.fn(), readContract: jest.fn(), call: jest.fn(), }; mockWallet.sendTransaction.mockResolvedValue("0xmockhash"); mockWallet.waitForTransactionReceipt.mockResolvedValue({}); mockWallet.readContract.mockImplementation(async ({ address, functionName, args }) => { if (functionName === "decimals") return MOCK_DECIMALS; if (functionName === "name") return MOCK_NAME; if (functionName === "symbol") return MOCK_SYMBOL; throw new Error(`No mock for ${functionName}(${JSON.stringify(args)}) @ ${address}`); }); }); describe("wraps an erc20 into a super token", () => { it("should successfully wrap an erc20 to a super token", async () => { const args = { erc20TokenAddress: MOCK_ERC20_CONTRACT, superTokenAddress: MOCK_SUPERTOKEN_CONTRACT, wrapAmount: MOCK_WRAP_AMOUNT, }; await actionProvider.wrapToken(mockWallet, args); const amount = (0, viem_1.parseUnits)(String(args.wrapAmount), Number(MOCK_DECIMALS)); const approveData = (0, viem_1.encodeFunctionData)({ abi: viem_2.erc20Abi, functionName: "approve", args: [MOCK_SUPERTOKEN_CONTRACT, amount], }); const wrapData = (0, viem_1.encodeFunctionData)({ abi: constants_1.ISuperTokenAbi, functionName: "upgrade", args: [amount], }); expect(mockWallet.sendTransaction).toHaveBeenCalledTimes(2); expect(mockWallet.sendTransaction).toHaveBeenNthCalledWith(1, { to: MOCK_ERC20_CONTRACT, data: approveData, }); expect(mockWallet.sendTransaction).toHaveBeenNthCalledWith(2, { to: MOCK_SUPERTOKEN_CONTRACT, data: wrapData, }); expect(mockWallet.waitForTransactionReceipt).toHaveBeenCalledTimes(2); }); }); describe("supportsNetwork", () => { it("should return true for Base", () => { const result = actionProvider.supportsNetwork({ protocolFamily: "evm", networkId: "base-mainnet", }); expect(result).toBe(true); }); it("should return false for non-base networks", () => { const result = actionProvider.supportsNetwork({ protocolFamily: "bitcoin", networkId: "any", }); expect(result).toBe(false); }); }); });