| 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() |
|
|