Files
SystemSimulationApp/tests/test_reactflow_project_medium_reference.py
T

105 lines
3.6 KiB
Python

from __future__ import annotations
import unittest
from app.main import (
ReactFlowProjectPayload,
build_reactflow_system_xml,
pydantic_to_jsonable,
)
class ReactFlowProjectMediumReferenceVersionTests(unittest.TestCase):
def test_version_one_is_accepted_and_serialized(self) -> None:
project = ReactFlowProjectPayload(
name="versioned-medium-references",
mediumReferenceVersion=1,
)
self.assertEqual(project.mediumReferenceVersion, 1)
self.assertEqual(
pydantic_to_jsonable(project)["mediumReferenceVersion"],
1,
)
def test_other_medium_reference_versions_are_rejected(self) -> None:
for version in (0, 2, -1, "1"):
with self.subTest(version=version):
with self.assertRaises(ValueError):
ReactFlowProjectPayload(
name="unsupported-medium-references",
mediumReferenceVersion=version,
)
def test_legacy_project_without_version_remains_compatible(self) -> None:
project = ReactFlowProjectPayload(name="legacy-project")
self.assertIsNone(project.mediumReferenceVersion)
self.assertIsNone(project.amesimParameterEncodingVersion)
self.assertNotIn(
"amesimParameterEncodingVersion",
pydantic_to_jsonable(project),
)
def test_xml_export_adds_default_property_model_to_legacy_medium_node(self) -> None:
project = ReactFlowProjectPayload(
name="legacy-medium-node",
mediumReferenceVersion=1,
nodes=[
{
"id": "air_1",
"position": {"x": 10, "y": 20},
"data": {
"label": "Air 1",
"componentType": "amesim_ideal_air_medium",
"modelType": "amesim_ideal_air_medium",
"ports": [],
"parameters": {"gi": 1},
},
}
],
)
xml = build_reactflow_system_xml(project).decode("utf-8")
self.assertIn('<Parameter name="gi" value="1"', xml)
self.assertIn('<Parameter name="property_model" value="0.0"', xml)
class ReactFlowPresentationLayoutVersionTests(unittest.TestCase):
def test_layout_version_is_preserved_but_not_written_to_xml(self) -> None:
project = ReactFlowProjectPayload(
name="versioned-presentation-layout",
presentationLayoutVersion=1,
)
self.assertEqual(project.presentationLayoutVersion, 1)
self.assertEqual(
pydantic_to_jsonable(project)["presentationLayoutVersion"],
1,
)
xml = build_reactflow_system_xml(project).decode("utf-8")
self.assertNotIn("presentationLayoutVersion", xml)
def test_layout_version_rejects_unsupported_values(self) -> None:
for version in (0, 2, -1, "1"):
with self.subTest(version=version):
with self.assertRaises(ValueError):
ReactFlowProjectPayload(
name="unsupported-presentation-layout",
presentationLayoutVersion=version,
)
def test_legacy_layout_version_remains_missing(self) -> None:
project = ReactFlowProjectPayload(name="legacy-presentation-layout")
self.assertIsNone(project.presentationLayoutVersion)
self.assertNotIn(
"presentationLayoutVersion",
pydantic_to_jsonable(project),
)
if __name__ == "__main__":
unittest.main()