// @vitest-environment jsdom import { describe, expect, it } from "vitest"; import { render, screen } from "@testing-library/react"; import { FeatureFlagsProvider, useFlag, useVariant } from "./context"; import { FeatureFlagService } from "./service"; import { StaticProvider } from "./static-provider"; function FlagBadge({ flagKey, defaultValue }: { flagKey: string; defaultValue: boolean }) { const enabled = useFlag(flagKey, defaultValue); return {enabled ? "ON" : "OFF"}; } function VariantBadge({ flagKey, defaultValue }: { flagKey: string; defaultValue: string }) { const variant = useVariant(flagKey, defaultValue); return {variant}; } describe("FeatureFlagsProvider + hooks", () => { it("useFlag returns provider value inside the tree", () => { const service = new FeatureFlagService( new StaticProvider({ demo: { default: true } }), ); render( , ); expect(screen.getByTestId("flag").textContent).toBe("ON"); }); it("useFlag falls back to default outside any provider (tests / stories)", () => { render(); expect(screen.getByTestId("flag").textContent).toBe("ON"); }); it("useFlag respects the EvalContext attached to the provider", () => { const service = new FeatureFlagService( new StaticProvider({ internal: { default: false, allow: ["user-internal"] }, }), ); render( , ); expect(screen.getByTestId("flag").textContent).toBe("ON"); }); it("useVariant returns the variant identifier", () => { const service = new FeatureFlagService( new StaticProvider({ algo: { default: true, variant: "experiment-v2" }, }), ); render( , ); expect(screen.getByTestId("variant").textContent).toBe("experiment-v2"); }); it("useVariant falls back to default outside any provider", () => { render(); expect(screen.getByTestId("variant").textContent).toBe("control"); }); });