""" TDD tests for Task 1: BackupCode ORM model, password_must_change field, Settings extension. These tests should FAIL before implementation (RED phase). """ import pytest def test_backup_code_model_exists(): """BackupCode ORM model must exist and have correct tablename + columns.""" from db.models import BackupCode assert BackupCode.__tablename__ == "backup_codes" assert hasattr(BackupCode, "id") assert hasattr(BackupCode, "user_id") assert hasattr(BackupCode, "code_hash") assert hasattr(BackupCode, "used_at") def test_user_has_password_must_change(): """User model must have password_must_change column.""" from db.models import User assert hasattr(User, "password_must_change") def test_settings_has_jwt_config(): """Settings must have access_token_expire_minutes and refresh_token_expire_days.""" from config import settings assert hasattr(settings, "access_token_expire_minutes") assert settings.access_token_expire_minutes == 15 assert hasattr(settings, "refresh_token_expire_days") assert settings.refresh_token_expire_days == 30 def test_settings_has_smtp_config(): """Settings must have SMTP fields.""" from config import settings assert hasattr(settings, "smtp_host") assert hasattr(settings, "smtp_port") assert hasattr(settings, "smtp_user") assert hasattr(settings, "smtp_password") assert hasattr(settings, "smtp_from") def test_settings_has_admin_config(): """Settings must have admin bootstrap fields.""" from config import settings assert hasattr(settings, "admin_email") assert hasattr(settings, "admin_password") def test_settings_has_cors_origins(): """Settings must have cors_origins as a list with default localhost.""" from config import settings assert hasattr(settings, "cors_origins") assert isinstance(settings.cors_origins, list) assert "http://localhost:5173" in settings.cors_origins def test_backup_code_table_in_schema(db_session): """backup_codes table must be created in the SQLite test schema.""" from db.models import BackupCode import uuid # Should not raise — table must exist bc = BackupCode( id=uuid.uuid4(), user_id=uuid.uuid4(), code_hash="testhash", used_at=None, ) db_session.add(bc) # We don't commit here — just verify the model is valid