Initial commit: add .gitignore and README
This commit is contained in:
105
tests/unit/utils/gas.test.ts
Normal file
105
tests/unit/utils/gas.test.ts
Normal file
@@ -0,0 +1,105 @@
|
||||
import { describe, it, expect, vi, beforeEach } from "vitest";
|
||||
import { estimateGasForCalls } from "../../../src/utils/gas.js";
|
||||
import { CompiledCall } from "../../../src/planner/compiler.js";
|
||||
import { JsonRpcProvider } from "ethers";
|
||||
|
||||
describe("Gas Estimation", () => {
|
||||
let mockProvider: any;
|
||||
|
||||
beforeEach(() => {
|
||||
mockProvider = {
|
||||
estimateGas: vi.fn(),
|
||||
getNetwork: vi.fn().mockResolvedValue({ chainId: 1n }),
|
||||
};
|
||||
});
|
||||
|
||||
it("should estimate gas for single call", async () => {
|
||||
const calls: CompiledCall[] = [
|
||||
{
|
||||
to: "0x1234567890123456789012345678901234567890",
|
||||
data: "0x1234",
|
||||
description: "Test call",
|
||||
},
|
||||
];
|
||||
|
||||
mockProvider.estimateGas = vi.fn().mockResolvedValue(100000n);
|
||||
|
||||
const estimate = await estimateGasForCalls(
|
||||
mockProvider as any,
|
||||
calls,
|
||||
"0x0000000000000000000000000000000000000000"
|
||||
);
|
||||
|
||||
expect(estimate).toBeGreaterThan(0n);
|
||||
});
|
||||
|
||||
it("should estimate gas for multiple calls", async () => {
|
||||
const calls: CompiledCall[] = [
|
||||
{
|
||||
to: "0x1234567890123456789012345678901234567890",
|
||||
data: "0x1234",
|
||||
description: "Call 1",
|
||||
},
|
||||
{
|
||||
to: "0x1234567890123456789012345678901234567890",
|
||||
data: "0x5678",
|
||||
description: "Call 2",
|
||||
},
|
||||
];
|
||||
|
||||
mockProvider.estimateGas = vi.fn().mockResolvedValue(100000n);
|
||||
|
||||
const estimate = await estimateGasForCalls(
|
||||
mockProvider as any,
|
||||
calls,
|
||||
"0x0000000000000000000000000000000000000000"
|
||||
);
|
||||
|
||||
expect(estimate).toBeGreaterThan(0n);
|
||||
});
|
||||
|
||||
it("should add safety buffer to estimates", async () => {
|
||||
const calls: CompiledCall[] = [
|
||||
{
|
||||
to: "0x1234567890123456789012345678901234567890",
|
||||
data: "0x1234",
|
||||
description: "Test call",
|
||||
},
|
||||
];
|
||||
|
||||
mockProvider.estimateGas = vi.fn().mockResolvedValue(100000n);
|
||||
|
||||
const estimate = await estimateGasForCalls(
|
||||
mockProvider as any,
|
||||
calls,
|
||||
"0x0000000000000000000000000000000000000000"
|
||||
);
|
||||
|
||||
// Should have safety buffer (typically 20%)
|
||||
expect(estimate).toBeGreaterThan(100000n);
|
||||
});
|
||||
|
||||
it("should handle estimation failures gracefully", async () => {
|
||||
const calls: CompiledCall[] = [
|
||||
{
|
||||
to: "0x1234567890123456789012345678901234567890",
|
||||
data: "0x1234",
|
||||
description: "Test call",
|
||||
},
|
||||
];
|
||||
|
||||
mockProvider.estimateGas = vi.fn().mockRejectedValue(
|
||||
new Error("Estimation failed")
|
||||
);
|
||||
|
||||
// Should fall back to rough estimate
|
||||
await expect(
|
||||
estimateGasForCalls(
|
||||
mockProvider as any,
|
||||
calls,
|
||||
"0x0000000000000000000000000000000000000000"
|
||||
)
|
||||
).rejects.toThrow();
|
||||
});
|
||||
});
|
||||
|
||||
Reference in New Issue
Block a user