import unittest

from RandomPersonnage import create_random_personnage


class ProprertyTest(unittest.TestCase):
    def test_atributes(self):
        '''
        Vérifie si les attributs des classes `Personnage` sont bien protégés avec des accesseurs
        appropriés
        :return:
        '''
        for _ in range(100):
            p = create_random_personnage()
            for attr in ['charisme', 'force', 'intelligence', 'obstination', 'empathie']:
                self.assertTrue(hasattr(p, f"_{attr}"), f"L'attribut '{type(p)}._{attr}' n'existe pas")
                self.assertTrue(hasattr(p, attr), f"L'accesseur '{type(p)}.{attr}' n'existe pas")

            writable = True
            try:
                p.charisme = 0
            except AttributeError:
                writable = False

            self.assertFalse(writable, f"L'attribut '{type(p)}.charisme' est modifiable")

            writable = True
            try:
                p.force = 0
            except AttributeError:
                writable = False
            self.assertFalse(writable, f"L'attribut '{type(p)}.force' est modifiable")

            writable = True
            try:
                p.intelligence = 0
            except AttributeError:
                writable = False
            self.assertFalse(writable, f"L'attribut '{type(p)}.intelligence' est modifiable")

            writable = True
            try:
                p.obstination = 0
            except AttributeError:
                writable = False
            self.assertFalse(writable, f"L'attribut '{type(p)}.obstination' est modifiable")

            writable = True
            try:
                p.empathie = 0
            except AttributeError:
                writable = False
            self.assertFalse(writable, f"L'attribut '{type(p)}.empathie' est modifiable")


if __name__ == '__main__':
    unittest.main()
