61 lines
1.4 KiB
TypeScript
61 lines
1.4 KiB
TypeScript
import { describe, it, expect } from "vitest";
|
|
import { evaluateSlippage } from "../../../src/guards/slippage.js";
|
|
import { Guard } from "../../../src/strategy.schema.js";
|
|
|
|
describe("Slippage Guard", () => {
|
|
it("should pass when slippage is within limit", () => {
|
|
const guard: Guard = {
|
|
type: "slippage",
|
|
params: {
|
|
maxBps: 50, // 0.5%
|
|
},
|
|
};
|
|
|
|
const context = {
|
|
expectedAmount: 1000000n,
|
|
actualAmount: 995000n, // 0.5% slippage
|
|
};
|
|
|
|
const result = evaluateSlippage(guard, context);
|
|
expect(result.passed).toBe(true);
|
|
});
|
|
|
|
it("should fail when slippage exceeds limit", () => {
|
|
const guard: Guard = {
|
|
type: "slippage",
|
|
params: {
|
|
maxBps: 10, // 0.1%
|
|
},
|
|
};
|
|
|
|
const context = {
|
|
expectedAmount: 1000000n,
|
|
actualAmount: 980000n, // 2% slippage
|
|
};
|
|
|
|
const result = evaluateSlippage(guard, context);
|
|
expect(result.passed).toBe(false);
|
|
expect(result.reason).toContain("slippage");
|
|
});
|
|
|
|
it("should handle zero expected amount", () => {
|
|
const guard: Guard = {
|
|
type: "slippage",
|
|
params: {
|
|
maxBps: 50,
|
|
},
|
|
};
|
|
|
|
const context = {
|
|
expectedAmount: 0n,
|
|
actualAmount: 995000n,
|
|
};
|
|
|
|
const result = evaluateSlippage(guard, context);
|
|
// Should fail if expected amount is zero
|
|
expect(result.passed).toBe(false);
|
|
expect(result.reason).toContain("zero");
|
|
});
|
|
});
|
|
|