Files

74 lines
1.9 KiB
Python
Raw Permalink 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"