import unittest
from  app.models import User,Role,Permission,AnonymousUser
class UserModelTestCase(unittest.TestCase):

    def test_password_setter(self):
        u = User(password = 'cat')
        self.assertTrue(u.password_hash is not None)

    def test_no_password_getter(self):
        u = User(password = 'cat')
        with self.assertRaises(AttributeError):
            u.password

    def test_password_verificayion(self):
        u = User(password = 'cat')
        self.assertTrue(u.verify_password('cat'))
        self.assertFalse(u.verify_password('dog'))

    def test_password_salts_are_random(self):
        u = User(password = 'cat')
        u2 = User(password = 'cat')
        self.assertTrue(u.password_hash!=u2.password_hash)

    def test_roles_and_permissions(self):
        Role.insert_roles()
        u = User(account='123456',password='cat')
        self.assertTrue(u.can(Permission.WRITER_ARITICLES))
        self.assertFalse(u.can(Permission.MODERATE_COMMENTS))

    def test_anonymous(self):
        u = AnonymousUser()
        self.assertFalse(u.can(Permission.FOLLOW))