from __future__ import annotations import unittest from app.simulation.components.amesim.boundary.sources import AmesimPnpl01 from app.simulation.core.medium import IdealGasMedium from app.simulation.registry import COMPONENT_MODEL_REGISTRY class AmesimPnpl01ComponentTests(unittest.TestCase): def setUp(self) -> None: self.medium = IdealGasMedium() def test_default_create_preserves_zero_flow_boundary_contract(self) -> None: source = COMPONENT_MODEL_REGISTRY["amesim_pnpl01"].create( "plug_1", self.medium, {}, ) self.assertIsInstance(source, AmesimPnpl01) self.assertEqual(set(source.ports), {"port_1"}) self.assertEqual(source.parameter_values, {}) def test_zero_flow_residual_uses_port_mass_flow(self) -> None: source = AmesimPnpl01("plug_1") source.port_1.m_flow = 0.125 residuals = source.pressure_flow_equation_residuals() self.assertEqual(len(residuals), 1) self.assertEqual(residuals[0].id, "plug_1:zero_mass_flow") self.assertEqual(residuals[0].variables, ("plug_1.port_1.m_flow",)) self.assertEqual(residuals[0].value, 0.125) def test_stream_outflow_tracks_connected_enthalpy_when_available(self) -> None: source = AmesimPnpl01("plug_1") source.update_stream_outflows({"port_1": 123.0}) self.assertEqual(source.port_1.h_outflow, 123.0) if __name__ == "__main__": unittest.main()