Fix bug where assigning units didn't necessarily assign to the project, and also didn't overwrite existing units of the same type.

This commit is contained in:
Dion Moult
2025-01-27 14:23:02 +11:00
parent 4af6c24314
commit c0aaebcbe9
2 changed files with 34 additions and 14 deletions
@@ -24,7 +24,7 @@ class TestAssignUnit(test.bootstrap.IFC4):
def test_run(self):
project = self.file.createIfcProject()
unit1 = ifcopenshell.api.unit.add_monetary_unit(self.file, currency="USD")
unit2 = ifcopenshell.api.unit.add_monetary_unit(self.file, currency="JPY")
unit2 = ifcopenshell.api.unit.add_si_unit(self.file, unit_type="LENGTHUNIT", prefix="MILLI")
assignment = ifcopenshell.api.unit.assign_unit(self.file, units=[unit1, unit2])
assert project.UnitsInContext == assignment
assert assignment.is_a("IfcUnitAssignment")
@@ -34,7 +34,7 @@ class TestAssignUnit(test.bootstrap.IFC4):
def test_assign_units_to_an_existing_assignment(self):
project = self.file.createIfcProject()
unit1 = ifcopenshell.api.unit.add_monetary_unit(self.file, currency="USD")
unit2 = ifcopenshell.api.unit.add_monetary_unit(self.file, currency="JPY")
unit2 = ifcopenshell.api.unit.add_si_unit(self.file, unit_type="LENGTHUNIT", prefix="MILLI")
assignment1 = ifcopenshell.api.unit.assign_unit(self.file, units=[unit1])
assignment2 = ifcopenshell.api.unit.assign_unit(self.file, units=[unit2])
assert project.UnitsInContext == assignment1
@@ -42,6 +42,28 @@ class TestAssignUnit(test.bootstrap.IFC4):
assert unit1 in assignment1.Units
assert unit2 in assignment1.Units
def test_overwriting_an_existing_unit_type(self):
project = self.file.createIfcProject()
unit1 = ifcopenshell.api.unit.add_si_unit(self.file, unit_type="LENGTHUNIT", prefix="MILLI")
unit2 = ifcopenshell.api.unit.add_si_unit(self.file, unit_type="LENGTHUNIT", prefix="CENTI")
assignment1 = ifcopenshell.api.unit.assign_unit(self.file, units=[unit1])
assignment2 = ifcopenshell.api.unit.assign_unit(self.file, units=[unit2])
assert project.UnitsInContext == assignment1
assert assignment1 == assignment2
assert unit1 not in assignment1.Units
assert unit2 in assignment1.Units
def test_overwriting_an_existing_monetary_unit(self):
project = self.file.createIfcProject()
unit1 = ifcopenshell.api.unit.add_monetary_unit(self.file, currency="USD")
unit2 = ifcopenshell.api.unit.add_monetary_unit(self.file, currency="AUD")
assignment1 = ifcopenshell.api.unit.assign_unit(self.file, units=[unit1])
assignment2 = ifcopenshell.api.unit.assign_unit(self.file, units=[unit2])
assert project.UnitsInContext == assignment1
assert assignment1 == assignment2
assert unit1 not in assignment1.Units
assert unit2 in assignment1.Units
class TestAssignUnitIFC2X3(test.bootstrap.IFC2X3, TestAssignUnit):
pass