43 lines
1.8 KiB
TypeScript
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);
|
|
});
|
|
});
|