#!/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! ✅✅✅")