def test_equip_hero_weapon_must_be_weapon(self):
        h = Hero(name="Bron",
                 title="Dragonslayer",
                 health=100,
                 mana=100,
                 mana_regeneration_rate=2)

        weapon = Weapon(name='Axe', damage=20)
        h.equip(weapon)

        self.assertEqual(h.weapon, weapon)
    def test_attack_method_when_by_weapon_when_has_weapon(self):
        h = Hero(name="Bron",
                 title="Dragonslayer",
                 health=100,
                 mana=100,
                 mana_regeneration_rate=2)
        weapon = Weapon(name='Axe', damage=20)
        h.equip(weapon)

        result = h.attack(by='weapon')

        self.assertEqual(result, 20)
    def test_init_fight_should_save_hero_and_enemy(self):
        map_ = Dungeon('level1.txt')
        hero = Hero(name="Bron",
                    title="Dragonslayer",
                    health=100,
                    mana=100,
                    mana_regeneration_rate=2)
        weapon = Weapon('Axe', 20)
        spell = Spell('Fireball', 20, 50, 2)
        hero.equip(weapon)
        hero.learn(spell)
        enemy = Enemy(health=100, mana=20, damage=20)

        fight = Fight(hero, enemy, level_map=map_.level_map)

        self.assertEqual((hero, enemy), (fight.hero, fight.enemy))
    def test_hero_attack_by_spell_returns_true_if_fight_starts(self):
        hero = Hero(name="Bron",
                    title="Dragonslayer",
                    health=100,
                    mana=100,
                    mana_regeneration_rate=2)
        map_ = Dungeon('level1.txt')
        map_.spawn(hero)
        weapon = Weapon('Axe', damage=20)
        hero.equip(weapon)
        spell = Spell('fireball', 20, 20, 2)
        hero.spell = spell
        map_.move_hero('right')
        map_.move_hero('down')
        map_.move_hero('down')
        map_.move_hero('down')

        result = map_.hero_attack(by='spell')

        self.assertEqual(result, True)