Release Healer Man 0.1.29
This commit is contained in:
1 parent
8c9809d3e0
commit
544c1bee91
120 files changed
+4363
-1036
No files matched your search
@@ -1,10 +1,20 @@
|
||||
import { afterEach, describe, expect, it, vi } from "vitest";
|
||||
|
||||
const combatMedia = vi.hoisted(() => ({ ready: false }));
|
||||
const combatMedia = vi.hoisted(() => ({
|
||||
ready: false,
|
||||
fetch: vi.fn(),
|
||||
entry: vi.fn(() => null as import("./combatPresentation").CombatEffectManifestEntry | null),
|
||||
}));
|
||||
|
||||
vi.mock("./combatMediaPack", async (importOriginal) => ({
|
||||
...(await importOriginal<typeof import("./combatMediaPack")>()),
|
||||
combatMediaPackReady: () => combatMedia.ready,
|
||||
fetchOptionalMediaAsset: combatMedia.fetch,
|
||||
}));
|
||||
|
||||
vi.mock("./combatPresentation", async (importOriginal) => ({
|
||||
...(await importOriginal<typeof import("./combatPresentation")>()),
|
||||
combatEffectManifestEntry: combatMedia.entry,
|
||||
}));
|
||||
|
||||
import {
|
||||
@@ -40,6 +50,8 @@ const fixtureEvent: CombatPresentationEvent = {
|
||||
|
||||
afterEach(() => {
|
||||
combatMedia.ready = false;
|
||||
combatMedia.fetch.mockReset();
|
||||
combatMedia.entry.mockReset();
|
||||
vi.unstubAllGlobals();
|
||||
});
|
||||
|
||||
@@ -69,7 +81,7 @@ describe("combat audio output policy", () => {
|
||||
...DEFAULT_COMBAT_PRESENTATION_SETTINGS,
|
||||
originalMediaEnabled: true,
|
||||
})).toBe(true);
|
||||
expect(combatMediaPreloadEnabled(DEFAULT_COMBAT_PRESENTATION_SETTINGS, 0.6)).toBe(false);
|
||||
expect(combatMediaPreloadEnabled(DEFAULT_COMBAT_PRESENTATION_SETTINGS, 0.6)).toBe(true);
|
||||
expect(combatMediaPreloadEnabled({
|
||||
...DEFAULT_COMBAT_PRESENTATION_SETTINGS,
|
||||
originalMediaEnabled: true,
|
||||
@@ -104,4 +116,56 @@ describe("combat audio output policy", () => {
|
||||
|
||||
expect(AudioContextConstructor).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it("stays silent without an original sound, even with combat audio enabled", () => {
|
||||
combatMedia.ready = true;
|
||||
const AudioContextConstructor = vi.fn();
|
||||
vi.stubGlobal("window", { AudioContext: AudioContextConstructor });
|
||||
configureCombatAudio(DEFAULT_COMBAT_PRESENTATION_SETTINGS, 0.6);
|
||||
|
||||
playCombatAudio(fixtureEvent);
|
||||
|
||||
expect(AudioContextConstructor).not.toHaveBeenCalled();
|
||||
expect(combatMedia.fetch).not.toHaveBeenCalled();
|
||||
});
|
||||
|
||||
it.each(["original", "missing-file", "bad-audio"])("uses original audio or silence for %s", async (scenario) => {
|
||||
vi.resetModules();
|
||||
const audio = await import("./combatAudio");
|
||||
const source = { connect: vi.fn(), disconnect: vi.fn(), start: vi.fn(), stop: vi.fn(), buffer: null, onended: null };
|
||||
const audioContext = {
|
||||
currentTime: 0,
|
||||
state: "running",
|
||||
destination: {},
|
||||
createGain: () => ({
|
||||
connect: vi.fn(), disconnect: vi.fn(), gain: { setTargetAtTime: vi.fn(), value: 1 },
|
||||
}),
|
||||
createStereoPanner: () => ({ connect: vi.fn(), disconnect: vi.fn() }),
|
||||
createBufferSource: vi.fn(() => source),
|
||||
createOscillator: vi.fn(),
|
||||
decodeAudioData: vi.fn(async () => {
|
||||
if (scenario === "bad-audio") throw new Error("Invalid audio");
|
||||
return { duration: 1 };
|
||||
}),
|
||||
resume: vi.fn(async () => undefined),
|
||||
};
|
||||
vi.stubGlobal("window", { AudioContext: function () { return audioContext; } });
|
||||
combatMedia.ready = true;
|
||||
combatMedia.entry.mockReturnValue({
|
||||
key: "wow335:2061", source: "wow335", spellId: 2061,
|
||||
sounds: [{ url: "/assets/game/combat-effects/audio/flash-heal.wav" }],
|
||||
});
|
||||
combatMedia.fetch.mockResolvedValue(new Response(new Uint8Array([1, 2, 3]), {
|
||||
status: scenario === "missing-file" ? 404 : 200,
|
||||
}));
|
||||
audio.configureCombatAudio(DEFAULT_COMBAT_PRESENTATION_SETTINGS, 0.6);
|
||||
audio.playCombatAudio({ ...fixtureEvent, source: "wow335", sourceSpellId: 2061 });
|
||||
await new Promise((resolve) => setTimeout(resolve, 0));
|
||||
|
||||
expect(combatMedia.fetch).toHaveBeenCalledWith("/assets/game/combat-effects/audio/flash-heal.wav");
|
||||
expect(source.start).toHaveBeenCalledTimes(scenario === "original" ? 1 : 0);
|
||||
expect(audioContext.createBufferSource).toHaveBeenCalledTimes(scenario === "original" ? 1 : 0);
|
||||
expect(audioContext.createOscillator).not.toHaveBeenCalled();
|
||||
audio.resetCombatAudio();
|
||||
});
|
||||
});
|
||||
Reference in new issue
Block a user