@@ -151,6 +151,18 @@ async def test_expression_mismatch_blocks(self, mocker):
151151 handler = self .make_dummy_handler ({"port_value" : "50" })
152152 assert await handler .accepts_port_value (self .make_dummy_event (), (None , 40 )) is False
153153
154+ async def test_expression_eval_error_blocks (self , mocker ):
155+ """Should reject when port_value expression evaluation raises ExpressionEvalException."""
156+
157+ mocker .patch ("qtoggleserver.core.ports.get_all" , return_value = [])
158+ handler = self .make_dummy_handler ({"port_value" : "50" })
159+ mocker .patch .object (
160+ handler ._filter_port_value ,
161+ "eval" ,
162+ new = mocker .AsyncMock (side_effect = expression_exceptions .ExpressionEvalException ("eval error" )),
163+ )
164+ assert await handler .accepts_port_value (self .make_dummy_event (), (None , 50 )) is False
165+
154166
155167class TestFilterEventHandlerAcceptsPort (FilterEventHandlerTestBase ):
156168 async def test_no_filter_passes (self , mock_num_port1 ):
@@ -256,6 +268,20 @@ async def test_expression_blocks(self, mock_num_port1, mocker):
256268 event = core_events .ValueChange (None , 40 , mock_num_port1 )
257269 assert await handler .accepts (event , (None , 40 ), {}, {}, {}, {}, {}) is False
258270
271+ async def test_expression_eval_error_blocks (self , mock_num_port1 , mocker ):
272+ """Should reject when filter expression evaluation raises ExpressionEvalException."""
273+
274+ mocker .patch ("qtoggleserver.core.ports.get_all" , return_value = [mock_num_port1 ])
275+ handler = ConcreteFilterEventHandler (filter = {"expression" : "GT($nid1, 50)" })
276+ handler ._prepare_filter ()
277+ mocker .patch .object (
278+ handler ._filter_expression ,
279+ "eval" ,
280+ new = mocker .AsyncMock (side_effect = expression_exceptions .ExpressionEvalException ("eval error" )),
281+ )
282+ event = core_events .ValueChange (None , 60 , mock_num_port1 )
283+ assert await handler .accepts (event , (None , 60 ), {}, {}, {}, {}, {}) is False
284+
259285 async def test_invalid_expression (self , mock_num_port1 ):
260286 """Should raise ExpressionParseError when the filter expression is syntactically invalid."""
261287
0 commit comments