import { render, screen } from "@testing-library/react";
import { beforeEach, describe, expect, it, vi } from "vitest";
const { useFeatureFlagStateMock } = vi.hoisted(() => ({
useFeatureFlagStateMock: vi.fn(),
}));
vi.mock("@/lib/feature-flags", async (importOriginal) => ({
...(await importOriginal
pending state
} >on state
, ); describe("FeatureFlagGate", () => { beforeEach(() => { useFeatureFlagStateMock.mockReset(); }); it("should ask for the given flag", () => { useFeatureFlagStateMock.mockReturnValue(FEATURE_FLAG_STATE.OFF); renderGate(); expect(useFeatureFlagStateMock).toHaveBeenCalledWith("issues-feature"); }); it("should render the children when the flag is on", () => { useFeatureFlagStateMock.mockReturnValue(FEATURE_FLAG_STATE.ON); renderGate(); expect(screen.getByText("on state")).toBeInTheDocument(); expect(screen.queryByText("off state")).not.toBeInTheDocument(); expect(screen.queryByText("pending state")).not.toBeInTheDocument(); }); it("should render the fallback when the flag is off", () => { useFeatureFlagStateMock.mockReturnValue(FEATURE_FLAG_STATE.OFF); renderGate(); expect(screen.getByText("off state")).toBeInTheDocument(); expect(screen.queryByText("on state")).not.toBeInTheDocument(); }); it("should render the pending slot while the flag is unresolved", () => { useFeatureFlagStateMock.mockReturnValue(FEATURE_FLAG_STATE.PENDING); renderGate(); expect(screen.getByText("pending state")).toBeInTheDocument(); expect(screen.queryByText("on state")).not.toBeInTheDocument(); expect(screen.queryByText("off state")).not.toBeInTheDocument(); }); it.each([ ["off", FEATURE_FLAG_STATE.OFF], ["pending", FEATURE_FLAG_STATE.PENDING], ])( "should render nothing by default when the flag is %s", (_label, state) => { useFeatureFlagStateMock.mockReturnValue(state); const { container } = render(on state