"""Tests for the camera tool.""" import base64 from unittest.mock import MagicMock import pytest from peachy.tools.camera import Camera from peachy.tools.core_tools import ToolDependencies @pytest.mark.asyncio async def test_camera_tool_returns_base64_of_sdk_jpeg() -> None: """The tool base64-encodes the JPEG bytes returned by the SDK.""" jpeg_bytes = b"\xff\xd8jpeg\xff\xd9" reachy_mini = MagicMock() reachy_mini.media.get_frame_jpeg.return_value = jpeg_bytes deps = ToolDependencies( reachy_mini=reachy_mini, movement_manager=MagicMock(), camera_enabled=True, ) result = await Camera()(deps, question="What color is this?") assert result["b64_im"] == base64.b64encode(jpeg_bytes).decode("utf-8") @pytest.mark.asyncio async def test_camera_tool_reports_error_when_no_frame() -> None: """With no frame available the tool returns an error.""" reachy_mini = MagicMock() reachy_mini.media.get_frame_jpeg.return_value = None deps = ToolDependencies( reachy_mini=reachy_mini, movement_manager=MagicMock(), camera_enabled=True, ) result = await Camera()(deps, question="What color is this?") assert "error" in result @pytest.mark.asyncio async def test_camera_tool_reports_error_when_camera_disabled() -> None: """With the camera disabled the tool returns an error and never reads a frame.""" reachy_mini = MagicMock() deps = ToolDependencies( reachy_mini=reachy_mini, movement_manager=MagicMock(), camera_enabled=False, ) result = await Camera()(deps, question="What color is this?") assert "error" in result reachy_mini.media.get_frame_jpeg.assert_not_called()