Files
IfcOpenShell/src/bonsai/test/core
Gorgious56 e764559133 Route _has_material_styles through tool.Root.has_material_styles
Pre-existing architectural smell on v0.8.0: core/root.py.copy_class
called a module-level _has_material_styles helper that did
ifcopenshell.util.element.get_materials() directly, bypassing the
Prophecy mock seam that every other branch in copy_class flowed
through. Symptom: test/core/test_root.py::TestCopyClass::
test_AAAAAAAAAAAA passed mock strings into copy_class, the helper
called .is_a() on the string, AttributeError.

Move the check to tool.Root.has_material_styles (paired with
assign_body_styles — they're called in sequence as "is there a
material style? if not, assign body style"). core/root.py now
calls root.has_material_styles(new) like every other dependency,
fixing the test failure and dropping the ifcopenshell.util.element
import that was the only consumer of the ifcopenshell import at
module load in core/root.py.

* core/tool.py: add abstract has_material_styles to Root interface.
* tool/root.py: add concrete classmethod near assign_body_styles.
* core/root.py: replace _has_material_styles helper call site with
  root.has_material_styles; drop the local helper and its import.
* test/core/test_root.py: add the new mock expectation
  root.has_material_styles("element").will_return(False) before the
  existing assign_body_styles expectation.

Generated with the assistance of an AI coding tool.
2026-06-01 10:47:57 +02:00
..
2026-01-26 17:13:18 +05:00
2026-01-26 17:13:18 +05:00
2026-01-26 17:13:18 +05:00
2026-01-26 17:13:18 +05:00
2026-01-26 17:13:18 +05:00
2026-01-26 17:13:18 +05:00
2026-01-26 17:13:18 +05:00
2026-01-26 17:13:18 +05:00
2026-01-26 17:13:18 +05:00
2026-01-26 17:13:18 +05:00
2026-01-26 17:13:18 +05:00
2026-01-26 17:13:18 +05:00
2026-01-26 17:13:18 +05:00
2026-01-28 21:49:25 +11:00