class TestPlayer(unittest.TestCase):

    def setUp(self):
        self.my_player = Player(35, 20)

    def test_initialisation(self):
        self.assertTrue(isinstance(self.my_player, Player))

    def test_is_alive(self):
        dead_player = Player(0, 12)
        self.assertFalse(dead_player.is_alive())
        self.assertTrue(self.my_player.is_alive())

    def test_can_cast(self):
        self.assertTrue(self.my_player.can_cast())
        no_mana_player = Player(10, 0)
        self.assertFalse(no_mana_player.can_cast())

    def test_get_health(self):
        self.assertEqual(self.my_player.health, self.my_player.get_health())

    def test_get_mana(self):
        self.assertEqual(self.my_player.mana, self.my_player.get_mana())

    def test_healing(self):
        dead_player = Player(0, 12)
        self.assertFalse(dead_player.take_healing(2))
        self.my_player.health -= 15
        self.assertTrue(self.my_player.take_healing(5))
        self.assertEqual(self.my_player.health, 25)

    def test_learn(self):
        s = Spell("Potion", 20, 25, 1)
        self.my_player.learn(s)
        self.assertEqual(self.my_player.spell, [s])
        s1 = Spell("Fireball", 30, 50, 2)
        self.my_player.learn(s1)
        self.assertEqual(self.my_player.spell, [s1])

    def test_equip(self):
        w = Weapon("Hammer", 10)
        self.my_player.equip(w)
        self.assertEqual(self.my_player.weapon, [w])
        w1 = Weapon("Sword", 35)
        self.my_player.equip(w1)
        self.assertEqual(self.my_player.weapon, [w1])

    def test_take_damage(self):
        self.my_player.take_damage(30)
        self.assertEqual(self.my_player.health, 5)
        self.my_player.take_damage(15)
        self.assertEqual(self.my_player.health, 0)

    def test_take_mana(self):
        pass

    def test_attack(self):
        pass
 def test_can_cast(self):
     self.assertTrue(self.my_player.can_cast())
     no_mana_player = Player(10, 0)
     self.assertFalse(no_mana_player.can_cast())