# tests/unit/models/database/test_user.py """Unit tests for User database model.""" import pytest from sqlalchemy.exc import IntegrityError from models.database.user import User @pytest.mark.unit @pytest.mark.database class TestUserModel: """Test User model.""" def test_user_creation(self, db): """Test User model creation and relationships.""" user = User( email="db_test@example.com", username="dbtest", hashed_password="hashed_password_123", role="user", is_active=True, ) db.add(user) db.commit() db.refresh(user) assert user.id is not None assert user.email == "db_test@example.com" assert user.username == "dbtest" assert user.role == "user" assert user.is_active is True assert user.created_at is not None assert user.updated_at is not None def test_user_email_uniqueness(self, db): """Test email unique constraint.""" user1 = User( email="unique@example.com", username="user1", hashed_password="hash1", ) db.add(user1) db.commit() # Duplicate email should raise error with pytest.raises(IntegrityError): user2 = User( email="unique@example.com", username="user2", hashed_password="hash2", ) db.add(user2) db.commit() def test_user_username_uniqueness(self, db): """Test username unique constraint.""" user1 = User( email="user1@example.com", username="sameusername", hashed_password="hash1", ) db.add(user1) db.commit() # Duplicate username should raise error with pytest.raises(IntegrityError): user2 = User( email="user2@example.com", username="sameusername", hashed_password="hash2", ) db.add(user2) db.commit() def test_user_default_values(self, db): """Test User model default values.""" user = User( email="defaults@example.com", username="defaultuser", hashed_password="hash", ) db.add(user) db.commit() db.refresh(user) assert user.is_active is True # Default assert user.role == "vendor" # Default (UserRole.VENDOR) def test_user_optional_fields(self, db): """Test User model with optional fields.""" user = User( email="optional@example.com", username="optionaluser", hashed_password="hash", first_name="John", last_name="Doe", ) db.add(user) db.commit() db.refresh(user) assert user.first_name == "John" assert user.last_name == "Doe"