import { retry } from "../../src/retry/retry";

describe("retry()", () => {
  it("resolves when function eventually succeeds", async () => {
    let attempts = 0;
    const fn = jest.fn().mockImplementation(() => {
      attempts++;
      return attempts < 3 ? Promise.reject("fail") : Promise.resolve("ok");
    });
    await expect(
      retry(fn, { retries: 2, baseDelay: 1, maxDelay: 10 })
    ).resolves.toBe("ok");
    expect(fn).toHaveBeenCalledTimes(3);
  });

  it("rejects with last error after exhausting retries", async () => {
    const fn = () => Promise.reject(new Error("nope"));
    await expect(
      retry(fn, { retries: 1, baseDelay: 1, maxDelay: 10 })
    ).rejects.toThrow("nope");
  });
});
