"""Tests for Pose2DAgent — model-dependent, skips if YOLO unavailable.""" import pytest import numpy as np from formscout.types import IngestResult, Pose2DResult def _blank_ingest(n_frames=5, w=640, h=480): frames = [np.zeros((h, w, 3), dtype=np.uint8) for _ in range(n_frames)] return IngestResult( frames=frames, fps=30.0, duration=n_frames / 30.0, n_people=1, width=w, height=h, ) @pytest.fixture def pose2d_agent(): """Create Pose2DAgent, skip if model unavailable.""" try: from formscout.agents.pose2d import Pose2DAgent agent = Pose2DAgent() return agent except Exception as e: pytest.skip(f"Pose2D model unavailable: {e}") class TestPose2DAgent: def test_returns_typed_result(self, pose2d_agent): result = pose2d_agent.run(_blank_ingest()) assert isinstance(result, Pose2DResult) assert isinstance(result.keypoints, list) assert result.fps == pytest.approx(30.0) def test_keypoints_per_frame(self, pose2d_agent): ingest = _blank_ingest(n_frames=3) result = pose2d_agent.run(ingest) assert len(result.keypoints) == 3 for frame_kps in result.keypoints: assert isinstance(frame_kps, dict) def test_graceful_on_empty_frames(self, pose2d_agent): empty = IngestResult( frames=[], fps=30.0, duration=0.0, n_people=0, width=640, height=480, ) result = pose2d_agent.run(empty) assert result.confidence == 0.0 assert "no frames" in result.notes.lower()