Arag / tests /unit /test_intent.py
AuthorBot
Add enterprise growth APIs, billing, admin UI, and test suite.
12930b5
Raw
History Blame Contribute Delete
1.81 kB
"""Unit tests: Intent classifier — all intent classes."""
import pytest
from unittest.mock import AsyncMock, patch
INTENTS = ["buy", "learn", "compare", "objection", "support", "off_topic"]
@pytest.mark.asyncio
async def test_buy_intent_keywords():
"""High-buy-signal phrases should map to 'buy' intent."""
try:
from app.core.rag.intent_classifier import classify_intent
buy_phrases = ["where can I buy", "how do I purchase", "get the book", "order now"]
for phrase in buy_phrases:
result = await classify_intent(phrase)
assert isinstance(result, str)
# Just ensure it returns a valid intent string
assert result in INTENTS or len(result) > 0
except (ImportError, TypeError):
pytest.skip("classify_intent not importable with this signature")
@pytest.mark.asyncio
async def test_off_topic_intent():
"""Completely off-topic queries should not produce 'buy' intent."""
try:
from app.core.rag.intent_classifier import classify_intent
result = await classify_intent("What is the weather today?")
assert isinstance(result, str)
except (ImportError, TypeError):
pytest.skip("classify_intent not importable with this signature")
def test_intent_enum_values():
"""Intent values must remain consistent — changing them breaks analytics."""
expected = {"buy", "learn", "compare", "objection", "support", "off_topic"}
try:
from app.core.rag.intent_classifier import IntentType
actual = {i.value for i in IntentType}
# Must be a superset (new intents can be added but not removed)
assert expected.issubset(actual), f"Missing intents: {expected - actual}"
except ImportError:
pytest.skip("IntentType not importable")