from __future__ import annotations from collections.abc import Generator import os import pytest from gitea_codex_bot.config import get_settings from gitea_codex_bot.db import Base, get_engine, get_session_factory @pytest.fixture(autouse=True) def _env_defaults(monkeypatch: pytest.MonkeyPatch, tmp_path, request: pytest.FixtureRequest) -> Generator[None, None, None]: monkeypatch.setenv("GITEA_BASE_URL", "https://gitea.test") monkeypatch.setenv("GITEA_TOKEN", "token") monkeypatch.setenv("GITEA_BOT_USERNAME", "codex-bot") monkeypatch.setenv("GITEA_WEBHOOK_SECRET", "secret") monkeypatch.setenv("OPENAI_API_KEY", "openai-key") monkeypatch.setenv("CODEX_AUTH_MODE", "api_key") monkeypatch.delenv("CODEX_AUTH_JSON_PATH", raising=False) monkeypatch.setenv("ALLOWED_REPOS", "acme/repo") monkeypatch.setenv("COOLDOWN_SECONDS", "60") monkeypatch.setenv("WEBHOOK_MODE", "repo") monkeypatch.setenv("DB_HOST", "localhost") monkeypatch.setenv("DB_PORT", "3306") monkeypatch.setenv("DB_NAME", "ignored") monkeypatch.setenv("DB_USER", "ignored") monkeypatch.setenv("DB_PASSWORD", "ignored") database_url = os.getenv("TEST_DATABASE_URL", "").strip() or f"sqlite+pysqlite:///{tmp_path / 'test.db'}" monkeypatch.setenv("DATABASE_URL", database_url) monkeypatch.setenv("WORKDIR", str(tmp_path / "work")) get_settings.cache_clear() get_engine.cache_clear() get_session_factory.cache_clear() engine = get_engine() skip_schema = request.node.get_closest_marker("no_schema") is not None if not skip_schema: Base.metadata.create_all(bind=engine) yield if not skip_schema: Base.metadata.drop_all(bind=engine) get_settings.cache_clear() get_engine.cache_clear() get_session_factory.cache_clear()