# -*- coding: utf-8 -*- """Model unit tests.""" import datetime as dt import pytest from harambee_led_bord.user.models import Role, User from .factories import UserFactory @pytest.mark.usefixtures("db") class TestUser: """User tests.""" def test_get_by_id(self): """Get user by ID.""" user = User("foo", "foo@bar.com") user.save() retrieved = User.get_by_id(user.id) assert retrieved == user def test_created_at_defaults_to_datetime(self): """Test creation date.""" user = User(username="foo", email="foo@bar.com") user.save() assert bool(user.created_at) assert isinstance(user.created_at, dt.datetime) def test_password_is_nullable(self): """Test null password.""" user = User(username="foo", email="foo@bar.com") user.save() assert user.password is None def test_factory(self, db): """Test user factory.""" user = UserFactory(password="myprecious") db.session.commit() assert bool(user.username) assert bool(user.email) assert bool(user.created_at) assert user.is_admin is False assert user.active is True assert user.check_password("myprecious") def test_check_password(self): """Check password.""" user = User.create(username="foo", email="foo@bar.com", password="foobarbaz123") assert user.check_password("foobarbaz123") is True assert user.check_password("barfoobaz") is False def test_full_name(self): """User full name.""" user = UserFactory(first_name="Foo", last_name="Bar") assert user.full_name == "Foo Bar" def test_roles(self): """Add a role to a user.""" role = Role(name="admin") role.save() user = UserFactory() user.roles.append(role) user.save() assert role in user.roles