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}"`);
}
});
});