# Path: recruit_app/user/models.py
# class Role(SurrogatePK, Model, RoleMixin):
#     __tablename__ = 'roles'
#     name = Column(db.String(80), unique=True)
#     description = db.Column(db.String(255))
# 
#     def __repr__(self):
#         return '<Role({name})>'.format(name=self.name)
# 
# class User(SurrogatePK, Model, UserMixin):
#     __tablename__ = 'users'
# 
#     email = Column(db.String(80), unique=True, nullable=False)
#     #: The hashed password
#     password = Column(db.String(128), nullable=True)
#     created_at = Column(db.DateTime, nullable=False, default=dt.datetime.utcnow)
#     active = Column(db.Boolean(), default=False)
#     is_admin = Column(db.Boolean(), default=False)
# 
#     confirmed_at = Column(db.DateTime, nullable=True)
# 
#     last_login_at = Column(db.DateTime())
#     current_login_at = Column(db.DateTime())
#     last_login_ip = Column(db.String(100))
#     current_login_ip = Column(db.String(100))
#     login_count = Column(db.Integer)
# 
#     roles = db.relationship('Role', secondary=roles_users, backref=db.backref('users', lazy='dynamic'), lazy='dynamic')
# 
#     main_character_id = ReferenceCol('characters', pk_name='character_id', nullable=True)
#     main_character = relationship('EveCharacter', backref='user_main_character', foreign_keys=[main_character_id])
# 
#     def set_password(self, password):
#         self.password = encrypt_password(password)
#         self.save()
# 
#     def check_password(self, value):
#         return verify_and_update_password(value, self)
# 
#     @classmethod
#     def create(self, **kwargs):
#         """Create a new record and save it the database."""
#         instance = self(**kwargs)
#         if kwargs['password']:
#             instance.password = encrypt_password(kwargs['password'])
#         return instance.save()
# 
#     @property
#     def get_ips(self):
#         return self.last_login_ip.split(', ') + self.current_login_ip.split(', ')
# 
#     def __repr__(self):
#         return '<User({name})>'.format(name=self.email)
# 
#     def __str__(self):
#         return self.email
# 
# Path: tests/factories.py
# class UserFactory(BaseFactory):
#     """User factory."""
# 
#     email = Sequence(lambda n: 'user{0}@example.com'.format(n))
#     password = PostGenerationMethodCall('set_password', 'example')
#     active = True
# 
#     class Meta:
#         """Factory configuration."""
# 
#         model = User


import datetime as dt
import pytest
from recruit_app.user.models import Role, User
from .factories import UserFactory
# -*- coding: utf-8 -*-
"""Model unit tests."""





@pytest.mark.usefixtures('db')
class TestUser:
    """User tests."""

    def test_get_by_id(self):
        """Get user by ID."""
        user = User(email='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."""

# Path: recruit_app/user/models.py
# class Role(SurrogatePK, Model, RoleMixin):
#     __tablename__ = 'roles'
#     name = Column(db.String(80), unique=True)
#     description = db.Column(db.String(255))
# 
#     def __repr__(self):
#         return '<Role({name})>'.format(name=self.name)
# 
# class User(SurrogatePK, Model, UserMixin):
#     __tablename__ = 'users'
# 
#     email = Column(db.String(80), unique=True, nullable=False)
#     #: The hashed password
#     password = Column(db.String(128), nullable=True)
#     created_at = Column(db.DateTime, nullable=False, default=dt.datetime.utcnow)
#     active = Column(db.Boolean(), default=False)
#     is_admin = Column(db.Boolean(), default=False)
# 
#     confirmed_at = Column(db.DateTime, nullable=True)
# 
#     last_login_at = Column(db.DateTime())
#     current_login_at = Column(db.DateTime())
#     last_login_ip = Column(db.String(100))
#     current_login_ip = Column(db.String(100))
#     login_count = Column(db.Integer)
# 
#     roles = db.relationship('Role', secondary=roles_users, backref=db.backref('users', lazy='dynamic'), lazy='dynamic')
# 
#     main_character_id = ReferenceCol('characters', pk_name='character_id', nullable=True)
#     main_character = relationship('EveCharacter', backref='user_main_character', foreign_keys=[main_character_id])
# 
#     def set_password(self, password):
#         self.password = encrypt_password(password)
#         self.save()
# 
#     def check_password(self, value):
#         return verify_and_update_password(value, self)
# 
#     @classmethod
#     def create(self, **kwargs):
#         """Create a new record and save it the database."""
#         instance = self(**kwargs)
#         if kwargs['password']:
#             instance.password = encrypt_password(kwargs['password'])
#         return instance.save()
# 
#     @property
#     def get_ips(self):
#         return self.last_login_ip.split(', ') + self.current_login_ip.split(', ')
# 
#     def __repr__(self):
#         return '<User({name})>'.format(name=self.email)
# 
#     def __str__(self):
#         return self.email
# 
# Path: tests/factories.py
# class UserFactory(BaseFactory):
#     """User factory."""
# 
#     email = Sequence(lambda n: 'user{0}@example.com'.format(n))
#     password = PostGenerationMethodCall('set_password', 'example')
#     active = True
# 
#     class Meta:
#         """Factory configuration."""
# 
#         model = User


# Path: tests/test_models.py
import datetime as dt
import pytest
from recruit_app.user.models import Role, User
from .factories import UserFactory

# -*- coding: utf-8 -*-
"""Model unit tests."""





@pytest.mark.usefixtures('db')
class TestUser:
    """User tests."""

    def test_get_by_id(self):
        """Get user by ID."""
        user = User(email='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(email='foo@bar.com')