Files
AareDAQ/tests/unit/daq/test_face_detection.py
perl_d b0863e5ddb
Build and Publish / test (pull_request) Failing after 1m23s
Build and Publish / build (pull_request) Skipped
Build and Publish / Build and Deploy Docs (pull_request) Skipped
style: format with ruff
2026-07-06 11:53:49 +02:00

101 lines
3.1 KiB
Python

import types
from aarecommon.models.models import DAQOperation
from aare.daq.operations.face_detection.models import FaceDetectionResult
def test_execute_face_detection_reports_failure(monkeypatch):
from aare.daq.daq import AareDAQ
daq = object.__new__(AareDAQ)
calls = {"set_state": [], "handle_error": []}
monkeypatch.setattr(daq, "_AareDAQ__set_state", lambda state: calls["set_state"].append(state))
monkeypatch.setattr(
daq,
"_create_face_detection_service",
lambda: types.SimpleNamespace(
run=lambda **kwargs: FaceDetectionResult(
success=False,
payload={"running": False, "samples": [], "height_fit": {}, "area_fit": {}},
error=RuntimeError("fd failed"),
comment="face detection sequence failed",
)
),
)
monkeypatch.setattr(
daq, "_handle_operation_error", lambda **kwargs: calls["handle_error"].append(kwargs)
)
monkeypatch.setattr(
type(daq),
"sample",
property(lambda self: types.SimpleNamespace(sample_name="sample-1", db_id=1)),
)
result = daq._execute_face_detection(steps=7, step_size=30, report_error=True)
assert result.success is False
assert len(calls["set_state"]) == 1
assert len(calls["handle_error"]) == 1
assert calls["handle_error"][0]["operation"] == DAQOperation.FACE_CENTERING
def test_execute_face_detection_can_skip_error_reporting(monkeypatch):
from aare.daq.daq import AareDAQ
daq = object.__new__(AareDAQ)
handle_error_calls = []
monkeypatch.setattr(daq, "_AareDAQ__set_state", lambda state: None)
monkeypatch.setattr(
daq,
"_create_face_detection_service",
lambda: types.SimpleNamespace(
run=lambda **kwargs: FaceDetectionResult(
success=False,
payload={"running": False, "samples": [], "height_fit": {}, "area_fit": {}},
error=RuntimeError("fd failed"),
comment="face detection sequence failed",
)
),
)
monkeypatch.setattr(
daq, "_handle_operation_error", lambda **kwargs: handle_error_calls.append(kwargs)
)
result = daq._execute_face_detection(report_error=False)
assert result.success is False
assert handle_error_calls == []
def test_public_face_detection_uses_execute_face_detection(monkeypatch):
from aare.daq.daq import AareDAQ
daq = object.__new__(AareDAQ)
cfg = types.SimpleNamespace(try_set_busy=lambda timeout=360: None, state_busy=False)
setattr(daq, "_AareDAQ__cfg", cfg)
setattr(
daq,
"_execute_face_detection",
lambda **kwargs: FaceDetectionResult(
success=True,
payload={
"running": False,
"samples": [{"angle": 45}],
"height_fit": {},
"area_fit": {},
},
),
)
result = daq.face_detection(steps=7, step_size=30)
assert result["running"] is False
assert result["samples"] == [{"angle": 45}]
assert cfg.state_busy is False