tabletop-frog/test/test_importer.py
2024-10-13 00:15:41 -07:00

114 lines
5.1 KiB
Python

from ttfrog.db.base import StatsEnum
from ttfrog.db.schema.constants import DamageType
from ttfrog.db.schema.prototypes import Rarity
from ttfrog.five_e_tools import importer
def test_imports(db):
with db.transaction():
db.add_or_update(list(importer.get_all()))
# buff
heroes_feast = db.BaseSpell.filter_by(name="Heroes' Feast", source="PHB").one()
assert heroes_feast.school == "Conjuration"
assert heroes_feast.target_range == 30
assert heroes_feast.target_shape == "point"
assert heroes_feast.target_size is None
assert heroes_feast.time == "10 minute"
assert heroes_feast.duration == "instant"
assert heroes_feast.level == 6
assert heroes_feast.concentration is False
assert heroes_feast.components.startswith("verbal, somatic, materials")
assert heroes_feast.damage_type is None
assert heroes_feast.damage_die is None
assert heroes_feast.saving_throw is None
assert "a gem-encrusted bowl worth at least 1,000 gp" in heroes_feast.components
# area of effect
meteor_swarm = db.BaseSpell.filter_by(name="Meteor Swarm", source="PHB").one()
assert meteor_swarm.school == "Evocation"
assert meteor_swarm.target_range == 5280
assert meteor_swarm.target_shape == "point"
assert meteor_swarm.target_size is None
assert meteor_swarm.time == "1 action"
assert meteor_swarm.duration == "instant"
assert meteor_swarm.level == 9
assert meteor_swarm.components == "verbal, somatic"
assert meteor_swarm.concentration is False
assert meteor_swarm.damage_die == "20d6"
assert meteor_swarm.damage_type == "fire"
assert meteor_swarm.saving_throw == StatsEnum.dexterity
assert meteor_swarm.description.startswith("Blazing orbs of fire")
# spell attack, saving throw
acid_splash = db.BaseSpell.filter_by(name="Acid Splash", source="PHB").one()
assert acid_splash.school == "Conjuration"
assert acid_splash.target_range == 60
assert acid_splash.target_shape == "point"
assert acid_splash.target_size is None
assert acid_splash.time == "1 action"
assert acid_splash.duration == "instant"
assert acid_splash.level == 0
assert acid_splash.concentration is False
assert acid_splash.components == "verbal, somatic"
assert acid_splash.damage_die == "1d6"
assert acid_splash.damage_type == "acid"
assert acid_splash.saving_throw == StatsEnum.dexterity
assert "You hurl a bubble of acid" in acid_splash.description
# spell attack, ranged
eldritch_blast = db.BaseSpell.filter_by(name="Eldritch Blast", source="PHB").one()
assert eldritch_blast.school == "Evocation"
assert eldritch_blast.target_range == 120
assert eldritch_blast.target_shape == "point"
assert eldritch_blast.target_size is None
assert eldritch_blast.time == "1 action"
assert eldritch_blast.duration == "instant"
assert eldritch_blast.level == 0
assert eldritch_blast.concentration is False
assert eldritch_blast.components == "verbal, somatic"
assert eldritch_blast.damage_die == "1d10"
assert eldritch_blast.damage_type == "force"
assert eldritch_blast.saving_throw is None
assert "A beam of crackling energy" in eldritch_blast.description
# armors
armor_of_invulnerability = db.Armor.filter_by(name="Armor of Invulnerability", source="DMG").one()
assert armor_of_invulnerability.rarity == Rarity.Legendary
assert armor_of_invulnerability.requires_attunement
assert armor_of_invulnerability.armor_class == 18
studded_leather_armor = db.Armor.filter_by(name="Studded Leather Armor", source="PHB").one()
assert studded_leather_armor.rarity == Rarity.Common
assert studded_leather_armor.armor_class == 12
# dagger
dagger_of_venom = db.Weapon.filter_by(name="Dagger of Venom", source="DMG").one()
assert dagger_of_venom.damage_die == "1d4"
assert dagger_of_venom.damage_type == DamageType.piercing
assert dagger_of_venom.light
assert dagger_of_venom.finesse
assert dagger_of_venom.thrown
assert dagger_of_venom.magical
assert dagger_of_venom.melee
assert dagger_of_venom.ranged
assert dagger_of_venom.attack_range == 20
assert dagger_of_venom.attack_range_long == 60
assert dagger_of_venom.reach == 0
assert not dagger_of_venom.versatile
assert not dagger_of_venom.martial
# versatile
quarterstaff = db.Weapon.filter_by(name="Quarterstaff", source="PHB").one()
assert quarterstaff.versatile
assert quarterstaff.damage_die == "1d6"
assert quarterstaff.damage_die_two_handed == "1d8"
assert quarterstaff.damage_type == DamageType.bludgeoning
assert not quarterstaff.thrown
assert not quarterstaff.two_handed
# two-handed
pike = db.Weapon.filter_by(name="Pike", source="PHB").one()
assert pike.two_handed
assert pike.damage_die == "1d10"