1import { afterEach, describe, expect, it, vi } from "vite-plus/test";
2
3import {
4 clearShowcaseRenderSignal,
5 getShowcaseRenderSignal,
6 isShowcaseNativeContentReady,
7 reportShowcaseSceneRendered,
8 subscribeToShowcaseRenderSignal,
9} from "./showcaseRenderSignal";
10
11afterEach(clearShowcaseRenderSignal);
12
13describe("showcase native content readiness", () => {
14 it("does not gate scenes whose content is rendered by React Native", () => {
15 expect(
16 isShowcaseNativeContentReady({ scene: "environments", themeId: "grove", renderSignal: null }),
17 ).toBe(true);
18 });
19
20 it("waits for the native review surface to draw the active theme", () => {
21 expect(
22 isShowcaseNativeContentReady({ scene: "review", themeId: "grove", renderSignal: null }),
23 ).toBe(false);
24 expect(
25 isShowcaseNativeContentReady({
26 scene: "review",
27 themeId: "grove",
28 renderSignal: { scene: "review", themeId: "ocean" },
29 }),
30 ).toBe(false);
31 expect(
32 isShowcaseNativeContentReady({
33 scene: "review",
34 themeId: "grove",
35 renderSignal: { scene: "review", themeId: "grove" },
36 }),
37 ).toBe(true);
38 });
39
40 it("clears a draw when the runner requests another scene", () => {
41 const listener = vi.fn();
42 const unsubscribe = subscribeToShowcaseRenderSignal(listener);
43
44 reportShowcaseSceneRendered({ scene: "review", themeId: "iris" });
45 expect(getShowcaseRenderSignal()).toEqual({ scene: "review", themeId: "iris" });
46 clearShowcaseRenderSignal();
47 expect(getShowcaseRenderSignal()).toBeNull();
48 expect(listener).toHaveBeenCalledTimes(2);
49
50 unsubscribe();
51 });
52});