peachy / tests /tools /test_camera.py
stephenslee's picture
Publish Peachy v0.1.0 for Reachy Mini Control
8a652b8 verified
Raw History Blame Contribute Delete
1.74 kB
"""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()