import { beforeEach, describe, expect, it, vi } from "vitest"; const media = vi.hoisted(() => ({ ready: false, fetch: vi.fn() })); vi.mock("./combatMediaPack", () => ({ COMBAT_MEDIA_MANIFEST_URL: "/assets/game/combat-effects/manifest.json", combatMediaPackReady: () => media.ready, fetchCombatMediaAsset: media.fetch, })); beforeEach(() => { vi.resetModules(); media.ready = false; media.fetch.mockReset(); }); describe("original media loading", () => { it("uses the original default once the pack is ready without changing the saved preference", async () => { const { DEFAULT_COMBAT_PRESENTATION_SETTINGS: settings, effectiveCombatVfxMode } = await import("./combatPresentation"); expect(effectiveCombatVfxMode(settings)).toBe("generated"); media.ready = true; expect(effectiveCombatVfxMode(settings)).toBe("original"); expect(effectiveCombatVfxMode({ ...settings, originalMediaEnabled: false })).toBe("generated"); expect(settings.vfxMode).toBe("original"); }); it("does not poison manifest loading before installation or after a failed fetch", async () => { const { preloadCombatEffectManifest, combatEffectManifestEntry } = await import("./combatPresentation"); await preloadCombatEffectManifest(); expect(media.fetch).not.toHaveBeenCalled(); media.ready = true; media.fetch.mockRejectedValueOnce(new Error("Offline")); await preloadCombatEffectManifest(); expect(combatEffectManifestEntry(2061, "wow335")).toBeNull(); const entry = { key: "wow335:2061", source: "wow335", spellId: 2061 }; media.fetch.mockResolvedValueOnce(new Response(JSON.stringify({ schemaVersion: 1, entries: [entry] }))); await preloadCombatEffectManifest(); expect(combatEffectManifestEntry(2061, "wow335")).toEqual(entry); expect(media.fetch).toHaveBeenCalledTimes(2); }); });