clarify-rl / tests /test_user_simulator.py
Anurag Agarwal
ClarifyRL: initial HF Space deploy
2414d31
"""Tests for server.user_simulator — keyword matching + answer generation."""
from __future__ import annotations
import pytest
from server.scenarios import FIELD_VOCAB, TASK_FIELDS
from server.user_simulator import FIELD_KEYWORDS, answer, format_answer, match_field
class TestFieldKeywordCoverage:
@pytest.mark.parametrize("family", TASK_FIELDS.keys())
def test_every_field_reachable(self, family):
for field in TASK_FIELDS[family]:
assert field in FIELD_KEYWORDS, (
f"FIELD_KEYWORDS missing entry for {family}.{field}"
)
assert len(FIELD_KEYWORDS[field]) > 0, (
f"FIELD_KEYWORDS[{field}] has no keywords"
)
class TestMatchField:
def test_stack_matches(self):
assert match_field("what stack should I use?", ["stack", "scale"]) == "stack"
def test_no_match(self):
assert match_field("tell me a joke", ["stack", "scale"]) is None
def test_longest_keyword_wins(self):
result = match_field("what's wrong with the order?", ["item_issue", "order_id"])
assert result == "item_issue"
def test_restricted_to_allowed_keys(self):
assert match_field("what stack?", ["scale", "auth"]) is None
class TestFormatAnswer:
def test_ends_with_punctuation(self):
text = format_answer("stack", "python+fastapi", "coding_requirements")
assert text.endswith(".")
def test_value_appears(self):
text = format_answer("order_id", "#4521", "support_triage")
assert "#4521" in text
class TestAnswer:
def test_known_field(self):
profile = {"stack": "python+fastapi", "scale": "1k users"}
text, matched = answer("what stack?", profile, "coding_requirements")
assert matched == "stack"
assert "python+fastapi" in text
def test_unknown_question(self):
profile = {"stack": "go+gin"}
text, matched = answer("tell me about your cat", profile, "coding_requirements")
assert matched is None
assert "preference" in text.lower() or "don't" in text.lower()
@pytest.mark.parametrize("family", TASK_FIELDS.keys())
def test_all_family_fields_answerable(self, family):
profile = {f: FIELD_VOCAB[f][0] for f in TASK_FIELDS[family]}
for field in TASK_FIELDS[family]:
kw = FIELD_KEYWORDS[field][0]
q = f"What is the {kw}?"
_, matched = answer(q, profile, family)
assert matched == field, (
f"Q='{q}' for {family}.{field} matched {matched} instead"
)