Files
EOS/tests/test_translations.py

129 lines
5.0 KiB
Python
Raw Normal View History

#!/usr/bin/env python3
"""Quick test to verify API field name translations work correctly."""
import json
from akkudoktoreos.optimization.genetic.geneticparams import (
GeneticEnergyManagementParameters,
)
from akkudoktoreos.optimization.genetic.geneticsolution import GeneticSimulationResult
def test_genetic_params_german_input():
"""Test that German field names are accepted as input."""
data_de = {
"pv_prognose_wh": [100.0, 200.0],
"strompreis_euro_pro_wh": [0.0003, 0.0003],
"einspeiseverguetung_euro_pro_wh": 0.00007,
"preis_euro_pro_wh_akku": 0.0001,
"gesamtlast": [500.0, 600.0],
}
params = GeneticEnergyManagementParameters(**data_de)
assert params.pv_forecast_wh == [100.0, 200.0]
print("✅ German input accepted")
def test_genetic_params_english_input():
"""Test that English field names are accepted as input."""
data_en = {
"pv_forecast_wh": [100.0, 200.0],
"electricity_price_per_wh": [0.0003, 0.0003],
"feed_in_tariff_per_wh": 0.00007,
"price_per_wh_battery": 0.0001,
"total_load": [500.0, 600.0],
}
params = GeneticEnergyManagementParameters(**data_en)
assert params.pv_forecast_wh == [100.0, 200.0]
print("✅ English input accepted")
def test_genetic_params_english_output():
"""Test that both English and German field names are in JSON output (backward compatibility)."""
data_de = {
"pv_prognose_wh": [100.0, 200.0],
"strompreis_euro_pro_wh": [0.0003, 0.0003],
"einspeiseverguetung_euro_pro_wh": 0.00007,
"preis_euro_pro_wh_akku": 0.0001,
"gesamtlast": [500.0, 600.0],
}
params = GeneticEnergyManagementParameters(**data_de)
json_output = json.loads(params.model_dump_json(by_alias=True))
# English names should be in output
assert "pv_forecast_wh" in json_output
assert "electricity_price_per_wh" in json_output
assert "feed_in_tariff_per_wh" in json_output
assert "price_per_wh_battery" in json_output
assert "total_load" in json_output
# German names should ALSO be in output (backward compatibility)
assert "pv_prognose_wh" in json_output
assert "strompreis_euro_pro_wh" in json_output
assert "einspeiseverguetung_euro_pro_wh" in json_output
assert "preis_euro_pro_wh_akku" in json_output
assert "gesamtlast" in json_output
# Both should have same values
assert json_output["pv_forecast_wh"] == json_output["pv_prognose_wh"]
assert json_output["electricity_price_per_wh"] == json_output["strompreis_euro_pro_wh"]
print("✅ Both English and German output generated")
def test_simulation_result_translations():
"""Test simulation result field translations."""
data_de = {
"Last_Wh_pro_Stunde": [100.0, 200.0],
"EAuto_SoC_pro_Stunde": [50.0, 60.0],
"Einnahmen_Euro_pro_Stunde": [0.1, 0.2],
"Gesamt_Verluste": 50.0,
"Gesamtbilanz_Euro": -10.0,
"Gesamteinnahmen_Euro": 5.0,
"Gesamtkosten_Euro": 15.0,
"Home_appliance_wh_per_hour": [0.0, 100.0],
"Kosten_Euro_pro_Stunde": [0.2, 0.3],
"Netzbezug_Wh_pro_Stunde": [50.0, 60.0],
"Netzeinspeisung_Wh_pro_Stunde": [10.0, 20.0],
"Verluste_Pro_Stunde": [5.0, 10.0],
"akku_soc_pro_stunde": [80.0, 90.0],
"Electricity_price": [0.0003, 0.0003],
}
result = GeneticSimulationResult(**data_de)
json_output = json.loads(result.model_dump_json(by_alias=True))
# Check English field names in output
english_names = [
"load_wh_per_hour",
"ev_soc_per_hour",
"revenue_per_hour",
"total_losses",
"total_balance",
"total_revenue",
"total_costs",
"home_appliance_wh_per_hour",
"costs_per_hour",
"grid_consumption_wh_per_hour",
"grid_feed_in_wh_per_hour",
"losses_per_hour",
"battery_soc_per_hour",
"electricity_price",
]
for name in english_names:
assert name in json_output, f"English field {name} missing in output"
# Check ALL deprecated German field names are still in output (backward compatibility)
for name in data_de:
assert name in json_output, f"Deprecated field {name} missing in output"
# Deprecated fields must mirror the values of the renamed fields
assert json_output["Last_Wh_pro_Stunde"] == json_output["load_wh_per_hour"]
assert json_output["Home_appliance_wh_per_hour"] == json_output["home_appliance_wh_per_hour"]
assert json_output["Gesamtbilanz_Euro"] == json_output["total_balance"]
assert json_output["akku_soc_pro_stunde"] == json_output["battery_soc_per_hour"]
assert json_output["Electricity_price"] == json_output["electricity_price"]
print("✅ Simulation result translations work")
if __name__ == "__main__":
test_genetic_params_german_input()
test_genetic_params_english_input()
test_genetic_params_english_output()
test_simulation_result_translations()
print("\n✅✅✅ All translation tests passed! ✅✅✅")