规范仿真模型库并完善前端交互

归档仿真模型并补充组件目录、建模规范与校验。

完善控制台、默认节点、视图适配及前端自动化测试。
This commit is contained in:
ljz committed 2026-07-29 15:44:16 +08:00
1 parent f7f1078911
commit bbc88a6bbb
71 files changed
+4574 -806

No files matched your search

+86
View File
@@ -0,0 +1,86 @@
from __future__ import annotations
import json
from pathlib import Path
import unittest
from app.main import get_component_catalog
from app.simulation.registry import (
COMPONENT_MODEL_REGISTRY,
validate_component_registries,
)
class ComponentCatalogTests(unittest.TestCase):
def setUp(self) -> None:
self.catalog = get_component_catalog()
self.library = self.catalog["libraries"][0]
self.components = {
component["modelType"]: component
for component in self.library["components"]
}
def test_experimental_library_is_exposed_as_temporary(self) -> None:
self.assertEqual(self.catalog["schemaVersion"], 1)
self.assertEqual(self.library["id"], "experimental")
self.assertEqual(self.library["label"], "临时测试组件库")
self.assertEqual(self.library["version"], "0.1.0")
self.assertTrue(self.library["temporary"])
self.assertEqual(
self.library["sourcePackage"],
"app.simulation.components.experimental",
)
self.assertEqual(
[category["id"] for category in self.library["categories"]],
["storage", "flow", "junctions"],
)
def test_every_registered_component_is_in_the_catalog(self) -> None:
self.assertEqual(
set(self.components),
set(COMPONENT_MODEL_REGISTRY),
)
def test_catalog_reuses_model_parameter_contracts(self) -> None:
cylinder = self.components["cylinder"]
parameters = {
parameter["name"]: parameter for parameter in cylinder["parameters"]
}
self.assertEqual(cylinder["label"], "气瓶")
self.assertEqual(cylinder["modelVersion"], "1.0.0")
self.assertEqual(parameters["volume"]["default"], 0.01)
self.assertEqual(parameters["volume"]["quantity"], "volume")
self.assertEqual(parameters["p0"]["unit"], "Pa")
self.assertTrue(parameters["p0"]["minimumExclusive"])
def test_catalog_adds_port_layout_without_changing_physical_contract(self) -> None:
tee_ports = {
port["name"]: port for port in self.components["tee"]["ports"]
}
self.assertEqual(tee_ports["port_in"]["side"], "left")
self.assertEqual(tee_ports["port_out1"]["side"], "right")
self.assertEqual(tee_ports["port_out2"]["side"], "right")
self.assertEqual(tee_ports["port_in"]["kind"], "physical")
self.assertEqual(tee_ports["port_in"]["domain"], "pneumatic")
self.assertEqual(tee_ports["port_in"]["nominalRole"], "bidirectional")
def test_registry_can_repeat_discovery_and_validation(self) -> None:
validate_component_registries()
def test_catalog_schema_is_committed_and_targets_version_one(self) -> None:
schema_path = (
Path(__file__).resolve().parent.parent
/ "schemas"
/ "component-catalog-v1.schema.json"
)
schema = json.loads(schema_path.read_text(encoding="utf-8"))
self.assertEqual(schema["properties"]["schemaVersion"]["const"], 1)
self.assertIn("modelVersion", schema["$defs"]["component"]["required"])
self.assertIn("version", schema["$defs"]["library"]["required"])
if __name__ == "__main__":
unittest.main()