diff --git a/electron/preload.ts b/electron/preload.ts index d7e29ba7..42b6d67f 100644 --- a/electron/preload.ts +++ b/electron/preload.ts @@ -20,6 +20,7 @@ import type { } from "../src/shared/localvtt.js"; const api: LocalVttApi = { + isVisualSmokeTest: process.env.LOCALVTT_VISUAL_SMOKE_TEST === "1", createCampaign: () => ipcRenderer.invoke("campaign:create") as Promise, openCampaign: () => ipcRenderer.invoke("campaign:open") as Promise, openRecentCampaign: (campaignPath: string) => ipcRenderer.invoke("campaign:openRecent", campaignPath) as Promise, diff --git a/src/renderer/devLocalVtt.ts b/src/renderer/devLocalVtt.ts index 2589dc88..c5bc8477 100644 --- a/src/renderer/devLocalVtt.ts +++ b/src/renderer/devLocalVtt.ts @@ -75,6 +75,7 @@ export function installDevLocalVtt() { }; const api: LocalVttApi = { + isVisualSmokeTest: false, createCampaign: async () => { campaign = createDevCampaign(); scenes.clear(); diff --git a/src/renderer/lib/player-view/playerIdleState.ts b/src/renderer/lib/player-view/playerIdleState.ts index de9f96dc..58ce4718 100644 --- a/src/renderer/lib/player-view/playerIdleState.ts +++ b/src/renderer/lib/player-view/playerIdleState.ts @@ -15,10 +15,14 @@ export const PLAYER_BLACKOUT_STATE: PlayerIdleState = { }; type PlayerIdleApi = { + isVisualSmokeTest?: boolean; showPlayerIdle: (title: string, message: string, variant?: PlayerIdleState["variant"]) => Promise; }; export async function showDefaultPlayerHold(api: PlayerIdleApi = window.localVtt): Promise { + if (api.isVisualSmokeTest) { + return; + } await api.showPlayerIdle(DEFAULT_PLAYER_HOLD_STATE.title, DEFAULT_PLAYER_HOLD_STATE.message, DEFAULT_PLAYER_HOLD_STATE.variant); } diff --git a/src/shared/localVttApi.ts b/src/shared/localVttApi.ts index 54a94145..32697cb3 100644 --- a/src/shared/localVttApi.ts +++ b/src/shared/localVttApi.ts @@ -47,6 +47,7 @@ export interface PlayerDisplaySummary { } export interface LocalVttApi { + isVisualSmokeTest: boolean; createCampaign: () => Promise; openCampaign: () => Promise; openRecentCampaign: (campaignPath: string) => Promise; diff --git a/tests/renderer/playerIdleState.test.ts b/tests/renderer/playerIdleState.test.ts index a91502aa..09f84ac7 100644 --- a/tests/renderer/playerIdleState.test.ts +++ b/tests/renderer/playerIdleState.test.ts @@ -16,6 +16,14 @@ describe("player idle state helpers", () => { ); }); + it("does not override visual smoke fixture state with the default hold state", async () => { + const api = { isVisualSmokeTest: true, showPlayerIdle: vi.fn().mockResolvedValue(undefined) }; + + await showDefaultPlayerHold(api); + + expect(api.showPlayerIdle).not.toHaveBeenCalled(); + }); + it("shows the blackout state", async () => { const api = { showPlayerIdle: vi.fn().mockResolvedValue(undefined) };