Skip to content

Commit

Permalink
refactor: move s2 test to a dedicated module
Browse files Browse the repository at this point in the history
Signed-off-by: Victor Garcia Reolid <victor@seita.nl>
  • Loading branch information
victorgarcia98 committed Jan 27, 2025
1 parent 7340ea4 commit 98e0b6f
Show file tree
Hide file tree
Showing 8 changed files with 165 additions and 126 deletions.
121 changes: 0 additions & 121 deletions tests/conftest.py
Original file line number Diff line number Diff line change
@@ -1,121 +0,0 @@
from __future__ import annotations

from datetime import datetime, timezone

import pytest
from s2python.common import (
Commodity,
CommodityQuantity,
ControlType,
Duration,
EnergyManagementRole,
Handshake,
NumberRange,
PowerRange,
ResourceManagerDetails,
Role,
RoleType,
)
from s2python.frbc import (
FRBCActuatorDescription,
FRBCOperationMode,
FRBCOperationModeElement,
FRBCStorageDescription,
FRBCSystemDescription,
)

from flexmeasures_client.s2.utils import get_unique_id


@pytest.fixture(scope="session")
def frbc_system_description():
########
# FRBC #
########

thp_operation_mode_element = FRBCOperationModeElement(
fill_level_range=NumberRange(start_of_range=0, end_of_range=80),
fill_rate=NumberRange(start_of_range=0, end_of_range=2),
power_ranges=[
PowerRange(
start_of_range=10,
end_of_range=1000,
commodity_quantity=CommodityQuantity.ELECTRIC_POWER_3_PHASE_SYMMETRIC,
)
],
)

thp_operation_mode = FRBCOperationMode(
id=get_unique_id(),
elements=[thp_operation_mode_element],
abnormal_condition_only=False,
)

nes_operation_mode_element = FRBCOperationModeElement(
fill_level_range=NumberRange(start_of_range=0, end_of_range=100),
fill_rate=NumberRange(start_of_range=0, end_of_range=1),
power_ranges=[
PowerRange(
start_of_range=10,
end_of_range=1000,
commodity_quantity=CommodityQuantity.ELECTRIC_POWER_3_PHASE_SYMMETRIC,
)
],
)

nes_operation_mode = FRBCOperationMode(
id=get_unique_id(),
elements=[nes_operation_mode_element],
abnormal_condition_only=False,
)

actuator = FRBCActuatorDescription(
id=get_unique_id(),
supported_commodities=[Commodity.ELECTRICITY],
operation_modes=[thp_operation_mode, nes_operation_mode],
transitions=[],
timers=[],
)

storage = FRBCStorageDescription(
provides_leakage_behaviour=True,
provides_fill_level_target_profile=True,
provides_usage_forecast=True,
fill_level_range=NumberRange(start_of_range=0, end_of_range=1),
)

system_description_message = FRBCSystemDescription(
message_id=get_unique_id(),
valid_from=datetime(2024, 1, 1, tzinfo=timezone.utc),
actuators=[actuator],
storage=storage,
)

return system_description_message


@pytest.fixture(scope="session")
def resource_manager_details():
return ResourceManagerDetails(
message_id=get_unique_id(),
resource_id=get_unique_id(),
roles=[Role(role=RoleType.ENERGY_STORAGE, commodity=Commodity.ELECTRICITY)],
instruction_processing_delay=Duration(1),
available_control_types=[
ControlType.FILL_RATE_BASED_CONTROL,
ControlType.NO_SELECTION,
],
provides_forecast=True,
provides_power_measurement_types=[
CommodityQuantity.ELECTRIC_POWER_3_PHASE_SYMMETRIC
],
)


@pytest.fixture(scope="session")
def rm_handshake():
return Handshake(
message_id=get_unique_id(),
role=EnergyManagementRole.RM,
supported_protocol_versions=["1.0.0"],
)
Empty file added tests/s2/__init__.py
Empty file.
130 changes: 130 additions & 0 deletions tests/s2/conftest.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,130 @@
from __future__ import annotations

from datetime import datetime, timezone
from warnings import warn

import pytest

try:
from s2python.common import (
Commodity,
CommodityQuantity,
ControlType,
Duration,
EnergyManagementRole,
Handshake,
NumberRange,
PowerRange,
ResourceManagerDetails,
Role,
RoleType,
)
from s2python.frbc import (
FRBCActuatorDescription,
FRBCOperationMode,
FRBCOperationModeElement,
FRBCStorageDescription,
FRBCSystemDescription,
)

from flexmeasures_client.s2.utils import get_unique_id

except ImportError:
warn(
"The 's2-python' package is required for this functionality. "
"Install it using `pip install flexmeasures-client[s2]`."
)


@pytest.fixture(scope="session")
def frbc_system_description():
########
# FRBC #
########

thp_operation_mode_element = FRBCOperationModeElement(
fill_level_range=NumberRange(start_of_range=0, end_of_range=80),
fill_rate=NumberRange(start_of_range=0, end_of_range=2),
power_ranges=[
PowerRange(
start_of_range=10,
end_of_range=1000,
commodity_quantity=CommodityQuantity.ELECTRIC_POWER_3_PHASE_SYMMETRIC,
)
],
)

thp_operation_mode = FRBCOperationMode(
id=get_unique_id(),
elements=[thp_operation_mode_element],
abnormal_condition_only=False,
)

nes_operation_mode_element = FRBCOperationModeElement(
fill_level_range=NumberRange(start_of_range=0, end_of_range=100),
fill_rate=NumberRange(start_of_range=0, end_of_range=1),
power_ranges=[
PowerRange(
start_of_range=10,
end_of_range=1000,
commodity_quantity=CommodityQuantity.ELECTRIC_POWER_3_PHASE_SYMMETRIC,
)
],
)

nes_operation_mode = FRBCOperationMode(
id=get_unique_id(),
elements=[nes_operation_mode_element],
abnormal_condition_only=False,
)

actuator = FRBCActuatorDescription(
id=get_unique_id(),
supported_commodities=[Commodity.ELECTRICITY],
operation_modes=[thp_operation_mode, nes_operation_mode],
transitions=[],
timers=[],
)

storage = FRBCStorageDescription(
provides_leakage_behaviour=True,
provides_fill_level_target_profile=True,
provides_usage_forecast=True,
fill_level_range=NumberRange(start_of_range=0, end_of_range=1),
)

system_description_message = FRBCSystemDescription(
message_id=get_unique_id(),
valid_from=datetime(2024, 1, 1, tzinfo=timezone.utc),
actuators=[actuator],
storage=storage,
)

return system_description_message


@pytest.fixture(scope="session")
def resource_manager_details():
return ResourceManagerDetails(
message_id=get_unique_id(),
resource_id=get_unique_id(),
roles=[Role(role=RoleType.ENERGY_STORAGE, commodity=Commodity.ELECTRICITY)],
instruction_processing_delay=Duration(1),
available_control_types=[
ControlType.FILL_RATE_BASED_CONTROL,
ControlType.NO_SELECTION,
],
provides_forecast=True,
provides_power_measurement_types=[
CommodityQuantity.ELECTRIC_POWER_3_PHASE_SYMMETRIC
],
)


@pytest.fixture(scope="session")
def rm_handshake():
return Handshake(
message_id=get_unique_id(),
role=EnergyManagementRole.RM,
supported_protocol_versions=["1.0.0"],
)
10 changes: 9 additions & 1 deletion tests/test_cem.py → tests/s2/test_cem.py
Original file line number Diff line number Diff line change
@@ -1,7 +1,15 @@
from __future__ import annotations

import pytest
from s2python.common import ControlType, ReceptionStatus, ReceptionStatusValues

try:
from s2python.common import ControlType, ReceptionStatus, ReceptionStatusValues
except ImportError:
raise ImportError(
"The 's2-python' package is required for this functionality. "
"Install it using `pip install flexmeasures-client[s2]`."
)


from flexmeasures_client.s2.cem import CEM
from flexmeasures_client.s2.control_types.FRBC import FRBCTest
Expand Down
10 changes: 9 additions & 1 deletion tests/test_frbc_tunes.py → tests/s2/test_frbc_tunes.py
Original file line number Diff line number Diff line change
Expand Up @@ -7,7 +7,15 @@
import numpy as np
import pandas as pd
import pytest
from s2python.common import ControlType, ReceptionStatus, ReceptionStatusValues

try:
from s2python.common import ControlType, ReceptionStatus, ReceptionStatusValues
except ImportError:
raise ImportError(
"The 's2-python' package is required for this functionality. "
"Install it using `pip install flexmeasures-client[s2]`."
)


from flexmeasures_client.client import FlexMeasuresClient
from flexmeasures_client.s2.cem import CEM
Expand Down
11 changes: 9 additions & 2 deletions tests/test_frbc_utils.py → tests/s2/test_frbc_utils.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,8 +3,15 @@
import math

import pytest
from s2python.common import CommodityQuantity, NumberRange, PowerRange
from s2python.frbc import FRBCOperationMode, FRBCOperationModeElement

try:
from s2python.common import CommodityQuantity, NumberRange, PowerRange
from s2python.frbc import FRBCOperationMode, FRBCOperationModeElement
except ImportError:
raise ImportError(
"The 's2-python' package is required for this functionality. "
"Install it using `pip install flexmeasures-client[s2]`."
)

from flexmeasures_client.s2.control_types.FRBC.utils import (
compute_factor,
Expand Down
File renamed without changes.
Original file line number Diff line number Diff line change
@@ -1,5 +1,12 @@
import pytest
from s2python.frbc import FRBCUsageForecast

try:
from s2python.frbc import FRBCUsageForecast
except ImportError:
raise ImportError(
"The 's2-python' package is required for this functionality. "
"Install it using `pip install flexmeasures-client[s2]`."
)

from flexmeasures_client.s2.control_types.translations import (
translate_usage_forecast_to_fm,
Expand Down

0 comments on commit 98e0b6f

Please sign in to comment.