@coinbase/agentkit
Version:
Coinbase AgentKit core primitives
98 lines (97 loc) • 4.15 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const onrampActionProvider_1 = require("./onrampActionProvider");
const schemas_1 = require("./schemas");
describe("OnrampActionProvider", () => {
const provider = new onrampActionProvider_1.OnrampActionProvider({
projectId: "test-project-id",
});
let mockWalletProvider;
beforeEach(() => {
mockWalletProvider = {
getAddress: jest.fn().mockReturnValue("0x123"),
getBalance: jest.fn(),
getName: jest.fn(),
getNetwork: jest.fn().mockReturnValue({
protocolFamily: "evm",
networkId: "base-mainnet",
}),
nativeTransfer: jest.fn(),
};
});
describe("network support", () => {
it("should support valid EVM networks", () => {
expect(provider.supportsNetwork({
networkId: "base-mainnet",
protocolFamily: "evm",
})).toBe(true);
});
it("should not support invalid EVM networks, such as testnets", () => {
expect(provider.supportsNetwork({
networkId: "base-sepolia",
protocolFamily: "evm",
})).toBe(false);
});
it("should not support other protocol families", () => {
expect(provider.supportsNetwork({
protocolFamily: "other-protocol-family",
})).toBe(false);
});
it("should handle invalid network objects", () => {
expect(provider.supportsNetwork({})).toBe(false);
});
});
describe("action validation", () => {
it("should validate getOnrampBuyUrl schema", () => {
const validInput = {};
const parseResult = schemas_1.GetOnrampBuyUrlActionSchema.safeParse(validInput);
expect(parseResult.success).toBe(true);
});
});
describe("getOnrampBuyUrl", () => {
beforeEach(() => {
mockWalletProvider.getAddress.mockReturnValue("0x123");
});
/**
* Parses URL search parameters from a URL string.
*
* @param url - The URL string to parse parameters from
* @returns The parsed URL search parameters
*/
function parseUrlParams(url) {
const urlObj = new URL(url);
return urlObj.searchParams;
}
it("should execute getOnrampBuyUrl with wallet provider", async () => {
const result = await provider.getOnrampBuyUrl(mockWalletProvider, {});
const url = new URL(result);
const params = parseUrlParams(result);
// Verify base URL
expect(url.origin + url.pathname).toBe("https://pay.coinbase.com/buy");
// Verify all expected parameters are present with correct values
expect(params.get("appId")).toBe("test-project-id");
expect(params.get("defaultNetwork")).toBe("base");
// Verify address configuration
const addressConfig = JSON.parse(params.get("addresses") || "{}");
expect(addressConfig).toEqual({
"0x123": ["base"],
});
expect(mockWalletProvider.getNetwork).toHaveBeenCalled();
expect(mockWalletProvider.getAddress).toHaveBeenCalled();
});
it("should throw error for unsupported network", async () => {
mockWalletProvider.getNetwork.mockReturnValue({
protocolFamily: "evm",
networkId: "unsupported-network",
});
await expect(provider.getOnrampBuyUrl(mockWalletProvider, {})).rejects.toThrow("Network ID is not supported. Make sure you are using a supported mainnet network.");
});
it("should throw error when network ID is not set", async () => {
mockWalletProvider.getNetwork.mockReturnValue({
protocolFamily: "evm",
networkId: undefined,
});
await expect(provider.getOnrampBuyUrl(mockWalletProvider, {})).rejects.toThrow("Network ID is not set");
});
});
});