71 lines
2.1 KiB
TypeScript
71 lines
2.1 KiB
TypeScript
import { describe, it, expect, vi, beforeEach } from "vitest";
|
|
import { evaluateMinHealthFactor } from "../../../src/guards/minHealthFactor.js";
|
|
import { AaveV3Adapter } from "../../../src/adapters/aaveV3.js";
|
|
import { Guard } from "../../../src/strategy.schema.js";
|
|
|
|
describe("Min Health Factor Guard", () => {
|
|
let mockAave: AaveV3Adapter;
|
|
let mockProvider: any;
|
|
|
|
beforeEach(() => {
|
|
mockProvider = {
|
|
getNetwork: vi.fn().mockResolvedValue({ chainId: 1n }),
|
|
};
|
|
|
|
mockAave = new AaveV3Adapter("mainnet");
|
|
// @ts-ignore - access private property for testing
|
|
mockAave.provider = mockProvider;
|
|
});
|
|
|
|
it("should pass when health factor is above minimum", async () => {
|
|
const guard: Guard = {
|
|
type: "minHealthFactor",
|
|
params: {
|
|
minHF: 1.2,
|
|
user: "0x1234567890123456789012345678901234567890",
|
|
},
|
|
};
|
|
|
|
// Mock health factor calculation
|
|
vi.spyOn(mockAave, "getUserHealthFactor").mockResolvedValue(1.5);
|
|
|
|
const result = await evaluateMinHealthFactor(guard, mockAave, {});
|
|
expect(result.passed).toBe(true);
|
|
});
|
|
|
|
it("should fail when health factor is below minimum", async () => {
|
|
const guard: Guard = {
|
|
type: "minHealthFactor",
|
|
params: {
|
|
minHF: 1.2,
|
|
user: "0x1234567890123456789012345678901234567890",
|
|
},
|
|
};
|
|
|
|
// Mock health factor below minimum
|
|
vi.spyOn(mockAave, "getUserHealthFactor").mockResolvedValue(1.1);
|
|
|
|
const result = await evaluateMinHealthFactor(guard, mockAave, {});
|
|
expect(result.passed).toBe(false);
|
|
expect(result.reason).toContain("health factor");
|
|
});
|
|
|
|
it("should handle missing user position", async () => {
|
|
const guard: Guard = {
|
|
type: "minHealthFactor",
|
|
params: {
|
|
minHF: 1.2,
|
|
user: "0x0000000000000000000000000000000000000000",
|
|
},
|
|
};
|
|
|
|
// Mock no position
|
|
vi.spyOn(mockAave, "getUserHealthFactor").mockResolvedValue(0);
|
|
|
|
const result = await evaluateMinHealthFactor(guard, mockAave, {});
|
|
expect(result.passed).toBe(false);
|
|
expect(result.reason).toBeDefined();
|
|
});
|
|
});
|
|
|