Files
EOS/tests/test_serverendpoint.py
T

74 lines
1.9 KiB
Python
Raw Normal View History

"""Test server endpoints directly calling the endpoint function (unit tests)."""
import numpy as np
import pytest
from akkudoktoreos.server.eos import fastapi_strompreis
from akkudoktoreos.utils.datetimeutil import to_duration
class _FakeConfig:
def __init__(self):
self.settings = None
def merge_settings(self, settings):
self.settings = settings
class _FakeEms:
def __init__(self):
self.run_kwargs = None
async def run(self, **kwargs):
self.run_kwargs = kwargs
class TestServerEndpointDirect:
@pytest.mark.asyncio
async def test_fastapi_strompreis(self, monkeypatch):
class _FakePrediction:
def __init__(self):
self.key_to_array_kwargs = None
async def key_to_array(self, **kwargs):
self.key_to_array_kwargs = kwargs
# two hours of hourly values
return np.array([4.0, 16.0])
config = _FakeConfig()
ems = _FakeEms()
prediction = _FakePrediction()
monkeypatch.setattr(
"akkudoktoreos.server.eos.get_config",
lambda: config,
)
monkeypatch.setattr(
"akkudoktoreos.server.eos.get_ems",
lambda: ems,
)
monkeypatch.setattr(
"akkudoktoreos.server.eos.get_prediction",
lambda: prediction,
)
result = await fastapi_strompreis()
assert ems.run_kwargs is not None
assert prediction.key_to_array_kwargs is not None
assert result == [4.0, 16.0]
assert ems.run_kwargs == {
"mode": ems.run_kwargs["mode"], # see below
"force_update": True,
}
kwargs = prediction.key_to_array_kwargs
assert kwargs["key"] == "elecprice_marketprice_wh"
assert kwargs["interval"] == to_duration("1 hour")
assert kwargs["fill_method"] == "ffill"
assert kwargs["resample_method"] == "interval_mean"