@@ -42,6 +42,7 @@ def __init__(self, *, retry_strategy: retry.Strategy | None = None) -> None:
4242 mock_stub .ListComponents = mock .AsyncMock ("ListComponents" )
4343 mock_stub .ListConnections = mock .AsyncMock ("ListConnections" )
4444 mock_stub .SetPowerActive = mock .AsyncMock ("SetPowerActive" )
45+ mock_stub .SetPowerReactive = mock .AsyncMock ("SetPowerReactive" )
4546 mock_stub .AddInclusionBounds = mock .AsyncMock ("AddInclusionBounds" )
4647 mock_stub .StreamComponentData = mock .Mock ("StreamComponentData" )
4748 super ().__init__ ("grpc://mock_host:1234" , retry_strategy = retry_strategy )
@@ -607,6 +608,48 @@ async def test_set_power_grpc_error() -> None:
607608 await client .set_power (component_id = 83 , power_w = 100.0 )
608609
609610
611+ @pytest .mark .parametrize (
612+ "reactive_power_var" ,
613+ [0 , 0.0 , 12 , - 75 , 0.1 , - 0.0001 , 134.0 ],
614+ )
615+ async def test_set_reactive_power_ok (
616+ reactive_power_var : float , meter83 : microgrid_pb2 .Component
617+ ) -> None :
618+ """Test if charge is able to charge component."""
619+ client = _TestClient ()
620+ client .mock_stub .ListComponents .return_value = microgrid_pb2 .ComponentList (
621+ components = [meter83 ]
622+ )
623+
624+ await client .set_reactive_power (
625+ component_id = 83 , reactive_power_var = reactive_power_var
626+ )
627+ client .mock_stub .SetPowerReactive .assert_called_once ()
628+ call_args = client .mock_stub .SetPowerReactive .call_args [0 ]
629+ assert call_args [0 ] == microgrid_pb2 .SetPowerReactiveParam (
630+ component_id = 83 , power = reactive_power_var
631+ )
632+
633+
634+ async def test_set_reactive_power_grpc_error () -> None :
635+ """Test set_power() raises ApiClientError when the gRPC call fails."""
636+ client = _TestClient ()
637+ client .mock_stub .SetPowerReactive .side_effect = grpc .aio .AioRpcError (
638+ mock .MagicMock (name = "mock_status" ),
639+ mock .MagicMock (name = "mock_initial_metadata" ),
640+ mock .MagicMock (name = "mock_trailing_metadata" ),
641+ "fake grpc details" ,
642+ "fake grpc debug_error_string" ,
643+ )
644+ with pytest .raises (
645+ ApiClientError ,
646+ match = r"Failed calling 'SetPowerReactive' on 'grpc://mock_host:1234': .* "
647+ r"<status=<MagicMock name='mock_status\.name' id='.*'>>: fake grpc details "
648+ r"\(fake grpc debug_error_string\)" ,
649+ ):
650+ await client .set_reactive_power (component_id = 83 , reactive_power_var = 100.0 )
651+
652+
610653@pytest .mark .parametrize (
611654 "bounds" ,
612655 [
0 commit comments