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
93 lines
2.9 KiB
Python
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()
|