from app.config import Settings def test_settings_use_t01_defaults(monkeypatch): monkeypatch.delenv("APP_ENV", raising=False) monkeypatch.delenv("DATABASE_URL", raising=False) monkeypatch.delenv("TIKHUB_BASE_URL", raising=False) monkeypatch.delenv("AI_PROVIDER", raising=False) settings = Settings(_env_file=None) assert settings.app_env == "development" assert settings.database_url == "sqlite:///data/app.db" assert settings.tikhub_base_url == "https://api.tikhub.io" assert settings.ai_provider == "openai-compatible" def test_settings_read_environment_overrides(monkeypatch): monkeypatch.setenv("APP_ENV", "test") monkeypatch.setenv("DATABASE_URL", "sqlite:///:memory:") monkeypatch.setenv("TIKHUB_API_KEY", "test-token") monkeypatch.setenv("AI_API_KEY", "test-ai-key") settings = Settings(_env_file=None) assert settings.app_env == "test" assert settings.database_url == "sqlite:///:memory:" assert settings.tikhub_api_key == "test-token" assert settings.ai_api_key == "test-ai-key" def test_settings_include_t02_defaults(monkeypatch): monkeypatch.delenv("AI_BATCH_SIZE", raising=False) monkeypatch.delenv("AI_CONCURRENCY", raising=False) monkeypatch.delenv("AI_MAX_RETRIES", raising=False) monkeypatch.delenv("AI_TIMEOUT_SECONDS", raising=False) monkeypatch.delenv("HTTP_TIMEOUT_SECONDS", raising=False) monkeypatch.delenv("HTTP_MAX_RETRIES", raising=False) monkeypatch.delenv("CRAWL_PAGE_INTERVAL_SECONDS", raising=False) settings = Settings(_env_file=None) assert settings.ai_batch_size == 20 assert settings.ai_concurrency == 2 assert settings.ai_max_retries == 3 assert settings.ai_timeout_seconds == 30 assert settings.http_timeout_seconds == 20 assert settings.http_max_retries == 3 assert settings.crawl_page_interval_seconds == 1.5 def test_settings_read_crawl_page_interval_from_environment(monkeypatch): monkeypatch.setenv("CRAWL_PAGE_INTERVAL_SECONDS", "0.25") settings = Settings(_env_file=None) assert settings.crawl_page_interval_seconds == 0.25 def test_ai_concurrency_has_hard_upper_bound(monkeypatch): monkeypatch.setenv("AI_CONCURRENCY", "4") settings = Settings(_env_file=None) assert settings.ai_concurrency == 3 def test_task_limit_ranges_are_available_on_settings(): settings = Settings(_env_file=None) assert settings.hot_limit_min == 1 assert settings.hot_limit_max == 10 assert settings.item_limit_per_hot_min == 1 assert settings.item_limit_per_hot_max == 10 assert settings.comment_limit_per_item_min == 10 assert settings.comment_limit_per_item_max == 100