adding tests
This commit is contained in:
@@ -21,3 +21,8 @@ def test_dump_load(db, bootstrap):
|
||||
def test_loader(db, bootstrap):
|
||||
loader.load(db.dump())
|
||||
assert len(db.Ancestry.all()) > 0
|
||||
|
||||
|
||||
def test_default(db):
|
||||
loader.load()
|
||||
assert len(db.Ancestry.all()) > 0
|
||||
|
||||
+49
-4
@@ -1,7 +1,7 @@
|
||||
import json
|
||||
|
||||
from ttfrog.db import schema
|
||||
from ttfrog.db.schema.constants import DamageType, Defenses
|
||||
from ttfrog.db.schema.constants import DamageType, Defenses, Conditions
|
||||
|
||||
|
||||
def test_manage_character(db, bootstrap):
|
||||
@@ -23,7 +23,9 @@ def test_manage_character(db, bootstrap):
|
||||
assert char.intelligence == 10
|
||||
assert char.wisdom == 10
|
||||
assert char.charisma == 10
|
||||
|
||||
assert darkvision not in char.traits
|
||||
assert char.vision_in_darkness == 0
|
||||
|
||||
# verify basic skills were added at creation time
|
||||
for skill in db.Skill.filter(
|
||||
@@ -39,6 +41,7 @@ def test_manage_character(db, bootstrap):
|
||||
assert char.ancestry_id == tiefling.id
|
||||
assert char.ancestry.name == "tiefling"
|
||||
assert darkvision in char.traits
|
||||
assert char.vision_in_darkness == 120
|
||||
|
||||
# tiefling ancestry adds INT and CHA modifiers
|
||||
assert char.intelligence == 11
|
||||
@@ -110,8 +113,22 @@ def test_manage_character(db, bootstrap):
|
||||
db.add_or_update(char)
|
||||
assert char.level == 8
|
||||
assert char.levels == {"fighter": 7, "rogue": 1}
|
||||
assert list(char.classes.keys()) == ['fighter', 'rogue']
|
||||
assert sum([len(dice) for dice in char.hit_dice.values()]) == char.level == 8
|
||||
|
||||
# test conditions
|
||||
assert not char.condition(Conditions.frightened)
|
||||
char.add_condition(Conditions.frightened)
|
||||
assert char.condition(Conditions.frightened)
|
||||
char.add_modifier(
|
||||
schema.Modifier("Immunity: Frightened", target=Conditions.frightened, new_value=Defenses.immune)
|
||||
)
|
||||
assert not char.condition(Conditions.frightened)
|
||||
|
||||
# use a hit die
|
||||
char.spend_hit_die(char.hit_dice["rogue"][0])
|
||||
assert len([die for die in char.hit_dice_available if die.character_class.name == "rogue"]) == 0
|
||||
|
||||
# remove a class
|
||||
char.remove_class(rogue)
|
||||
db.add_or_update(char)
|
||||
@@ -130,11 +147,12 @@ def test_manage_character(db, bootstrap):
|
||||
assert char.levels == {}
|
||||
assert char.class_attributes == {}
|
||||
|
||||
# verify the proficiencies added by the classes have been removed
|
||||
# verify the proficiencies etc. added by the classes have been removed
|
||||
assert athletics not in char.skills
|
||||
assert acrobatics not in char.skills
|
||||
assert char.check_modifier(athletics) == 0
|
||||
assert char.check_modifier(acrobatics) == 0
|
||||
assert char.hit_dice == {}
|
||||
|
||||
# ensure we're not persisting any orphan records in the map tables
|
||||
dump = json.loads(db.dump())
|
||||
@@ -162,6 +180,10 @@ def test_ancestries(db, bootstrap):
|
||||
db.add_or_update(porc)
|
||||
assert endurance in porc.traits
|
||||
|
||||
# add it again and assert nothing changes
|
||||
porc.add_trait(endurance, level=1)
|
||||
assert endurance in porc.traits
|
||||
|
||||
# add a +3 STR modifier
|
||||
str_bonus = schema.Modifier(
|
||||
name="STR+3 (Pygmy Orc)",
|
||||
@@ -208,10 +230,18 @@ def test_modifiers(db, bootstrap):
|
||||
slowed = schema.Modifier(target="speed", multiply_value=0.5, name="Slowed")
|
||||
restrained = schema.Modifier(target="speed", absolute_value=0, name="Restrained")
|
||||
reduced = schema.Modifier(target="size", new_value="Tiny", name="Reduced")
|
||||
fly = schema.Modifier(target="fly_speed", absolute_value=30, name="Fly Spell")
|
||||
|
||||
# reduce speed by 10
|
||||
assert carl.add_modifier(cold)
|
||||
assert carl.speed == 20
|
||||
assert carl.climb_speed == 10
|
||||
assert carl.swim_speed == 10
|
||||
assert carl.fly_speed is None
|
||||
|
||||
# cast fly
|
||||
carl.add_modifier(fly)
|
||||
assert carl.fly_speed == 20
|
||||
|
||||
# make sure modifiers only apply to carl. Carl is having a bad day.
|
||||
assert marx.speed == 30
|
||||
@@ -243,6 +273,9 @@ def test_modifiers(db, bootstrap):
|
||||
assert carl.add_modifier(reduced)
|
||||
assert carl.size == "Tiny"
|
||||
|
||||
# cannot remove a modifier that isn't applied
|
||||
assert not carl.remove_modifier(cold)
|
||||
|
||||
# modifiers can be applied to skills, even if the character doesn't have a skill associated.
|
||||
athletics = db.Skill.filter_by(name="athletics").one()
|
||||
assert athletics not in carl.skills
|
||||
@@ -283,6 +316,8 @@ def test_modifiers(db, bootstrap):
|
||||
assert len([s for s in carl.skills if s == athletics]) == 1
|
||||
assert carl.check_modifier(athletics) == 1
|
||||
|
||||
# ensure you can't remove a skill already removed
|
||||
assert not carl.remove_skill(athletics, proficient=True, expert=False, character_class=None)
|
||||
|
||||
def test_defenses(db, bootstrap):
|
||||
with db.transaction():
|
||||
@@ -292,6 +327,16 @@ def test_defenses(db, bootstrap):
|
||||
carl.apply_damage(5, DamageType.fire)
|
||||
assert carl.hit_points == 8 # half damage
|
||||
|
||||
# add temp HP
|
||||
carl.temp_hit_points = 3
|
||||
assert carl.hit_points == 8
|
||||
carl.apply_damage(1, DamageType.bludgeoning)
|
||||
assert carl.hit_points == 8
|
||||
assert carl.temp_hit_points == 2
|
||||
carl.apply_damage(3, DamageType.bludgeoning)
|
||||
assert carl.temp_hit_points == 0
|
||||
assert carl.hit_points == 7
|
||||
|
||||
immunity = [
|
||||
schema.Modifier("Fire Immunity", target=DamageType.fire, new_value=Defenses.immune),
|
||||
]
|
||||
@@ -299,7 +344,7 @@ def test_defenses(db, bootstrap):
|
||||
carl.add_modifier(i)
|
||||
assert carl.immune(DamageType.fire)
|
||||
carl.apply_damage(5, DamageType.fire)
|
||||
assert carl.hit_points == 8 # no damage
|
||||
assert carl.hit_points == 7 # no damage
|
||||
|
||||
vulnerability = [
|
||||
schema.Modifier("Fire Vulnerability", target=DamageType.fire, new_value=Defenses.vulnerable),
|
||||
@@ -309,7 +354,7 @@ def test_defenses(db, bootstrap):
|
||||
assert carl.vulnerable(DamageType.fire)
|
||||
assert not carl.immune(DamageType.fire)
|
||||
carl.apply_damage(2, DamageType.fire)
|
||||
assert carl.hit_points == 4 # double damage
|
||||
assert carl.hit_points == 3 # double damage
|
||||
|
||||
absorbs = [schema.Modifier("Absorbs Non-Magical Fire", target=DamageType.fire, new_value=Defenses.absorbs)]
|
||||
carl.add_modifier(absorbs[0])
|
||||
|
||||
Reference in New Issue
Block a user