| """Tests for PdfReportAgent — no GPU, no model downloads.""" |
| import os |
|
|
| from formscout.types import ( |
| ReportResult, SessionEntry, MovementResult, BiomechFeatures, ScoreResult, JudgeResult, |
| ) |
|
|
|
|
| def _entry(test_name="deep_squat", score=2, needs_human=False): |
| movement = MovementResult(test_name=test_name, side="na", confidence=1.0) |
| features = BiomechFeatures( |
| test_name=test_name, view="2d", side="na", |
| angles={"left_knee_flexion_deg": 95.0}, alignments={"knees_tracking_over_feet": False}, |
| symmetry_delta=None, timing={"deepest_frame": 1}, confidence=0.9, |
| ) |
| rubric = ScoreResult(score=2, rationale="rubric ok", confidence=0.8) |
| judge = JudgeResult(score=None if needs_human else score, rationale="judge rationale", |
| compensation_tags=["heels elevated"], corrective_hint="ankle mobility", |
| confidence=0.85, needs_human=needs_human) |
| return SessionEntry( |
| test_name=test_name, side="na", score=None if needs_human else score, |
| needs_human=needs_human, rationale="judge rationale", |
| compensation_tags=["heels elevated"], corrective_hint="ankle mobility", |
| measurements={"left_knee_flexion_deg": 95.0, "knees_tracking_over_feet": False}, |
| confidence=0.85, view="2d", keyframe_path=None, |
| movement=movement, features=features, rubric_score=rubric, judge=judge, |
| ) |
|
|
|
|
| def _report(composite=2): |
| return ReportResult( |
| per_test=[], composite=composite, asymmetries=[], |
| overlay_video_path=None, pdf_path=None, |
| low_confidence_flags=[], disagreement_flags=[], |
| ) |
|
|
|
|
| def test_pdf_is_created(tmp_path): |
| from formscout.agents.pdf_report import PdfReportAgent |
| path = PdfReportAgent().run(_report(2), [_entry()], str(tmp_path)) |
| assert path is not None |
| assert os.path.exists(path) |
| assert os.path.getsize(path) > 1000 |
| with open(path, "rb") as f: |
| assert f.read(5) == b"%PDF-" |
|
|
|
|
| def test_pdf_handles_incomplete_composite(tmp_path): |
| from formscout.agents.pdf_report import PdfReportAgent |
| path = PdfReportAgent().run(_report(None), [_entry(needs_human=True)], str(tmp_path)) |
| assert path is not None and os.path.exists(path) |
|
|