improve conditions test
This commit is contained in:
+28
-10
@@ -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)
|
||||
|
||||
Reference in New Issue
Block a user