"""Tests for Body3DAgent — graceful fallback when model unavailable.""" import numpy as np from formscout.agents.body3d import Body3DAgent from formscout.types import Body3DResult, Pose2DResult def _dummy_pose(): return Pose2DResult( keypoints=[{0: {"x": 320.0, "y": 240.0, "conf": 0.9}}], fps=30.0, confidence=0.9, ) def _dummy_frames(n=5): return [np.zeros((480, 640, 3), dtype=np.uint8) for _ in range(n)] class TestBody3DAgent: def test_disabled_returns_not_used(self): agent = Body3DAgent(enable_3d=False) result = agent.run(_dummy_pose(), masks=[], frames=_dummy_frames()) assert isinstance(result, Body3DResult) assert result.used is False assert result.joints_3d == [] def test_unavailable_checkpoint_returns_not_used(self): agent = Body3DAgent(enable_3d=True) # No checkpoint / sam-3d-body not installed → graceful fallback result = agent.run(_dummy_pose(), masks=[], frames=_dummy_frames()) assert result.used is False assert result.confidence == 0.0 def test_no_frames_returns_not_used(self): agent = Body3DAgent(enable_3d=True) result = agent.run(_dummy_pose(), masks=[], frames=[]) assert result.used is False def test_result_type(self): agent = Body3DAgent(enable_3d=False) result = agent.run(_dummy_pose(), masks=[]) assert isinstance(result, Body3DResult)