reachy_mini_hermes / tests /test_camera_ui.py
Timbo89's picture
Publish public companion experience from c47252b6
b35c494 verified
Raw
History Blame Contribute Delete
3.29 kB
from __future__ import annotations
from pathlib import Path
ROOT = Path(__file__).resolve().parents[1]
STATIC = ROOT / "reachy_mini_hermes" / "static"
def test_robot_tab_contains_explicit_local_live_camera_controls() -> None:
html = (STATIC / "index.html").read_text()
assert 'id="reachy-camera-video"' in html
assert 'class="camera-vision-overlay"' in html
assert 'id="camera-vision-timecode"' in html
assert "HERMES VISION" in html
assert "LOCAL OPTIC" in html
assert "PRIVATE LINK" in html
assert 'id="camera-live-start"' in html
assert 'id="camera-live-stop"' in html
assert 'id="camera-live-fullscreen"' in html
assert 'id="camera_feed_enabled"' in html
assert "never sent to Hermes or OpenAI" in html
assert html.index('/static/gstwebrtc-api.js') < html.index('/static/camera.js')
assert html.index('/static/camera.js') < html.index('/static/main.js')
def test_camera_viewer_uses_private_webrtc_without_public_stun_or_audio() -> None:
camera = (STATIC / "camera.js").read_text()
assert 'window.location.protocol === "https:" ? "wss" : "ws"' in camera
assert 'signalingServerUrl: `${signalingScheme}://${window.location.hostname}:8443`' in camera
assert "webrtcConfig: { iceServers: [] }" in camera
assert "stun:" not in camera
assert "track.enabled = false" in camera
assert 'state.powerMode !== "awake"' in camera
assert 'window.addEventListener("pagehide"' in camera
assert 'document.addEventListener("visibilitychange"' in camera
assert 'state.api._channel?.close' in camera
assert 'name === "reachymini"' in camera
assert 'producer?.id !== state.producerId' in camera
assert "No frames are sent to Hermes or OpenAI" in camera
assert "startVisionOverlay()" in camera
assert "stopVisionOverlay()" in camera
assert 'byId("camera-vision-timecode")' in camera
def test_camera_vision_overlay_is_visual_only_and_non_interactive() -> None:
style = (STATIC / "style.css").read_text()
assert ".camera-vision-overlay" in style
assert "pointer-events: none" in style
assert ".camera-viewer.live .camera-vision-overlay" in style
assert ".vision-reticle" in style
assert ".vision-scanline" in style
def test_live_camera_is_opt_in_and_stops_for_privacy_transitions() -> None:
main = (STATIC / "main.js").read_text()
config = (ROOT / "reachy_mini_hermes" / "config.py").read_text()
notices = (ROOT / "THIRD_PARTY_NOTICES.md").read_text()
bundled_api = (STATIC / "gstwebrtc-api.js").read_text()[:1000]
assert "camera_feed_enabled: bool = False" in config
assert "enabled: !kidsActive && Boolean(payload.config?.camera_feed_enabled)" in main
assert 'mode !== "awake" && window.ReachyCamera?.isActive()' in main
assert "Camera stopped because Hermes status is unavailable" in main
assert "Camera stopped before stopping the voice app" in main
assert "Camera stopped when leaving the Robot tab" in main
assert "MPL-2.0" in bundled_api
assert "BSD 3-Clause" in bundled_api
assert "Mozilla Public License 2.0" in notices
assert "Redistribution and use in source and binary forms" in notices
assert 'THIS SOFTWARE IS PROVIDED BY THE COPYRIGHT HOLDERS AND CONTRIBUTORS "AS IS"' in notices