import sys import unittest from unittest.mock import MagicMock from pathlib import Path PROJECT_ROOT = Path(__file__).resolve().parent.parent sys.path.append(str(PROJECT_ROOT.parent)) # Mock bpy and dependencies for unit testing class DummyNodeSocket: pass class DummyNode: pass class DummyObject: def __init__(self, name="TestObj"): self.name = name mock_types = MagicMock() mock_types.NodeSocket = DummyNodeSocket mock_types.Node = DummyNode mock_types.Object = DummyObject mock_bpy = MagicMock() mock_bpy.context.scene = MagicMock() mock_bpy.context.scene.unit_settings.scale_length = 0.001 mock_bpy.types = mock_types sys.modules['bpy'] = mock_bpy sys.modules['bpy.types'] = mock_types sys.modules['bpy.props'] = MagicMock() sys.modules['bpy.utils'] = MagicMock() from NodeSlicer.infra.blender.blender_mesh_capture import SlicingObject, SlicingCollection, SlicingGroup from NodeSlicer.core.nodeslicer.nodes.mesh import _rename_slicing_item class TestRenameMesh(unittest.TestCase): def test_rename_slicing_object(self): so = SlicingObject() so.name = "OldName" renamed = _rename_slicing_item(so, "NewName") self.assertEqual(renamed.name, "NewName") def test_rename_slicing_collection(self): so1 = SlicingObject() so1.name = "Part1" sc = SlicingCollection([], "OldCollection") sc.objects = [so1] renamed = _rename_slicing_item(sc, "NewColl") self.assertEqual(renamed.name, "NewColl") self.assertEqual(renamed.objects[0].name, "NewColl") self.assertEqual(renamed.objects[0].parent, "NewColl") def test_rename_slicing_group(self): sc = SlicingCollection([], "Coll1") sg = SlicingGroup([]) sg.collections = {"Coll1": sc} renamed = _rename_slicing_item(sg, "NewGroup") self.assertIn("NewGroup", renamed.collections) self.assertEqual(renamed.collections["NewGroup"].name, "NewGroup") if __name__ == '__main__': unittest.main()