from ttfrog.db.schema.item import Item, Spell, ItemType def test_equipment_inventory(db, carl): with db.transaction(): # trigger the creation of inventory mappings db.add_or_update(carl) # create some items ten_foot_pole = Item(name="10ft. Pole", item_type=ItemType.ITEM, consumable=False) fireball = Spell(name="Fireball", level=3, concentration=False) db.add_or_update([ten_foot_pole, fireball]) # add the pole to carl's equipment, and the spell to his spell list. assert carl.equipment.add(ten_foot_pole) assert carl.spells.add(fireball) # can't mix and match inventory item types assert not carl.equipment.add(fireball) assert not carl.spells.add(ten_foot_pole) # add two more 10 foot poles. You can never have too many. carl.equipment.add(ten_foot_pole) carl.equipment.add(ten_foot_pole) db.add_or_update(carl) all_carls_poles = carl.equipment.get(ten_foot_pole) assert len(all_carls_poles) == 3 # check the "contains" logic assert ten_foot_pole in carl.equipment assert ten_foot_pole not in carl.spells assert fireball in carl.spells assert fireball not in carl.equipment # equip one pole assert carl.equip(all_carls_poles[0]) # can't equip it twice assert not carl.equip(all_carls_poles[0]) # unequip it assert carl.unequip(all_carls_poles[0]) # can't unequip the unequipped ones assert not carl.unequip(all_carls_poles[1]) assert not carl.unequip(all_carls_poles[2]) # drop one pole assert carl.equipment.remove(all_carls_poles[0]) assert ten_foot_pole in carl.equipment # drop the remaining poles assert carl.equipment.remove(all_carls_poles[1]) assert carl.equipment.remove(all_carls_poles[2]) assert ten_foot_pole not in carl.equipment # can't drop what you don't have assert not carl.equipment.remove(all_carls_poles[0]) def test_inventory_bundles(db, carl): with db.transaction(): arrows = Item(name="Arrows", item_type=ItemType.ITEM, consumable=True, count=20) db.add_or_update([carl, arrows]) quiver = carl.equipment.add(arrows) db.add_or_update(carl) # full quiver assert arrows in carl.equipment assert quiver.count == 20 # use one assert quiver.use(1) == 19 assert quiver.count == 19 # cannot use more than you have assert not quiver.use(20) # cannot use a negative amount assert not quiver.use(-1) # consume all remaining arrows assert quiver.use(19) == 0 assert arrows not in carl.equipment