"""Tests for PoseVisualizer.render_frame — single annotated still.""" import os import numpy as np from formscout.types import IngestResult, Pose2DResult def _ingest(n=5, h=480, w=640): frames = [np.zeros((h, w, 3), dtype=np.uint8) for _ in range(n)] return IngestResult(frames=frames, fps=30.0, duration=n / 30.0, n_people=1, width=w, height=h) def _pose(n=5): kps = [] for i in range(n): kps.append({j: {"x": float(50 + j * 25), "y": float(80 + j * 18), "conf": 0.9} for j in range(17)}) return Pose2DResult(keypoints=kps, fps=30.0, confidence=0.9) def test_render_frame_writes_png(tmp_path): from formscout.agents.visualizer import PoseVisualizer out = str(tmp_path / "key.png") path = PoseVisualizer().render_frame(_ingest(), _pose(), frame_idx=2, layers={"skeleton"}, caption="Deep Squat — heels elevated", out_png=out) assert path == out assert os.path.exists(out) assert os.path.getsize(out) > 0 def test_render_frame_bad_index_returns_none(tmp_path): from formscout.agents.visualizer import PoseVisualizer out = str(tmp_path / "key.png") path = PoseVisualizer().render_frame(_ingest(n=3), _pose(n=3), frame_idx=99, layers={"skeleton"}, caption="", out_png=out) assert path is None