improve conditions test

This commit is contained in:
evilchili
2024-07-13 13:08:47 -07:00
parent e2ff1eb027
commit b68dda2b77
3 changed files with 49 additions and 19 deletions
+28 -10
View File
@@ -1,7 +1,6 @@
import json
from ttfrog.db import schema
from ttfrog.db.schema.conditions import conditions
from ttfrog.db.schema.constants import Conditions, DamageType, Defenses
@@ -227,7 +226,9 @@ def test_modifiers(db, bootstrap):
# test sets of modifiers from conditions are applied when a condition is active
incapacitated = schema.Condition(name="incapacitated")
incapacitated.add_modifier(schema.Modifier(target="actions_per_turn", absolute_value=0, name="Incapacitated"))
incapacitated.add_modifier(schema.Modifier(target="bonus_actions_per_turn", absolute_value=0, name="Incapacitated"))
incapacitated.add_modifier(
schema.Modifier(target="bonus_actions_per_turn", absolute_value=0, name="Incapacitated")
)
incapacitated.add_modifier(schema.Modifier(target="reactions_per_turn", absolute_value=0, name="Incapacitated"))
db.add_or_update(incapacitated)
assert carl.actions_per_turn == 1
@@ -421,32 +422,47 @@ def test_condition_immunity(db, bootstrap):
db.add_or_update(carl)
assert carl.has_condition(poisoned)
def test_partial_immunities(db, bootstrap):
"""
Test that individual modifiers applied by a condition can be negated even if not immune to the condition.
"""
with db.transaction():
tiefling = db.Ancestry.filter_by(name="tiefling").one()
carl = schema.Character(name="Carl", ancestry=tiefling)
# Create some modifiers and conditions for this test
fly = schema.Modifier(target="fly_speed", absolute_value=30, name="Fly Spell")
cannot_move = schema.Modifier(name="Cannot Move (Petrified", target="speed", absolute_value=0)
poisoned = schema.Condition(name=DamageType.poison)
poison_immunity = schema.Modifier("Poison Immunity", target=DamageType.poison, new_value=Defenses.immune)
# incapacitated applies several modifiers
incapacitated = schema.Condition(name=Conditions.incapacitated)
incapacitated.add_modifier(schema.Modifier(target="actions_per_turn", absolute_value=0, name="Incapacitated"))
incapacitated.add_modifier(schema.Modifier(target="bonus_actions_per_turn", absolute_value=0, name="Incapacitated"))
incapacitated.add_modifier(
schema.Modifier(target="bonus_actions_per_turn", absolute_value=0, name="Incapacitated")
)
incapacitated.add_modifier(schema.Modifier(target="reactions_per_turn", absolute_value=0, name="Incapacitated"))
# petrified incapacitates you, and makes you immune to poison
# petrified applies several modifiers but also incapacitates you!
petrified = schema.Condition(name=Conditions.petrified)
assert petrified.add_modifier(poison_immunity)
assert petrified.add_modifier(cannot_move)
assert petrified.add_condition(incapacitated)
db.add_or_update([poisoned, poison_immunity, incapacitated, petrified])
db.add_or_update([fly, cannot_move, poisoned, poison_immunity, incapacitated, petrified])
# hi carl
tiefling = db.Ancestry.filter_by(name="tiefling").one()
carl = schema.Character(name="Carl", ancestry=tiefling)
# carl casts fly!
assert carl.fly_speed is None
assert carl.add_modifier(fly)
assert carl.fly_speed == carl.speed == carl.ancestry.speed
db.add_or_update(carl)
# poison carl
carl.add_condition(poisoned)
db.add_or_update(carl)
assert not carl.immune(DamageType.poison)
assert carl.add_condition(poisoned)
db.add_or_update(carl)
# petrify carl
assert not carl.immune(Conditions.petrified)
@@ -458,6 +474,8 @@ def test_partial_immunities(db, bootstrap):
# but carl still can't move
assert carl.actions_per_turn == 0
assert carl.speed == 0
assert carl.fly_speed == 0
# greater restoration ftw!
assert carl.remove_condition(petrified)