import os import sys # Musimy dodać ścieżkę do sys.path przed importami sys.path.append(os.path.abspath(os.path.join(os.path.dirname(__file__), "../backend"))) import pytest import asyncio from dotenv import load_dotenv # Wczytujemy zmienne load_dotenv("../backend/.env") @pytest.mark.asyncio async def test_llm_fallback_resilience(): """ Test weryfikujący poprawność działania llm_router i circuit breakera. Wymusza błędy kluczy API, aby sprawdzić czy system bez przerw przełącza się na fallback. """ # Krok 0: Mock autoryzacji (lub użycie realnego tokenu jeśli to możliwe) # W testach E2E z appką w pamięci można zmockować `verify_token`. # Dla uproszczenia ustawiamy klucz na zepsuty. original_grok_key = os.environ.get("GROK_API_KEY") os.environ["GROK_API_KEY"] = "INVALID_KEY_FOR_TESTING_FALLBACK" try: from core.llm_router import get_llm from langchain_core.messages import SystemMessage, HumanMessage # Wymuszamy model Grok llm = get_llm(task_type="default") # Zapytanie powinno zawieść na Grok i pójść do Gemini res = llm.invoke( [ SystemMessage(content="Jesteś pomocnym asystentem."), HumanMessage(content="Odpowiedz słowem 'ZROZUMIANO'"), ] ) assert res.content, "Odpowiedź jest pusta, fallback nie zadziałał!" print(f"Fallback SUCCESS: Otrzymano odpowiedź: {res.content}") except Exception as e: pytest.fail(f"Fallback fail! Złapano wyjątek: {e}") finally: if original_grok_key: os.environ["GROK_API_KEY"] = original_grok_key else: del os.environ["GROK_API_KEY"] if __name__ == "__main__": asyncio.run(test_llm_fallback_resilience())