UNPKG

@coinbase/agentkit

Version:

Coinbase AgentKit core primitives

97 lines (96 loc) 4.65 kB
"use strict"; Object.defineProperty(exports, "__esModule", { value: true }); const cdpApiActionProvider_1 = require("./cdpApiActionProvider"); const schemas_1 = require("./schemas"); // Mock the CDP SDK jest.mock("@coinbase/cdp-sdk"); describe("CDP API Action Provider", () => { let actionProvider; let mockWalletProvider; let mockCdpClient; beforeEach(() => { jest.clearAllMocks(); mockCdpClient = { evm: { requestFaucet: jest.fn(), }, solana: { requestFaucet: jest.fn(), }, }; mockWalletProvider = { getNetwork: jest.fn(), getAddress: jest.fn(), getClient: jest.fn(), }; actionProvider = new cdpApiActionProvider_1.CdpApiActionProvider(); }); describe("initialization", () => { it("should initialize with correct provider name", () => { expect(actionProvider.name).toBe("cdp_api"); }); it("should support all networks", () => { const mockNetwork = { protocolFamily: "evm", networkId: "base-sepolia" }; expect(actionProvider.supportsNetwork(mockNetwork)).toBe(true); }); }); describe("faucet", () => { it("should request faucet funds on base-sepolia", async () => { const mockNetwork = { protocolFamily: "evm", networkId: "base-sepolia" }; mockWalletProvider.getNetwork.mockReturnValue(mockNetwork); mockWalletProvider.getAddress.mockReturnValue("0x123456789"); mockWalletProvider.getClient.mockReturnValue(mockCdpClient); mockCdpClient.evm.requestFaucet.mockResolvedValue({ transactionHash: "0xabcdef123456", }); const result = await actionProvider.faucet(mockWalletProvider, { assetId: "eth" }); expect(mockCdpClient.evm.requestFaucet).toHaveBeenCalledWith({ address: "0x123456789", token: "eth", network: "base-sepolia", }); expect(result).toContain("Received eth from the faucet"); expect(result).toContain("0xabcdef123456"); }); it("should request faucet funds on solana-devnet", async () => { const mockNetwork = { protocolFamily: "svm", networkId: "solana-devnet" }; mockWalletProvider.getNetwork.mockReturnValue(mockNetwork); mockWalletProvider.getAddress.mockReturnValue("address123"); mockWalletProvider.getClient.mockReturnValue(mockCdpClient); mockCdpClient.solana.requestFaucet.mockResolvedValue({ signature: "signature123", }); const result = await actionProvider.faucet(mockWalletProvider, { assetId: "sol" }); expect(mockCdpClient.solana.requestFaucet).toHaveBeenCalledWith({ address: "address123", token: "sol", }); expect(result).toContain("Received sol from the faucet"); expect(result).toContain("signature123"); }); it("should throw error for unsupported EVM network", async () => { const mockNetwork = { protocolFamily: "evm", networkId: "ethereum-mainnet" }; mockWalletProvider.getNetwork.mockReturnValue(mockNetwork); mockWalletProvider.getClient.mockReturnValue(mockCdpClient); await expect(actionProvider.faucet(mockWalletProvider, { assetId: "eth" })).rejects.toThrow("Faucet is only supported on base-sepolia or ethereum-sepolia evm networks"); }); it("should throw error for unsupported Solana network", async () => { const mockNetwork = { protocolFamily: "svm", networkId: "solana-mainnet" }; mockWalletProvider.getNetwork.mockReturnValue(mockNetwork); mockWalletProvider.getClient.mockReturnValue(mockCdpClient); await expect(actionProvider.faucet(mockWalletProvider, { assetId: "sol" })).rejects.toThrow("Faucet is only supported on solana-devnet svm networks"); }); }); describe("RequestFaucetFundsV2Schema", () => { it("should validate correct input", () => { const validInput = { assetId: "eth" }; const result = schemas_1.RequestFaucetFundsV2Schema.safeParse(validInput); expect(result.success).toBe(true); }); it("should allow missing assetId", () => { const validInput = {}; const result = schemas_1.RequestFaucetFundsV2Schema.safeParse(validInput); expect(result.success).toBe(true); }); }); });