Files
healer-man/src/game/combatPresentationLoading.test.ts
T
2026-09-11 14:26:15 -04:00

43 lines
1.8 KiB
TypeScript

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