small-hackathon-trainer / tests /test_parser_fixtures.py
Lucas
Build training coach MVP
f1b0176
Raw
History Blame Contribute Delete
1.82 kB
import json
import unittest
from scripts.evaluate_parser_model import _compare_subset
from training_coach.parser import parse_model_response
from tests.fixtures.parser_acceptance import PARSER_ACCEPTANCE_FIXTURES
class ParserFixturesTest(unittest.TestCase):
def test_all_acceptance_fixtures_validate_against_parser_schema(self):
for fixture in PARSER_ACCEPTANCE_FIXTURES:
with self.subTest(fixture=fixture["name"]):
parsed = parse_model_response(json.dumps(fixture["expected"]))
self.assertEqual(parsed.check_in.raw_text, fixture["raw_text"])
def test_fixture_names_are_unique(self):
names = [fixture["name"] for fixture in PARSER_ACCEPTANCE_FIXTURES]
self.assertEqual(len(names), len(set(names)))
def test_fixture_set_covers_required_cases(self):
names = {fixture["name"] for fixture in PARSER_ACCEPTANCE_FIXTURES}
self.assertIn("short_time_poor_sleep_low_energy", names)
self.assertIn("high_energy_long_session", names)
self.assertIn("specific_pain_issue", names)
self.assertIn("ambiguous_pain_issue", names)
self.assertIn("recent_10k_context_signal", names)
def test_evaluator_allows_related_free_text_but_keeps_labels_strict(self):
self.assertEqual(
_compare_subset(
{"follow_up_questions": ["How are your legs after yesterday's run?"]},
{"follow_up_questions": ["How are your legs and energy after the run?"]},
),
[],
)
self.assertTrue(
_compare_subset(
{"context_signals": [{"label": "recent_endurance_run"}]},
{"context_signals": [{"label": "Recent Activity"}]},
)
)
if __name__ == "__main__":
unittest.main()