Files
healer-man/src/game/benchmark/partyCastTelemetry.test.ts
T
2026-10-06 22:25:34 -04:00

56 lines
1.9 KiB
TypeScript

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