From a8adbee6c9de5e3e544f2947d0fb0547817ca463 Mon Sep 17 00:00:00 2001 From: giulio-leone Date: Sun, 1 Mar 2026 23:46:15 +0100 Subject: [PATCH] fix(tests): use monkeypatch for env var isolation in featherless tests Replace patch.dict with pytest monkeypatch for idiomatic env var isolation. Remove unused typing and unittest.mock imports (ruff F401). Refs: #22497 --- .../test_featherless_chat_transformation.py | 49 ++++++++++--------- 1 file changed, 25 insertions(+), 24 deletions(-) diff --git a/tests/test_litellm/llms/featherless_ai/chat/test_featherless_chat_transformation.py b/tests/test_litellm/llms/featherless_ai/chat/test_featherless_chat_transformation.py index 52d654c968e..a1240705fd8 100644 --- a/tests/test_litellm/llms/featherless_ai/chat/test_featherless_chat_transformation.py +++ b/tests/test_litellm/llms/featherless_ai/chat/test_featherless_chat_transformation.py @@ -7,8 +7,6 @@ Featherless AI is an OpenAI-compatible provider with a few customizations. import os import sys -from typing import Dict, List, Optional -from unittest.mock import patch import pytest @@ -149,40 +147,43 @@ class TestFeatherlessAIConfig: ) assert "Featherless AI doesn't support tools=" in str(excinfo.value) - def test_get_provider_info_with_featherless_ai_api_key(self): + def test_get_provider_info_with_featherless_ai_api_key(self, monkeypatch): """Test that FEATHERLESS_AI_API_KEY env var is picked up correctly""" config = FeatherlessAIConfig() - env = {k: v for k, v in os.environ.items() if not k.startswith("FEATHERLESS")} - env["FEATHERLESS_AI_API_KEY"] = "key-from-ai-env" - with patch.dict(os.environ, env, clear=True): - api_base, api_key = config._get_openai_compatible_provider_info( - api_base=None, api_key=None - ) + for key in ("FEATHERLESS_AI_API_KEY", "FEATHERLESS_API_KEY", + "FEATHERLESS_AI_API_BASE", "FEATHERLESS_API_BASE"): + monkeypatch.delenv(key, raising=False) + monkeypatch.setenv("FEATHERLESS_AI_API_KEY", "key-from-ai-env") + api_base, api_key = config._get_openai_compatible_provider_info( + api_base=None, api_key=None + ) assert api_key == "key-from-ai-env" assert api_base == "https://api.featherless.ai/v1" - def test_get_provider_info_with_legacy_featherless_api_key(self): + def test_get_provider_info_with_legacy_featherless_api_key(self, monkeypatch): """Test that legacy FEATHERLESS_API_KEY env var still works""" config = FeatherlessAIConfig() - env = {k: v for k, v in os.environ.items() if not k.startswith("FEATHERLESS")} - env["FEATHERLESS_API_KEY"] = "key-from-legacy-env" - with patch.dict(os.environ, env, clear=True): - api_base, api_key = config._get_openai_compatible_provider_info( - api_base=None, api_key=None - ) + for key in ("FEATHERLESS_AI_API_KEY", "FEATHERLESS_API_KEY", + "FEATHERLESS_AI_API_BASE", "FEATHERLESS_API_BASE"): + monkeypatch.delenv(key, raising=False) + monkeypatch.setenv("FEATHERLESS_API_KEY", "key-from-legacy-env") + api_base, api_key = config._get_openai_compatible_provider_info( + api_base=None, api_key=None + ) assert api_key == "key-from-legacy-env" assert api_base == "https://api.featherless.ai/v1" - def test_get_provider_info_prefers_featherless_ai_key_over_legacy(self): + def test_get_provider_info_prefers_featherless_ai_key_over_legacy(self, monkeypatch): """Test that FEATHERLESS_AI_API_KEY takes precedence over FEATHERLESS_API_KEY""" config = FeatherlessAIConfig() - env = {k: v for k, v in os.environ.items() if not k.startswith("FEATHERLESS")} - env["FEATHERLESS_AI_API_KEY"] = "preferred-key" - env["FEATHERLESS_API_KEY"] = "legacy-key" - with patch.dict(os.environ, env, clear=True): - _, api_key = config._get_openai_compatible_provider_info( - api_base=None, api_key=None - ) + for key in ("FEATHERLESS_AI_API_KEY", "FEATHERLESS_API_KEY", + "FEATHERLESS_AI_API_BASE", "FEATHERLESS_API_BASE"): + monkeypatch.delenv(key, raising=False) + monkeypatch.setenv("FEATHERLESS_AI_API_KEY", "preferred-key") + monkeypatch.setenv("FEATHERLESS_API_KEY", "legacy-key") + _, api_key = config._get_openai_compatible_provider_info( + api_base=None, api_key=None + ) assert api_key == "preferred-key" def test_default_api_base(self):