import { describe, it, expect, beforeEach } from "vitest";
import { RecordingConsent } from "@repo/core-testing/instrumentation";
import { withdrawHandler } from "@/handlers/withdraw.handler";

describe("withdrawHandler", () => {
  let consent: RecordingConsent;

  beforeEach(async () => {
    consent = new RecordingConsent();
    await consent.grant("analytics");
  });

  it("returns { success: true }", async () => {
    const result = await withdrawHandler(consent, { category: "analytics" });
    expect(result).toEqual({ success: true });
  });

  it("calls consent.withdraw with the given category", async () => {
    await withdrawHandler(consent, { category: "analytics" });
    expect(consent.withdrawals).toHaveLength(1);
    expect(consent.withdrawals[0]).toBe("analytics");
  });

  it("category is no longer granted after withdraw", async () => {
    await withdrawHandler(consent, { category: "analytics" });
    expect(consent.isGranted("analytics")).toBe(false);
  });
});
