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

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();
});
});