1414from pytest_mock import MockerFixture
1515
1616from frequenz .sdk import microgrid
17- from frequenz .sdk .actor import ResamplerConfig
17+ from frequenz .sdk .actor import ResamplerConfig , _power_managing
1818from frequenz .sdk .actor .power_distributing import BatteryStatus
1919from frequenz .sdk .actor .power_distributing ._battery_pool_status import BatteryPoolStatus
2020from frequenz .sdk .timeseries import Power
@@ -136,6 +136,17 @@ async def _init_data_for_inverters(self, mocks: Mocks) -> None:
136136 0.05 ,
137137 )
138138
139+ def _make_report (
140+ self , * , power : float , lower : float , upper : float
141+ ) -> _power_managing .Report :
142+ return _power_managing .Report (
143+ target_power = Power .from_watts (power ),
144+ available_bounds = _power_managing .Bounds (
145+ lower = Power .from_watts (lower ),
146+ upper = Power .from_watts (upper ),
147+ ),
148+ )
149+
139150 async def test_case_1 (
140151 self ,
141152 mocks : Mocks ,
@@ -161,10 +172,17 @@ async def test_case_1(
161172 #
162173 # It will be replaced by a reporting streaming from the PowerManager in a
163174 # subsequent commit.
164- results_rx = battery_pool .power_distribution_results ()
175+ bounds_rx = battery_pool .power_bounds ().new_receiver ()
176+
177+ assert await bounds_rx .receive () == self ._make_report (
178+ power = 0.0 , lower = - 4000.0 , upper = 4000.0
179+ )
165180
166181 await battery_pool .set_power (Power .from_watts (1000.0 ))
167- await results_rx .receive ()
182+
183+ assert await bounds_rx .receive () == self ._make_report (
184+ power = 1000.0 , lower = - 4000.0 , upper = 4000.0
185+ )
168186
169187 assert set_power .call_count == 4
170188 assert set_power .call_args_list == [
@@ -187,11 +205,20 @@ async def test_case_2(self, mocks: Mocks, mocker: MockerFixture) -> None:
187205 await self ._init_data_for_inverters (mocks )
188206
189207 battery_pool_1 = microgrid .battery_pool (set (mocks .microgrid .battery_ids [:2 ]))
208+ bounds_1_rx = battery_pool_1 .power_bounds ().new_receiver ()
190209 battery_pool_2 = microgrid .battery_pool (set (mocks .microgrid .battery_ids [2 :]))
210+ bounds_2_rx = battery_pool_2 .power_bounds ().new_receiver ()
191211
192- results_rx = battery_pool_1 .power_distribution_results ()
212+ assert await bounds_1_rx .receive () == self ._make_report (
213+ power = 0.0 , lower = - 2000.0 , upper = 2000.0
214+ )
215+ assert await bounds_2_rx .receive () == self ._make_report (
216+ power = 0.0 , lower = - 2000.0 , upper = 2000.0
217+ )
193218 await battery_pool_1 .set_power (Power .from_watts (1000.0 ))
194- await results_rx .receive ()
219+ assert await bounds_1_rx .receive () == self ._make_report (
220+ power = 1000.0 , lower = - 2000.0 , upper = 2000.0
221+ )
195222 assert set_power .call_count == 2
196223 assert set_power .call_args_list == [
197224 mocker .call (inv_id , 500.0 )
@@ -200,7 +227,9 @@ async def test_case_2(self, mocks: Mocks, mocker: MockerFixture) -> None:
200227 set_power .reset_mock ()
201228
202229 await battery_pool_2 .set_power (Power .from_watts (1000.0 ))
203- await results_rx .receive ()
230+ assert await bounds_2_rx .receive () == self ._make_report (
231+ power = 1000.0 , lower = - 2000.0 , upper = 2000.0
232+ )
204233 assert set_power .call_count == 2
205234 assert set_power .call_args_list == [
206235 mocker .call (inv_id , 500.0 )
@@ -222,15 +251,28 @@ async def test_case_3(self, mocks: Mocks, mocker: MockerFixture) -> None:
222251 await self ._init_data_for_inverters (mocks )
223252
224253 battery_pool_1 = microgrid .battery_pool ()
254+ bounds_1_rx = battery_pool_1 .power_bounds (2 ).new_receiver ()
225255 battery_pool_2 = microgrid .battery_pool ()
256+ bounds_2_rx = battery_pool_2 .power_bounds (1 ).new_receiver ()
226257
227- results_rx = battery_pool_1 .power_distribution_results ()
258+ assert await bounds_1_rx .receive () == self ._make_report (
259+ power = 0.0 , lower = - 4000.0 , upper = 4000.0
260+ )
261+ assert await bounds_2_rx .receive () == self ._make_report (
262+ power = 0.0 , lower = - 4000.0 , upper = 4000.0
263+ )
228264 await battery_pool_1 .set_power (
229265 Power .from_watts (- 1000.0 ),
230266 _priority = 2 ,
231267 _bounds = (Power .from_watts (- 1000.0 ), Power .from_watts (0.0 )),
232268 )
233- await results_rx .receive ()
269+ assert await bounds_1_rx .receive () == self ._make_report (
270+ power = - 1000.0 , lower = - 4000.0 , upper = 4000.0
271+ )
272+ assert await bounds_2_rx .receive () == self ._make_report (
273+ power = - 1000.0 , lower = - 1000.0 , upper = 0.0
274+ )
275+
234276 assert set_power .call_count == 4
235277 assert set_power .call_args_list == [
236278 mocker .call (inv_id , - 250.0 )
@@ -243,7 +285,13 @@ async def test_case_3(self, mocks: Mocks, mocker: MockerFixture) -> None:
243285 _priority = 1 ,
244286 _bounds = (Power .from_watts (0.0 ), Power .from_watts (1000.0 )),
245287 )
246- await results_rx .receive ()
288+ assert await bounds_1_rx .receive () == self ._make_report (
289+ power = 0.0 , lower = - 4000.0 , upper = 4000.0
290+ )
291+ assert await bounds_2_rx .receive () == self ._make_report (
292+ power = 0.0 , lower = - 1000.0 , upper = 0.0
293+ )
294+
247295 assert set_power .call_count == 4
248296 assert set_power .call_args_list == [
249297 mocker .call (inv_id , 0.0 ) for inv_id in mocks .microgrid .battery_inverter_ids
0 commit comments