1010
1111import async_solipsism
1212import pytest
13+ import time_machine
1314from frequenz .channels import Receiver
1415from frequenz .client .microgrid import EVChargerCableState , EVChargerComponentState
1516from pytest_mock import MockerFixture
1617
1718from frequenz .sdk import microgrid
1819from frequenz .sdk .actor import ResamplerConfig , power_distributing
19- from frequenz .sdk .actor .power_distributing import (
20- ComponentPoolStatus ,
21- PowerDistributingActor ,
22- )
23- from frequenz .sdk .actor .power_distributing ._component_managers import EVChargerManager
24- from frequenz .sdk .actor .power_distributing ._component_managers ._ev_charger_manager ._config import (
25- EVDistributionConfig ,
26- )
20+ from frequenz .sdk .actor .power_distributing import ComponentPoolStatus
2721from frequenz .sdk .actor .power_distributing ._component_pool_status_tracker import (
2822 ComponentPoolStatusTracker ,
2923)
@@ -107,24 +101,6 @@ async def _patch_power_distributing_actor(
107101 self ,
108102 mocker : MockerFixture ,
109103 ) -> None :
110- dp = typing .cast (_DataPipeline , microgrid ._data_pipeline ._DATA_PIPELINE )
111- pda = typing .cast (
112- PowerDistributingActor , dp ._ev_power_wrapper ._power_distributing_actor
113- )
114- cm = typing .cast (
115- EVChargerManager ,
116- pda ._component_manager ,
117- )
118- mocker .patch (
119- "frequenz.sdk.microgrid._data_pipeline._DATA_PIPELINE._ev_power_wrapper"
120- "._power_distributing_actor._component_manager._config" ,
121- EVDistributionConfig (
122- component_ids = cm ._config .component_ids ,
123- initial_current = cm ._config .initial_current ,
124- min_current = cm ._config .min_current ,
125- increase_power_interval = timedelta (seconds = 0.12 ),
126- ),
127- )
128104 mocker .patch (
129105 "frequenz.sdk.microgrid._data_pipeline._DATA_PIPELINE._ev_power_wrapper"
130106 "._power_distributing_actor._component_manager._voltage_cache.get" ,
@@ -209,10 +185,12 @@ async def test_setting_power(
209185 mocker : MockerFixture ,
210186 ) -> None :
211187 """Test setting power."""
188+ traveller = time_machine .travel (datetime (2012 , 12 , 12 ))
189+ mock_time = traveller .start ()
190+
212191 set_power = typing .cast (
213192 AsyncMock , microgrid .connection_manager .get ().api_client .set_power
214193 )
215-
216194 await self ._init_ev_chargers (mocks )
217195 ev_charger_pool = microgrid .new_ev_charger_pool (priority = 5 )
218196 await self ._patch_ev_pool_status (mocks , mocker )
@@ -235,6 +213,7 @@ async def test_setting_power(
235213 self ._assert_report (
236214 await bounds_rx .receive (), power = 40000.0 , lower = 0.0 , upper = 44160.0
237215 )
216+ mock_time .shift (timedelta (seconds = 60 ))
238217 await asyncio .sleep (0.15 )
239218
240219 # Components are set initial power
@@ -244,6 +223,7 @@ async def test_setting_power(
244223 # All available power is allocated. 3 chargers are set to 11040.0
245224 # and the last one is set to 6880.0
246225 set_power .reset_mock ()
226+ mock_time .shift (timedelta (seconds = 60 ))
247227 await asyncio .sleep (0.15 )
248228 assert set_power .call_count == 4
249229
@@ -262,3 +242,5 @@ async def test_setting_power(
262242 stopped_evs = [x .args for x in set_power .call_args_list if x .args [1 ] == 0.0 ]
263243 assert 1 == len (stopped_evs )
264244 assert stopped_evs [0 ][0 ] in [evc [0 ] for evc in evs_11040 ]
245+
246+ traveller .stop ()
0 commit comments