Files
healer-man/src/game/timedEffectDisplay.test.ts
T
2026-08-14 15:56:39 -04:00

41 lines
1.2 KiB
TypeScript

import { describe, expect, it } from "vitest";
import type { TimedCombatEffect } from "./combatStore";
import {
formatTimedEffectTimer,
timedEffectExpiresAt,
timedEffectRemainingMs,
} from "./timedEffectDisplay";
function effect(overrides: Partial<TimedCombatEffect> = {}): TimedCombatEffect {
return {
id: "priest-shadow-word-pain:1",
kind: "dot",
sourceAbilityId: "priest-shadow-word-pain",
sourceActorId: "__player__",
targetId: "mob-1",
coefficient: 0.28,
remainingTicks: 6,
intervalMs: 3_000,
nextTickAt: 4_000,
...overrides,
};
}
describe("timed effect display", () => {
it("keeps a stable expiry as periodic ticks are consumed", () => {
const initial = effect();
const afterTick = effect({ remainingTicks: 5, nextTickAt: 7_000 });
expect(timedEffectExpiresAt(initial)).toBe(19_000);
expect(timedEffectExpiresAt(afterTick)).toBe(19_000);
expect(timedEffectRemainingMs(afterTick, 7_500)).toBe(11_500);
});
it("formats compact countdown labels", () => {
expect(formatTimedEffectTimer(65_001)).toBe("1:06");
expect(formatTimedEffectTimer(10_001)).toBe("11");
expect(formatTimedEffectTimer(9_940)).toBe("9.9");
expect(formatTimedEffectTimer(-50)).toBe("0.0");
});
});