Files
strategic/tests/unit/adapters/aggregators.test.ts
2026-02-09 21:51:54 -08:00

80 lines
1.9 KiB
TypeScript

import { describe, it, expect, vi, beforeEach } from "vitest";
import { AggregatorAdapter } from "../../../src/adapters/aggregators.js";
describe("Aggregator Adapter", () => {
let adapter: AggregatorAdapter;
let mockProvider: any;
beforeEach(() => {
mockProvider = {
getNetwork: vi.fn().mockResolvedValue({ chainId: 1n }),
call: vi.fn(),
};
vi.spyOn(require("ethers"), "JsonRpcProvider").mockImplementation(() => mockProvider);
vi.spyOn(require("ethers"), "Contract").mockImplementation(() => ({
swap: vi.fn(),
transformERC20: vi.fn(),
interface: {
encodeFunctionData: vi.fn(),
},
}));
// Mock fetch
global.fetch = vi.fn();
});
it("should get 1inch quote", async () => {
adapter = new AggregatorAdapter("mainnet");
// Mock 1inch API response
(global.fetch as any).mockResolvedValueOnce({
ok: true,
json: async () => ({
toAmount: "1000000",
}),
});
(global.fetch as any).mockResolvedValueOnce({
ok: true,
json: async () => ({
tx: {
data: "0x1234",
to: "0x1111111254EEB25477B68fb85Ed929f73A960582",
},
}),
});
const quote = await adapter.get1InchQuote(
"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"0xdAC17F958D2ee523a2206206994597C13D831ec7",
1000000n,
50
);
expect(quote).toBeDefined();
expect(quote?.amountOut).toBeGreaterThan(0n);
expect(quote?.data).toBeDefined();
});
it("should fallback when 1inch API fails", async () => {
adapter = new AggregatorAdapter("mainnet");
// Mock API failure
(global.fetch as any).mockResolvedValueOnce({
ok: false,
});
const quote = await adapter.get1InchQuote(
"0xA0b86991c6218b36c1d19D4a2e9Eb0cE3606eB48",
"0xdAC17F958D2ee523a2206206994597C13D831ec7",
1000000n,
50
);
// Should return fallback quote
expect(quote).toBeDefined();
});
});