import { describe, it, expect, vi, beforeEach } from "vitest"; import { MakerAdapter } from "../../../src/adapters/maker.js"; describe("MakerDAO Adapter", () => { let adapter: MakerAdapter; 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(() => ({ open: vi.fn(), frob: vi.fn(), join: vi.fn(), exit: vi.fn(), interface: { parseLog: vi.fn(), }, })); }); it("should open vault and parse CDP ID", async () => { adapter = new MakerAdapter("mainnet"); // Mock transaction with NewCdp event const mockReceipt = { logs: [{ topics: ["0x...", "0x0000000000000000000000000000000000000000000000000000000000000123"], data: "0x", }], }; // @ts-ignore adapter.cdpManager.open = vi.fn().mockResolvedValue({ wait: vi.fn().mockResolvedValue(mockReceipt), }); // @ts-ignore adapter.cdpManager.interface.parseLog = vi.fn().mockReturnValue({ name: "NewCdp", args: { usr: "0x123", own: "0x456", cdp: 291n, // CDP ID }, }); const cdpId = await adapter.openVault("ETH-A"); expect(cdpId).toBe(291n); }); it("should encode frob operation", async () => { adapter = new MakerAdapter("mainnet"); const data = await adapter.frob(291n, 1000000000000000000n, 1000n); expect(data).toBeDefined(); }); it("should encode join operation", async () => { adapter = new MakerAdapter("mainnet"); const data = await adapter.join(1000000n); expect(data).toBeDefined(); }); it("should encode exit operation", async () => { adapter = new MakerAdapter("mainnet"); const data = await adapter.exit(1000000n); expect(data).toBeDefined(); }); });