@coinbase/agentkit
Version:
Coinbase AgentKit core primitives
97 lines (96 loc) • 4.65 kB
JavaScript
;
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);
});
});
});