@coinbase/agentkit
Version:
Coinbase AgentKit core primitives
81 lines (80 loc) • 3.5 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
const viem_1 = require("viem");
const superfluidStreamActionProvider_1 = require("./superfluidStreamActionProvider");
const constants_1 = require("./constants");
describe("SuperfluidStreamActionProvider", () => {
const MOCK_ADDRESS = "0xe6b2af36b3bb8d47206a129ff11d5a2de2a63c83";
const MOCK_ERC20_CONTRACT = "0x1234567890123456789012345678901234567890";
const MOCK_RECIPIENT_ADDRESS = "0x9876543210987654321098765432109876543210";
const MOCK_FLOW_RATE = "123";
const MOCK_CHAIN_ID = "8453";
let mockWallet;
const actionProvider = (0, superfluidStreamActionProvider_1.superfluidStreamActionProvider)();
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({});
});
describe("create stream", () => {
it("should successfully create a superfluid stream", async () => {
const args = {
superTokenAddress: MOCK_ERC20_CONTRACT,
chainId: MOCK_CHAIN_ID,
recipientAddress: MOCK_RECIPIENT_ADDRESS,
flowRate: MOCK_FLOW_RATE,
};
await actionProvider.createStream(mockWallet, args);
expect(mockWallet.sendTransaction).toHaveBeenCalledWith({
to: constants_1.CFAv1ForwarderAddress,
data: (0, viem_1.encodeFunctionData)({
abi: constants_1.CFAv1ForwarderABI,
functionName: "createFlow",
args: [
MOCK_ERC20_CONTRACT,
MOCK_ADDRESS,
MOCK_RECIPIENT_ADDRESS,
BigInt(MOCK_FLOW_RATE),
"0x",
],
}),
});
expect(mockWallet.waitForTransactionReceipt).toHaveBeenCalledWith("0xmockhash");
});
it("should handle stream creation errors", async () => {
const error = new Error("Stream creation failed");
mockWallet.sendTransaction.mockRejectedValue(error);
const args = {
superTokenAddress: MOCK_ERC20_CONTRACT,
chainId: MOCK_CHAIN_ID,
recipientAddress: MOCK_RECIPIENT_ADDRESS,
flowRate: MOCK_FLOW_RATE,
};
const response = await actionProvider.createStream(mockWallet, args);
expect(response).toBe(`Error creating Superfluid stream: ${error}`);
});
});
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);
});
});
});