import { describe, expect, test, vi } from "vitest"; import { retry } from "../../src"; describe("retry", () => { test("succeeds on first try", async () => { const fn = vi.fn().mockResolvedValue("ok"); const result = await retry(fn); expect(result).toBe("ok"); expect(fn).toHaveBeenCalledTimes(1); }); test("retries on failure", async () => { const fn = vi .fn() .mockRejectedValueOnce(new Error("fail1")) .mockRejectedValueOnce(new Error("fail2")) .mockResolvedValue("ok"); const result = await retry(fn, 3, 10); expect(result).toBe("ok"); expect(fn).toHaveBeenCalledTimes(3); }); test("throws after exhausting retries", async () => { const fn = vi.fn().mockRejectedValue(new Error("fail")); await expect(retry(fn, 2, 10)).rejects.toThrow("fail"); expect(fn).toHaveBeenCalledTimes(2); }); });