Skip to content

Commit c6a035a

Browse files
Add test for consumer power formula
Signed-off-by: Daniel Zullo <[email protected]>
1 parent 0a009a3 commit c6a035a

File tree

1 file changed

+68
-0
lines changed

1 file changed

+68
-0
lines changed

tests/timeseries/test_consumer.py

Lines changed: 68 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,68 @@
1+
# License: MIT
2+
# Copyright © 2023 Frequenz Energy-as-a-Service GmbH
3+
4+
"""Test the logical component for calculating high level consumer metrics."""
5+
6+
from contextlib import AsyncExitStack
7+
8+
from pytest_mock import MockerFixture
9+
10+
from frequenz.sdk import microgrid
11+
from frequenz.sdk.timeseries._quantities import Power
12+
13+
from .mock_microgrid import MockMicrogrid
14+
15+
16+
class TestConsumer:
17+
"""Tests for the consumer power formula."""
18+
19+
async def test_consumer_power_grid_meter(self, mocker: MockerFixture) -> None:
20+
"""Test the consumer power formula with a grid meter."""
21+
mockgrid = MockMicrogrid(grid_meter=True, mocker=mocker)
22+
mockgrid.add_batteries(2)
23+
mockgrid.add_solar_inverters(2)
24+
25+
async with mockgrid, AsyncExitStack() as stack:
26+
consumer = microgrid.consumer()
27+
stack.push_async_callback(consumer.stop)
28+
consumer_power_receiver = consumer.power.new_receiver()
29+
30+
await mockgrid.mock_resampler.send_meter_power([20.0, 2.0, 3.0, 4.0, 5.0])
31+
assert (await consumer_power_receiver.receive()).value == Power.from_watts(
32+
6.0
33+
)
34+
35+
async def test_consumer_power_no_grid_meter(self, mocker: MockerFixture) -> None:
36+
"""Test the consumer power formula without a grid meter."""
37+
mockgrid = MockMicrogrid(grid_meter=False, mocker=mocker)
38+
mockgrid.add_consumer_meters()
39+
mockgrid.add_batteries(2)
40+
mockgrid.add_solar_inverters(2)
41+
42+
async with mockgrid, AsyncExitStack() as stack:
43+
consumer = microgrid.consumer()
44+
stack.push_async_callback(consumer.stop)
45+
consumer_power_receiver = consumer.power.new_receiver()
46+
47+
await mockgrid.mock_resampler.send_meter_power([20.0, 2.0, 3.0, 4.0, 5.0])
48+
assert (await consumer_power_receiver.receive()).value == Power.from_watts(
49+
20.0
50+
)
51+
52+
async def test_consumer_power_no_grid_meter_no_consumer_meter(
53+
self, mocker: MockerFixture
54+
) -> None:
55+
"""Test the consumer power formula without a grid meter."""
56+
mockgrid = MockMicrogrid(grid_meter=False, mocker=mocker)
57+
mockgrid.add_batteries(2)
58+
mockgrid.add_solar_inverters(2)
59+
60+
async with mockgrid, AsyncExitStack() as stack:
61+
consumer = microgrid.consumer()
62+
stack.push_async_callback(consumer.stop)
63+
consumer_power_receiver = consumer.power.new_receiver()
64+
65+
await mockgrid.mock_resampler.send_non_existing_component_value()
66+
assert (await consumer_power_receiver.receive()).value == Power.from_watts(
67+
0.0
68+
)

0 commit comments

Comments
 (0)