import sys import pytest from pathlib import Path # Add backend to path sys.path.insert(0, str(Path(__file__).parent.parent)) from sqlalchemy import create_engine from sqlalchemy.orm import sessionmaker # NOTE: This import will fail until models are created in Task 2.1 # This is expected behavior - the models module doesn't exist yet from app.models import Base @pytest.fixture(scope="function") def db_path(tmp_path): """临时数据库路径.""" return tmp_path / "test.db" @pytest.fixture(scope="function") def db_engine(db_path): """临时数据库引擎.""" engine = create_engine(f"sqlite:///{db_path}", connect_args={"check_same_thread": False}) Base.metadata.create_all(engine) yield engine engine.dispose() @pytest.fixture(scope="function") def db_session(db_engine): """临时数据库会话.""" SessionLocal = sessionmaker(bind=db_engine, autocommit=False, autoflush=False) session = SessionLocal() yield session session.close() @pytest.fixture(scope="function") def test_encrypt_key(): """测试加密密钥.""" import base64 return base64.b64encode(b'test-key-32-bytes-long-123456789').decode() @pytest.fixture(scope="function") def test_env_vars(db_path, test_encrypt_key, monkeypatch): """设置测试环境变量.""" # Clear global settings to ensure fresh config import app.config app.config._settings = None monkeypatch.setenv("GM_ENCRYPT_KEY", test_encrypt_key) monkeypatch.setenv("GM_API_TOKEN", "test-token") monkeypatch.setenv("GM_DATA_DIR", str(db_path.parent)) return { "GM_ENCRYPT_KEY": test_encrypt_key, "GM_API_TOKEN": "test-token", }