forked from phenom/healer-man
76 lines
3.3 KiB
TypeScript
76 lines
3.3 KiB
TypeScript
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("<PreloadedTalentGameplayPanel />");
|
|
expect(gameplayPanelsSource).not.toContain("requestIdleCallback");
|
|
expect(gameplayPanelsSource).not.toContain("preloadTalentGameplayResources");
|
|
expect(gameplayPanelsSource).toContain("fallback={<TalentsPanelLoading />}");
|
|
expect(gameplayPanelsSource).not.toContain("<Suspense fallback={null}><TalentGameplayPanel />");
|
|
});
|
|
|
|
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("<PreloadedPartyManagementPanel />");
|
|
expect(gameplayPanelsSource).toContain("<PreloadedBossGuidePanel />");
|
|
expect(companionPanelSource).toContain("<ShelvedCompanionPanel");
|
|
});
|
|
|
|
it("groups primary adventures separately and keeps testing utilities in the GM menu", () => {
|
|
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}"`);
|
|
}
|
|
});
|
|
});
|