"""
Agent tests for data question answerer.
To run:
erdo agent-test tests/test_data_question_answerer.py
"""
from erdo import invoke
from erdo.test import text_contains, text_equals
# Agent key constant
AGENT_KEY = "data-question-answerer"
def agent_test_csv_sales_total():
"""Test CSV sales total aggregation."""
response = invoke(
AGENT_KEY,
messages=[{"role": "user", "content": "What were total sales in October?"}],
datasets=["sales-q4-2024"],
mode="replay",
)
assert response.success
result_text = str(response.result)
assert text_contains(result_text, "October", case_sensitive=False)
assert text_contains(result_text, "total", case_sensitive=False)
def agent_test_csv_product_breakdown():
"""Test CSV product category breakdown."""
response = invoke(
AGENT_KEY,
messages=[{"role": "user", "content": "Show sales by product category"}],
datasets=["sales-q4-2024"],
mode="replay",
)
assert response.success
result_text = str(response.result)
assert text_contains(result_text, "category", case_sensitive=False)
def agent_test_with_parameters():
"""Test passing custom parameters."""
response = invoke(
AGENT_KEY,
messages=[{"role": "user", "content": "Analyze the sales data"}],
datasets=["sales-q4-2024"],
parameters={
"analysis_type": "trend",
"time_period": "weekly"
},
mode="replay",
)
assert response.success
result_text = str(response.result)
assert text_contains(result_text, "trend", case_sensitive=False) or \
text_contains(result_text, "weekly", case_sensitive=False)
def agent_test_multi_dataset():
"""Test with multiple datasets."""
response = invoke(
AGENT_KEY,
messages=[{
"role": "user",
"content": "Is there a correlation between traffic and sales?"
}],
datasets=["sales-q4-2024", "ga-main-property"],
mode="replay",
)
assert response.success
result_text = str(response.result)
assert text_contains(result_text, "correlation", case_sensitive=False)
def agent_test_empty_result():
"""Test handling of empty results."""
response = invoke(
AGENT_KEY,
messages=[{
"role": "user",
"content": "Show products costing over $1,000,000"
}],
datasets=["sales-q4-2024"],
mode="replay",
)
assert response.success
result_text = str(response.result)
# Should gracefully indicate no results
assert text_contains(result_text, "no", case_sensitive=False)