pset.unshare_pset - fix bug where it would leaving an orphaned pset

It was leaving an orphaned pset if 'products' was a list of all elements pset is assigned to. Then it would create a new pset for each element leaving original pset orphaned.
This commit is contained in:
Andrej730
2024-09-05 18:40:53 +05:00
parent ffb2ea2be3
commit 6ebec7e0e5
3 changed files with 43 additions and 2 deletions
@@ -69,6 +69,32 @@ class TestUnsharePset(test.bootstrap.IFC4):
assert used_psets == set(psets)
def test_unshare_pset_for_all_pset_elements(self):
elements = [self.file.create_entity("IfcWall") for _ in range(3)]
pset = ifcopenshell.api.pset.add_pset(self.file, elements[0], "Foo")
pset_id = pset.id()
rel = self.file.by_type("IfcRelDefinesByProperties")[0]
rel.RelatedObjects = elements
new_psets = ifcopenshell.api.pset.unshare_pset(self.file, elements, pset)
# Original pset still exists and it's not orphaned.
pset = self.file.by_id(pset_id)
assert isinstance(new_psets, list)
assert len(new_psets) == 2
assert len(psets := self.file.by_type("IfcPropertySet")) == 3
assert len(self.file.by_type("IfcRelDefinesByProperties")) == 3
used_elements = set()
for pset in psets:
pset_elements = ifcopenshell.util.element.get_elements_by_pset(pset)
assert len(pset_elements) == 1
used_elements.update(pset_elements)
assert used_elements == set(elements)
class TestUnsharePsetIFC2X3(test.bootstrap.IFC2X3, TestUnsharePset):
pass