myrmidon / python /tests /server /services /test_prompts_loading.py
tek Atrust
chore(deploy): build monolithic server for Hugging Face
d5ef46f
Raw
History Blame Contribute Delete
2.44 kB
from unittest.mock import MagicMock, patch
import pytest
from src.server.services.prompt_service import PromptService
@pytest.fixture(autouse=True)
def reset_prompt_service():
"""Reset singleton between each test in this file."""
PromptService._reset_for_testing()
yield
@pytest.mark.asyncio
async def test_load_prompts_success():
"""Test successful loading of prompts from database."""
mock_supabase = MagicMock()
mock_response = MagicMock()
mock_response.data = [
{"prompt_name": "blog_post_draft", "prompt": "You are MarketBot (Blog)..."},
{"prompt_name": "sales_pitch_generation", "prompt": "You are MarketBot (Sales)..."},
{"prompt_name": "svg_logo_design", "prompt": "You are DevBot..."},
{"prompt_name": "user_story_refinement", "prompt": "You are POBot..."},
]
# Configure mock behavior for list_prompts which uses self.execute_query
mock_supabase.table.return_value.select.return_value.execute.return_value = mock_response
with patch("src.server.services.prompt_service.get_supabase_client", return_value=mock_supabase):
service = PromptService()
await service.load_prompts()
assert len(service._prompts) == 4
assert service.get_prompt("blog_post_draft") == "You are MarketBot (Blog)..."
assert service.get_prompt("svg_logo_design") == "You are DevBot..."
@pytest.mark.asyncio
async def test_load_prompts_empty_db():
"""Test behavior when database returns no prompts."""
mock_supabase = MagicMock()
mock_response = MagicMock()
mock_response.data = [] # Empty list
mock_supabase.table.return_value.select.return_value.execute.return_value = mock_response
with patch("src.server.services.prompt_service.get_supabase_client", return_value=mock_supabase):
service = PromptService()
await service.load_prompts()
# Should be empty, but service should not crash
assert len(service._prompts) == 0
# Default fallback check
assert service.get_prompt("non_existent") == "You are a helpful AI assistant."
@pytest.mark.asyncio
async def test_get_prompt_fallback():
"""Test getting a prompt that doesn't exist returns the default."""
service = PromptService()
# Manual reset just in case
service._prompts = {}
result = service.get_prompt("missing_prompt", default="Custom Default")
assert result == "Custom Default"