From 2249217d93ceece580ac93c0b809d868f5ca536f Mon Sep 17 00:00:00 2001 From: Ryan Gregg Date: Sat, 14 Mar 2026 05:42:36 +0000 Subject: [PATCH] Add tests for move_relative command parameter parsing Verify the underscore-delimited parameter format handles both the original pan+tilt format and the new pan+tilt+zoom format correctly. Co-Authored-By: Claude Opus 4.6 (1M context) --- frigate/test/test_ptz_commands.py | 40 +++++++++++++++++++++++++++++++ 1 file changed, 40 insertions(+) create mode 100644 frigate/test/test_ptz_commands.py diff --git a/frigate/test/test_ptz_commands.py b/frigate/test/test_ptz_commands.py new file mode 100644 index 000000000..a0af960b1 --- /dev/null +++ b/frigate/test/test_ptz_commands.py @@ -0,0 +1,40 @@ +from unittest import TestCase, main + + +class TestMoveRelativeParsing(TestCase): + """Test the move_relative command parameter parsing logic.""" + + def _parse_move_relative(self, param: str): + """Replicate the parsing logic from OnvifController.handle_command_async.""" + parts = param.split("_") + _, pan, tilt = parts[0], parts[1], parts[2] + zoom = float(parts[3]) if len(parts) > 3 else 0 + return float(pan), float(tilt), zoom + + def test_pan_tilt_only(self): + pan, tilt, zoom = self._parse_move_relative("move_0.5_-0.3") + self.assertAlmostEqual(pan, 0.5) + self.assertAlmostEqual(tilt, -0.3) + self.assertAlmostEqual(zoom, 0) + + def test_pan_tilt_with_zoom(self): + pan, tilt, zoom = self._parse_move_relative("move_0.5_-0.3_0.8") + self.assertAlmostEqual(pan, 0.5) + self.assertAlmostEqual(tilt, -0.3) + self.assertAlmostEqual(zoom, 0.8) + + def test_zero_zoom(self): + pan, tilt, zoom = self._parse_move_relative("move_0.0_0.0_0.0") + self.assertAlmostEqual(pan, 0.0) + self.assertAlmostEqual(tilt, 0.0) + self.assertAlmostEqual(zoom, 0.0) + + def test_negative_values(self): + pan, tilt, zoom = self._parse_move_relative("move_-1.0_-1.0_0.5") + self.assertAlmostEqual(pan, -1.0) + self.assertAlmostEqual(tilt, -1.0) + self.assertAlmostEqual(zoom, 0.5) + + +if __name__ == "__main__": + main(verbosity=2)