fix: preserve handled display cabinet cases

This commit is contained in:
2026-06-15 16:08:12 +08:00
parent 7b9ec2e148
commit 0c3895c24c
5 changed files with 223 additions and 6 deletions

View File

@@ -252,6 +252,64 @@ class AlarmSnapshotTests(unittest.TestCase):
self.assertNotEqual(encoded_frames[0].rgb, source_frame.rgb)
self.assertNotEqual(encoded_frames[0].pixel(1, 1), (0, 0, 0))
def test_capture_alert_snapshot_only_draws_alert_event_zones(self) -> None:
encoded_frames: list[Frame] = []
def fake_encode(frame: Frame, timeout_seconds: float) -> bytes:
encoded_frames.append(frame)
return b"jpeg-bytes"
def fake_upload(
image_bytes: bytes,
*,
file_name: str,
object_key_hint: str,
settings,
post_json_request=None,
post_multipart_request=None,
) -> dict[str, object]:
return {"status": "uploaded", "object_key": "uploads/alarms/zone-only.jpg", "file_name": file_name}
source_frame = Frame(width=30, height=20, rgb=b"\x00\x00\x00" * 600)
result = capture_alert_snapshot(
source_frame,
[
{
"event": "time_alarm",
"severity": "alarm",
"batch_id": "batch_1",
"camera_id": "cam_1",
"zone_id": "1",
"ts": "2026-06-09T09:00:00+00:00",
}
],
{
"alarm_snapshot_upload": {"enabled": True},
"zones": [
{
"id": "1",
"label": "区域 1",
"polygon": [[0.00, 0.00], [0.45, 0.00], [0.45, 1.00], [0.00, 1.00]],
},
{
"id": "2",
"label": "区域 2",
"polygon": [[0.55, 0.00], [1.00, 0.00], [1.00, 1.00], [0.55, 1.00]],
},
],
"trash": {"roi": [[0.45, 0.50], [0.55, 0.50], [0.55, 1.00], [0.45, 1.00]]},
},
now=datetime(2026, 6, 9, 9, 0, tzinfo=UTC),
jpeg_encoder=fake_encode,
uploader=fake_upload,
)
self.assertEqual(result["status"], "uploaded")
self.assertEqual(len(encoded_frames), 1)
self.assertNotEqual(encoded_frames[0].pixel(5, 10), (0, 0, 0))
self.assertEqual(encoded_frames[0].pixel(25, 10), (0, 0, 0))
self.assertEqual(encoded_frames[0].pixel(15, 15), (0, 0, 0))
if __name__ == "__main__":
unittest.main()