emerald-rag / tests /test_helper.py
ben-wang's picture
Create test_helper.py
cfe8859 verified
Raw
History Blame Contribute Delete
2.32 kB
import pytest
from unittest.mock import MagicMock, patch
from helpers import create_prompt, find_similar_documents, load_vector_store, MANUAL_PATH
def test_load_vector_store():
with patch("helpers.Chroma") as mocked_db:
mocked_db.return_value = MagicMock()
db = load_vector_store(MANUAL_PATH)
assert db is not None
mocked_db.from_documents.assert_called_once()
def test_find_similar_documents():
# 1. Setup: Create a mock vector store
mock_vector_store = MagicMock()
# 2. Define fake documents to be returned
mock_doc = MagicMock()
mock_doc.page_content = "Pikachu is a mouse Pokémon."
mock_vector_store.similarity_search.return_value = [mock_doc]
# 3. Call the function
query = "Who is Pikachu?"
results = find_similar_documents(mock_vector_store, query, k=1)
# 4. Assertions
# Check that similarity_search was called with the right arguments
mock_vector_store.similarity_search.assert_called_once_with(query, k=1)
# Check the return value
assert len(results) == 1
assert results[0].page_content == "Pikachu is a mouse Pokémon."
def test_create_prompt():
# 1. Setup mock context (list of Document-like objects)
mock_doc1 = MagicMock()
mock_doc1.page_content = "Rayquaza lives in the Sky Pillar."
mock_doc2 = MagicMock()
mock_doc2.page_content = "Use a Master Ball for a 100% catch rate."
context = [mock_doc1, mock_doc2]
message = "Where can I find Rayquaza?"
history = [] # Currently unused in your helpers.py but required by signature
# 2. Call the function
prompt = create_prompt(message, history, context)
# 3. Assertions
# Check if the persona is present
assert "Pokémon Emerald Research Assistant" in prompt
# Check if both context pieces are joined by the separator "---"
assert "Rayquaza lives in the Sky Pillar." in prompt
assert "---" in prompt
assert "Use a Master Ball for a 100% catch rate." in prompt
# Check if the user message is included
assert "Where can I find Rayquaza?" in prompt
# Check if Pydantic format instructions are present
# (The parser adds specific JSON schema text)
assert "json" in prompt.lower()
assert "properties" in prompt.lower()