import { describe, expect, it } from "vitest";
import {
  ProviderFailure,
  isProviderFailure,
  unsafeOpaqueId,
  type ProviderCall,
  type ProviderId,
} from "@awp/contracts";

describe("provider failure transport", () => {
  it("uses typed rejection while ProviderResult remains success-only", async () => {
    const providerId = unsafeOpaqueId<ProviderId>("provider-test");
    const call = async (): ProviderCall<string> => {
      throw new ProviderFailure({
        category: "unavailable",
        retryable: true,
        providerId,
        safeMessage: "provider temporarily unavailable",
        observedAt: "2026-08-21T00:00:00Z",
      });
    };
    try {
      await call();
      throw new Error("expected provider failure");
    } catch (error) {
      expect(isProviderFailure(error)).toBe(true);
      expect((error as ProviderFailure).providerError.category).toBe("unavailable");
    }
  });
});
