114 lines
5.1 KiB
Python
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"
|