Skip to content

Commit ba316cf

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

File tree

1 file changed

+95
-0
lines changed

1 file changed

+95
-0
lines changed

tests/timeseries/test_producer.py

Lines changed: 95 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,95 @@
1+
# License: MIT
2+
# Copyright © 2023 Frequenz Energy-as-a-Service GmbH
3+
4+
"""Test the logical component for calculating high level producer 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 TestProducer:
17+
"""Tests for the producer power formula."""
18+
19+
async def test_producer_power(self, mocker: MockerFixture) -> None:
20+
"""Test the producer power formula."""
21+
mockgrid = MockMicrogrid(grid_meter=False, mocker=mocker)
22+
mockgrid.add_solar_inverters(2)
23+
mockgrid.add_chps(2)
24+
25+
async with mockgrid, AsyncExitStack() as stack:
26+
producer = microgrid.producer()
27+
stack.push_async_callback(producer.stop)
28+
producer_power_receiver = producer.power.new_receiver()
29+
30+
await mockgrid.mock_resampler.send_meter_power([2.0, 3.0, 4.0, 5.0])
31+
assert (await producer_power_receiver.receive()).value == Power.from_watts(
32+
14.0
33+
)
34+
35+
async def test_producer_power_no_chp(self, mocker: MockerFixture) -> None:
36+
"""Test the producer power formula without a chp."""
37+
mockgrid = MockMicrogrid(grid_meter=False, mocker=mocker)
38+
mockgrid.add_solar_inverters(2)
39+
40+
async with mockgrid, AsyncExitStack() as stack:
41+
producer = microgrid.producer()
42+
stack.push_async_callback(producer.stop)
43+
producer_power_receiver = producer.power.new_receiver()
44+
45+
await mockgrid.mock_resampler.send_meter_power([2.0, 3.0])
46+
assert (await producer_power_receiver.receive()).value == Power.from_watts(
47+
5.0
48+
)
49+
50+
async def test_producer_power_no_pv_no_consumer_meter(
51+
self, mocker: MockerFixture
52+
) -> None:
53+
"""Test the producer power formula without pv and without consumer meter."""
54+
mockgrid = MockMicrogrid(grid_meter=False, mocker=mocker)
55+
mockgrid.add_chps(1, True)
56+
57+
async with mockgrid, AsyncExitStack() as stack:
58+
producer = microgrid.producer()
59+
stack.push_async_callback(producer.stop)
60+
producer_power_receiver = producer.power.new_receiver()
61+
62+
await mockgrid.mock_resampler.send_chp_power([2.0])
63+
assert (await producer_power_receiver.receive()).value == Power.from_watts(
64+
2.0
65+
)
66+
67+
async def test_producer_power_no_pv(self, mocker: MockerFixture) -> None:
68+
"""Test the producer power formula without pv."""
69+
mockgrid = MockMicrogrid(grid_meter=False, mocker=mocker)
70+
mockgrid.add_consumer_meters()
71+
mockgrid.add_chps(1)
72+
73+
async with mockgrid, AsyncExitStack() as stack:
74+
producer = microgrid.producer()
75+
stack.push_async_callback(producer.stop)
76+
producer_power_receiver = producer.power.new_receiver()
77+
78+
await mockgrid.mock_resampler.send_meter_power([20.0, 2.0])
79+
assert (await producer_power_receiver.receive()).value == Power.from_watts(
80+
2.0
81+
)
82+
83+
async def test_no_producer_power(self, mocker: MockerFixture) -> None:
84+
"""Test the producer power formula without producers."""
85+
async with MockMicrogrid(
86+
grid_meter=True, mocker=mocker
87+
) as mockgrid, AsyncExitStack() as stack:
88+
producer = microgrid.producer()
89+
stack.push_async_callback(producer.stop)
90+
producer_power_receiver = producer.power.new_receiver()
91+
92+
await mockgrid.mock_resampler.send_non_existing_component_value()
93+
assert (await producer_power_receiver.receive()).value == Power.from_watts(
94+
0.0
95+
)

0 commit comments

Comments
 (0)