Enforce maximum values for PF2e numbered conditions
Cap dying (4), doomed (3), wounded (3), and slowed (3) at their rule-defined maximums. The domain clamps values in setConditionValue and the condition picker disables the [+] button at the cap. Closes #31 Co-Authored-By: Claude Opus 4.6 (1M context) <noreply@anthropic.com>
This commit is contained in:
@@ -169,6 +169,60 @@ describe("setConditionValue", () => {
|
||||
);
|
||||
expectDomainError(result, "unknown-condition");
|
||||
});
|
||||
|
||||
it("clamps value to maxValue for capped conditions", () => {
|
||||
const e = enc([makeCombatant("A")]);
|
||||
const result = setConditionValue(e, combatantId("A"), "dying", 6);
|
||||
if (isDomainError(result)) throw new Error(result.message);
|
||||
|
||||
expect(result.encounter.combatants[0].conditions).toEqual([
|
||||
{ id: "dying", value: 4 },
|
||||
]);
|
||||
expect(result.events[0]).toMatchObject({
|
||||
type: "ConditionAdded",
|
||||
value: 4,
|
||||
});
|
||||
});
|
||||
|
||||
it("allows value at exactly the max", () => {
|
||||
const e = enc([makeCombatant("A")]);
|
||||
const result = setConditionValue(e, combatantId("A"), "doomed", 3);
|
||||
if (isDomainError(result)) throw new Error(result.message);
|
||||
|
||||
expect(result.encounter.combatants[0].conditions).toEqual([
|
||||
{ id: "doomed", value: 3 },
|
||||
]);
|
||||
});
|
||||
|
||||
it("allows value below the max", () => {
|
||||
const e = enc([makeCombatant("A")]);
|
||||
const result = setConditionValue(e, combatantId("A"), "wounded", 2);
|
||||
if (isDomainError(result)) throw new Error(result.message);
|
||||
|
||||
expect(result.encounter.combatants[0].conditions).toEqual([
|
||||
{ id: "wounded", value: 2 },
|
||||
]);
|
||||
});
|
||||
|
||||
it("does not cap conditions without a maxValue", () => {
|
||||
const e = enc([makeCombatant("A")]);
|
||||
const result = setConditionValue(e, combatantId("A"), "frightened", 10);
|
||||
if (isDomainError(result)) throw new Error(result.message);
|
||||
|
||||
expect(result.encounter.combatants[0].conditions).toEqual([
|
||||
{ id: "frightened", value: 10 },
|
||||
]);
|
||||
});
|
||||
|
||||
it("clamps when updating an existing capped condition", () => {
|
||||
const e = enc([makeCombatant("A", [{ id: "slowed-pf2e", value: 2 }])]);
|
||||
const result = setConditionValue(e, combatantId("A"), "slowed-pf2e", 5);
|
||||
if (isDomainError(result)) throw new Error(result.message);
|
||||
|
||||
expect(result.encounter.combatants[0].conditions).toEqual([
|
||||
{ id: "slowed-pf2e", value: 3 },
|
||||
]);
|
||||
});
|
||||
});
|
||||
|
||||
describe("decrementCondition", () => {
|
||||
|
||||
Reference in New Issue
Block a user