fix: separate rack width import locks

This commit is contained in:
2026-08-19 10:43:33 +02:00
parent 639dc958a5
commit 7216dad2b4
7 changed files with 40 additions and 9 deletions
+14 -2
View File
@@ -18,10 +18,15 @@ from netbox_utilities.netbox_export import (
class FakeQuerySet(list):
def __init__(self, values=()):
super().__init__(values)
self.selected_related = []
def select_for_update(self):
return self
def select_related(self, *args):
self.selected_related.append(args)
return self
def filter(self, **kwargs):
@@ -29,7 +34,9 @@ class FakeQuerySet(list):
def exclude(self, **kwargs):
pk = kwargs.get("pk")
return FakeQuerySet(item for item in self if item.pk != pk)
result = FakeQuerySet(item for item in self if item.pk != pk)
result.selected_related = self.selected_related
return result
class FakeDevice:
@@ -111,17 +118,22 @@ class NetBoxExportRackWidthTest(SimpleTestCase):
self.assertIs(_defer_rack_width(original, FakeDevice, record)[1], native)
def test_import_conflicts_respect_horizontal_rack_positions(self):
@patch("netbox_utilities.netbox_export.DeviceRackPlacement.objects")
def test_import_conflicts_respect_horizontal_rack_positions(self, placement_objects):
left = FakeDevice(1, width=2, horizontal_position=1, position=11)
right = FakeDevice(2, width=2, horizontal_position=2)
right.rack_id = 1
FakeDevice._default_manager = FakeQuerySet([left])
stored_left = SimpleNamespace(device_id=1, width=2, horizontal_position=1)
placement_objects.select_for_update.return_value.filter.return_value = [stored_left]
original = MagicMock()
conflicts = _width_aware_device_placement_conflicts(original, right, object(), 11, "front")
self.assertEqual(conflicts, [])
original.assert_not_called()
self.assertEqual(FakeDevice._default_manager.selected_related, [("device_type",)])
placement_objects.select_for_update.return_value.filter.assert_called_with(device_id__in=[1])
overlapping = FakeDevice(3, width=2, horizontal_position=1)
overlapping.rack_id = 1
+1 -1
View File
@@ -449,7 +449,7 @@ class ReorderRackFrontendTest(SimpleTestCase):
self.assertEqual(template_name, "netbox_utilities/reorder_rack.html")
self.assertEqual(context["reorder_devices"][0]["label"], "LEO-Fritzbox")
self.assertEqual(context["reorder_devices"][0]["grid_width"], 6)
self.assertEqual(context["asset_version"], "0.9.9")
self.assertEqual(context["asset_version"], "0.9.10")
self.assertIs(context["reorder_rack_width_data"], get_width_data.return_value)
get_width_data.assert_called_once()
self.assertIs(get_width_data.call_args.kwargs["rack"], rack)
@@ -246,7 +246,7 @@ class TopologyViewsRackWidthTest(SimpleTestCase):
self.assertIn('id="netbox-utilities-topology-rack-width-styles"', html)
self.assertIn('.rack-device[href="/dcim/devices/334/"]', html)
self.assertIn("left: calc(50% + 3px) !important", html)
self.assertIn("netbox_utilities/topology-rack-width.js?v=0.9.9", html)
self.assertIn("netbox_utilities/topology-rack-width.js?v=0.9.10", html)
self.assertIn("left:calc(0% + 3px)!important", html)
self.assertIn("left:calc(50% + 3px)!important", html)
self.assertIn("width:calc(50% - 6px)!important", html)