from __future__ import annotations import unittest from pathlib import Path from app.simulation.reporting.amesim_results import load_test_mql_amesim_results from app.simulation.reporting.test_mql_variables import ( build_test_mql_variable_catalog, split_data_path, ) REPO_ROOT = Path(__file__).resolve().parents[1] TEST_MQL_AME = REPO_ROOT / "AmesimModels" / "test_mql.ame" class TestMqlVariableCatalogTests(unittest.TestCase): @classmethod def setUpClass(cls) -> None: cls.amesim_results = load_test_mql_amesim_results(TEST_MQL_AME) cls.catalog = build_test_mql_variable_catalog(cls.amesim_results) def test_catalog_covers_all_amesim_data_paths(self) -> None: self.assertEqual(self.catalog.data_path_count, 1100) self.assertEqual(self.catalog.saved_data_path_count, 1100) self.assertEqual(self.catalog.counts_by_owner_kind(), {"component": 712, "connection": 388}) def test_component_variable_mapping_preserves_alias_and_submodel(self) -> None: variable = self.catalog.by_data_path("temp3@pn_c1_8") self.assertEqual(variable.index, 0) self.assertEqual(variable.signal_name, "temp3") self.assertEqual(variable.owner_alias, "pn_c1_8") self.assertEqual(variable.owner_kind, "component") self.assertEqual(variable.submodel, "PNCH012") self.assertEqual(variable.units, "K") self.assertTrue(variable.saved) def test_connection_variable_mapping_preserves_line_submodel(self) -> None: variable = self.catalog.by_data_path("dm1@pneumatic_69") self.assertEqual(variable.signal_name, "dm1") self.assertEqual(variable.owner_alias, "pneumatic_69") self.assertEqual(variable.owner_kind, "connection") self.assertEqual(variable.submodel, "PNL0001") self.assertEqual(variable.units, "g/s") def test_counts_by_submodel_include_components_and_connections(self) -> None: counts = self.catalog.counts_by_submodel() self.assertEqual(counts["PNL0001"], 180) self.assertEqual(counts["PNCH012"], 80) self.assertEqual(counts["PNRP17"], 72) self.assertEqual(counts["PNVO001"], 56) self.assertEqual(counts["PNOR001"], 48) self.assertEqual(counts["PNCH023"], 20) def test_owner_lookup_returns_data_paths_for_component(self) -> None: paths = self.catalog.data_paths_for_owner("pn_c1_8") self.assertIn("temp3@pn_c1_8", paths) self.assertIn("press3@pn_c1_8", paths) self.assertEqual(len(paths), 10) def test_split_data_path_rejects_invalid_values(self) -> None: self.assertEqual(split_data_path("press3@pn_c1_8"), ("press3", "pn_c1_8")) with self.assertRaises(ValueError): split_data_path("press3") if __name__ == "__main__": unittest.main()