@@ -26,10 +26,17 @@ def test_camera_snapshot_uses_current_unit_and_experiment(monkeypatch: pytest.Mo
2626 )
2727 monkeypatch .setattr (camera_snapshot , "managed_lifecycle" , lifecycle )
2828
29- def capture (unit : str , * , experiment : str | None , capture_reason : str ) -> CameraStillMetadata :
29+ def capture (
30+ unit : str ,
31+ * ,
32+ experiment : str | None ,
33+ capture_reason : str ,
34+ image_id : str | None ,
35+ ) -> CameraStillMetadata :
3036 captured ["unit" ] = unit
3137 captured ["experiment" ] = experiment
3238 captured ["capture_reason" ] = capture_reason
39+ captured ["image_id" ] = image_id
3340 return metadata
3441
3542 monkeypatch .setattr (camera_snapshot , "capture_camera_still" , capture )
@@ -39,5 +46,42 @@ def capture(unit: str, *, experiment: str | None, capture_reason: str) -> Camera
3946 "unit" : "unit-a" ,
4047 "experiment" : "experiment-a" ,
4148 "capture_reason" : "manual" ,
49+ "image_id" : None ,
4250 }
4351 lifecycle .assert_called_once_with ("unit-a" , "experiment-a" , "camera_snapshot" )
52+
53+
54+ def test_camera_snapshot_passes_name_as_image_id (monkeypatch : pytest .MonkeyPatch ) -> None :
55+ metadata = CameraStillMetadata (
56+ experiment = "experiment-a" ,
57+ captured_at = datetime (2026 , 7 , 13 , 12 , 0 , tzinfo = UTC ),
58+ image_id = "inoculation" ,
59+ )
60+ captured : dict [str , str | None ] = {}
61+
62+ monkeypatch .setattr (camera_snapshot , "managed_lifecycle" , lambda * _args : nullcontext ())
63+
64+ def capture (
65+ unit : str ,
66+ * ,
67+ experiment : str | None ,
68+ capture_reason : str ,
69+ image_id : str | None ,
70+ ) -> CameraStillMetadata :
71+ captured ["image_id" ] = image_id
72+ return metadata
73+
74+ monkeypatch .setattr (camera_snapshot , "capture_camera_still" , capture )
75+
76+ assert camera_snapshot .camera_snapshot ("unit-a" , "experiment-a" , name = "inoculation" ) == metadata
77+ assert captured ["image_id" ] == "inoculation"
78+
79+
80+ def test_camera_snapshot_rejects_unsafe_name_before_capture (monkeypatch : pytest .MonkeyPatch ) -> None :
81+ capture = MagicMock ()
82+ monkeypatch .setattr (camera_snapshot , "capture_camera_still" , capture )
83+
84+ with pytest .raises (ValueError , match = "Unsafe camera image name" ):
85+ camera_snapshot .camera_snapshot ("unit-a" , "experiment-a" , name = "../inoculation" )
86+
87+ capture .assert_not_called ()
0 commit comments