import { readFileSync } from "node:fs"; import { describe, expect, it } from "vitest"; const gameplayPanelsSource = readFileSync( new URL("./GameplayPanels.tsx", import.meta.url), "utf8", ); const talentResourcesSource = readFileSync( new URL("./talentGameplayResources.ts", import.meta.url), "utf8", ); const appSource = readFileSync( new URL("../App.tsx", import.meta.url), "utf8", ); const gameplayResourcesSource = readFileSync( new URL("./gameplayResources.ts", import.meta.url), "utf8", ); const companionPanelSource = readFileSync( new URL("./CompanionPanel.tsx", import.meta.url), "utf8", ); const shelvedCompanionSource = readFileSync( new URL("./ShelvedCompanionPanel.enabled.tsx", import.meta.url), "utf8", ); const mainMenuSource = readFileSync( new URL("./MainMenuScreen.tsx", import.meta.url), "utf8", ); describe("gameplay panel loading integration", () => { it("loads talent resources at gameplay entry and on demand in the menu editor", () => { expect(appSource).toContain("preloadTalentGameplayResources(talentClassId)"); expect(appSource).toContain('preloadGameplay={phase === "game"}'); expect(talentResourcesSource).toContain("loadTalentUiCatalog(classId)"); expect(talentResourcesSource).toContain("loadTalentGameplayPanel()"); expect(talentResourcesSource).toContain("image.decode()"); expect(gameplayPanelsSource).toContain("getLoadedTalentGameplayPanel()"); expect(gameplayPanelsSource).toContain(""); expect(gameplayPanelsSource).not.toContain("requestIdleCallback"); expect(gameplayPanelsSource).not.toContain("preloadTalentGameplayResources"); expect(gameplayPanelsSource).toContain("fallback={}"); expect(gameplayPanelsSource).not.toContain(""); }); it("warms the shared runtime and first-open panels before gameplay mounts", () => { expect(appSource).toContain("preloadSharedGameplayResources(originalMediaEnabled)"); expect(appSource).toContain("getLoadedGameRuntime()"); expect(gameplayResourcesSource).toContain('import("../GameRuntime")'); expect(gameplayResourcesSource).toContain('import("./PartyManagementPanel")'); expect(gameplayResourcesSource).toContain('import("./BossGuidePanel")'); expect(gameplayResourcesSource).not.toContain('import("./CompanionManastormPanel")'); expect(shelvedCompanionSource).toContain('import("./CompanionManastormPanel")'); expect(gameplayPanelsSource).toContain(""); expect(gameplayPanelsSource).toContain(""); expect(companionPanelSource).toContain(" { expect(mainMenuSource).toContain('className="main-menu-card main-menu-card--adventures"'); expect(mainMenuSource).toContain('["dungeons", "random-dungeon", "random-bite-sized", "randomized-bite-sized", "dungeon-race"]'); expect(mainMenuSource).toContain('controlId="mode-gm-menu"'); for (const controlId of [ "gm-menu-gm-tools", "gm-menu-boss-testing", "gm-menu-companion-readiness", "gm-menu-balance-lab", "gm-menu-reports", ]) { expect(mainMenuSource).toContain(`controlId="${controlId}"`); } }); });