66 lines
2.1 KiB
Python
66 lines
2.1 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)
|
|
|
|
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)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|