otko/tests/unit/test_display_name.py
smillmorel 13bb5d1d91
Some checks failed
CI / lint (push) Has been cancelled
CI / test (macos-latest, 3.10) (push) Has been cancelled
CI / test (macos-latest, 3.11) (push) Has been cancelled
CI / test (macos-latest, 3.12) (push) Has been cancelled
CI / test (ubuntu-latest, 3.10) (push) Has been cancelled
CI / test (ubuntu-latest, 3.11) (push) Has been cancelled
CI / test (ubuntu-latest, 3.12) (push) Has been cancelled
CI / test (windows-latest, 3.10) (push) Has been cancelled
CI / test (windows-latest, 3.11) (push) Has been cancelled
CI / test (windows-latest, 3.12) (push) Has been cancelled
feat: show default node/element names in table
2026-09-08 03:41:10 -04:00

93 lines
2.9 KiB
Python

"""Unit tests for the display-only ``display_name`` fallback on entities."""
from __future__ import annotations
from otko.core import (
BeamWithHingesElement,
CorotTrussElement,
DispBeamColumn,
ElasticBeamColumn,
ElementBase,
ForceBeamColumn,
Node,
QuadElement,
TrussElement,
ZeroLengthElement,
ZeroLengthSectionElement,
)
from otko.core._base import Entity
_ALL_ELEMENT_TYPES = (
TrussElement,
CorotTrussElement,
ElasticBeamColumn,
ForceBeamColumn,
DispBeamColumn,
ZeroLengthElement,
ZeroLengthSectionElement,
BeamWithHingesElement,
QuadElement,
)
class TestEntityBase:
def test_base_fallback_is_empty(self) -> None:
e = Entity(id=1)
assert e.default_name == ""
assert e.display_name == ""
def test_display_name_is_not_persisted(self) -> None:
assert "display_name" not in Entity(id=1).model_dump()
assert "default_name" not in Entity(id=1).model_dump()
assert "display_name" not in Node(id=1, coords=(0, 0, 0)).model_dump()
class TestNodeDisplayName:
def test_blank_name_falls_back(self) -> None:
n = Node(id=1, coords=(0, 0, 0))
assert n.display_name == "N1"
def test_explicit_name_is_returned(self) -> None:
n = Node(id=1, name="Support A", coords=(0, 0, 0))
assert n.display_name == "Support A"
def test_whitespace_only_name_falls_back(self) -> None:
n = Node(id=2, name=" ", coords=(0, 0, 0))
assert n.display_name == "N2"
def test_explicit_name_is_stripped(self) -> None:
n = Node(id=1, name=" A1 ", coords=(0, 0, 0))
assert n.display_name == "A1"
def test_display_only_never_writes_back(self) -> None:
n = Node(id=1, coords=(0, 0, 0))
assert n.display_name == "N1"
assert n.name == ""
class TestElementDisplayName:
def test_all_element_types_share_element_base(self) -> None:
for cls in _ALL_ELEMENT_TYPES:
assert issubclass(cls, ElementBase)
def test_blank_truss_name_falls_back(self) -> None:
t = TrussElement(id=1, nodes=(1, 2), area=0.01, material_id=1)
assert t.display_name == "E1"
def test_explicit_truss_name_is_returned(self) -> None:
t = TrussElement(id=1, name="Chord", nodes=(1, 2), area=0.01, material_id=1)
assert t.display_name == "Chord"
def test_whitespace_only_truss_name_falls_back(self) -> None:
t = TrussElement(id=3, name=" ", nodes=(1, 2), area=0.01, material_id=1)
assert t.display_name == "E3"
def test_blank_quad_name_falls_back(self) -> None:
q = QuadElement(id=1, nodes=(1, 2, 3, 4), thickness=0.1, material_id=1)
assert q.display_name == "E1"
def test_display_only_never_writes_back(self) -> None:
t = TrussElement(id=1, nodes=(1, 2), area=0.01, material_id=1)
assert t.display_name == "E1"
assert t.name == ""
assert "display_name" not in t.model_dump()