import { describe, expect, it } from "vitest"; import { PartyCastTelemetry } from "./partyCastTelemetry"; describe("Balance Lab companion cast telemetry", () => { it("counts completed damaging casts from party releases", () => { const telemetry = new PartyCastTelemetry(); expect(telemetry.record({ actorGroup: "party", sourceActorId: "party-ranger", abilityId: "ranger-power-shot", phase: "cast-start", })).toBe(false); expect(telemetry.record({ actorGroup: "party", sourceActorId: "party-ranger", abilityId: "ranger-power-shot", phase: "release", })).toBe(true); }); it("counts one cast for a channel with several release pulses", () => { const telemetry = new PartyCastTelemetry(); const cast = { actorGroup: "party", sourceActorId: "party-healer", abilityId: "channel-heal", }; expect(telemetry.record({ ...cast, phase: "cast-start" })).toBe(false); expect(telemetry.record({ ...cast, phase: "release" })).toBe(true); expect(telemetry.record({ ...cast, phase: "release" })).toBe(false); }); it("counts instant releases and ignores canceled or non-party actions", () => { const telemetry = new PartyCastTelemetry(); const cast = { actorGroup: "party", sourceActorId: "party-pyromancer", abilityId: "instant-blast", }; expect(telemetry.record({ ...cast, phase: "release", instantCast: true })).toBe(true); expect(telemetry.record({ ...cast, phase: "cast-start" })).toBe(false); expect(telemetry.record({ ...cast, phase: "cast-cancel" })).toBe(false); expect(telemetry.record({ ...cast, phase: "release" })).toBe(false); expect(telemetry.record({ ...cast, actorGroup: "player", phase: "release", instantCast: true })).toBe(false); expect(telemetry.record({ ...cast, abilityId: "party-auto-attack", phase: "release", instantCast: true, })).toBe(false); }); });