fix: restore visible rack integration widgets
This commit is contained in:
@@ -1,6 +1,7 @@
|
||||
from types import SimpleNamespace
|
||||
from unittest.mock import patch
|
||||
|
||||
from django.http import HttpResponse
|
||||
from django.test import RequestFactory, SimpleTestCase
|
||||
|
||||
from netbox_utilities.middleware import GlobalTenantFilterMiddleware
|
||||
@@ -28,6 +29,21 @@ class GlobalTenantFilterMiddlewareTest(SimpleTestCase):
|
||||
def setUp(self):
|
||||
self.factory = RequestFactory()
|
||||
|
||||
@patch("netbox_utilities.topology_views.apply_topology_rack_widths")
|
||||
@patch("netbox_utilities.middleware.GlobalTenantFilterMiddleware._get_selected_scope", return_value=None)
|
||||
def test_processes_topology_widths_after_the_view_response(self, _scope, apply_widths):
|
||||
native_response = HttpResponse("native topology")
|
||||
final_response = HttpResponse("width-aware topology")
|
||||
apply_widths.return_value = final_response
|
||||
middleware = GlobalTenantFilterMiddleware(lambda _request: native_response)
|
||||
request = self.factory.get("/plugins/netbox_topology_views/rack-elevation/?rack_id=3")
|
||||
request.session = {}
|
||||
|
||||
result = middleware(request)
|
||||
|
||||
self.assertIs(result, final_response)
|
||||
apply_widths.assert_called_once_with(request, native_response)
|
||||
|
||||
@patch("netbox_utilities.middleware.resolve")
|
||||
def test_injects_and_overrides_tenant_id(self, mocked_resolve):
|
||||
mocked_resolve.return_value = resolver_match(TenantFilterSet)
|
||||
|
||||
@@ -310,6 +310,7 @@ class ReorderRackFrontendTest(SimpleTestCase):
|
||||
self.assertIn("{% for device in reorder_devices %}", grid)
|
||||
self.assertIn('gs-w="{{ device.grid_width }}"', grid)
|
||||
self.assertIn('gs-x="{{ device.grid_x }}"', grid)
|
||||
self.assertIn("netbox-utilities-reorder-grid", grid)
|
||||
self.assertIn('json_script:"netbox-utilities-reorder-rack-width-data"', page)
|
||||
self.assertIn("netbox_utilities/reorder-rack-width.js", page)
|
||||
|
||||
@@ -343,6 +344,14 @@ class ReorderRackFrontendTest(SimpleTestCase):
|
||||
self.assertIn('gs-id="10"', rendered_grid)
|
||||
self.assertIn("LEO-Fritzbox", rendered_grid)
|
||||
|
||||
stylesheet = (Path(__file__).parents[1] / "static" / "netbox_utilities" / "netbox_utilities.css").read_text(
|
||||
encoding="utf-8"
|
||||
)
|
||||
self.assertIn('.netbox-utilities-reorder-grid[gs-column="12"]', stylesheet)
|
||||
self.assertIn('.grid-stack-item[gs-w="6"] { width: 50% !important; }', stylesheet)
|
||||
self.assertIn('.grid-stack-item[gs-w="12"] { width: 100% !important; }', stylesheet)
|
||||
self.assertIn('.grid-stack-item[gs-x="6"] { left: 50% !important; }', stylesheet)
|
||||
|
||||
def test_resolved_reorder_page_uses_server_side_width_view(self):
|
||||
view_class = resolve(reverse("dcim:rack_reorder", kwargs={"pk": 3})).func.view_class
|
||||
|
||||
@@ -405,7 +414,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.6")
|
||||
self.assertEqual(context["asset_version"], "0.9.7")
|
||||
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)
|
||||
|
||||
@@ -6,11 +6,12 @@ from django.http import HttpResponse
|
||||
from django.test import RequestFactory, SimpleTestCase
|
||||
|
||||
from netbox_utilities.topology_views import (
|
||||
_apply_topology_widths_to_device_tags,
|
||||
_inject_topology_widths,
|
||||
_topology_data_for_visible_devices,
|
||||
_visible_topology_device_urls,
|
||||
apply_topology_rack_widths,
|
||||
get_topology_rack_width_data,
|
||||
install_topology_rack_width_support,
|
||||
is_topology_rack_elevation_request,
|
||||
serialize_topology_placement,
|
||||
topology_rack_width_enabled,
|
||||
@@ -245,24 +246,40 @@ 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.6", html)
|
||||
self.assertIn("netbox_utilities/topology-rack-width.js?v=0.9.7", 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)
|
||||
|
||||
def test_patches_the_optional_topology_view_only_once(self):
|
||||
def original_get(self, request):
|
||||
return self, request
|
||||
def test_preserves_existing_topology_style_while_applying_width(self):
|
||||
data = {
|
||||
"devices": [
|
||||
{
|
||||
"url": "/dcim/devices/334/",
|
||||
"left_percent": 0,
|
||||
"width_percent": 50,
|
||||
}
|
||||
]
|
||||
}
|
||||
html = (
|
||||
'<a class="rack-device" href="/dcim/devices/334/" '
|
||||
'style="bottom: 10%; height: 2%; border-color: #f00">Fritzbox</a>'
|
||||
)
|
||||
|
||||
class RackElevationView:
|
||||
get = original_get
|
||||
result = _apply_topology_widths_to_device_tags(html, data)
|
||||
|
||||
module = SimpleNamespace(RackElevationView=RackElevationView)
|
||||
with (
|
||||
patch("netbox_utilities.topology_views.apps.is_installed", return_value=True),
|
||||
patch("netbox_utilities.topology_views.get_plugin_config", return_value=True),
|
||||
patch("netbox_utilities.topology_views.import_module", return_value=module),
|
||||
):
|
||||
self.assertTrue(install_topology_rack_width_support())
|
||||
patched_get = RackElevationView.get
|
||||
self.assertTrue(install_topology_rack_width_support())
|
||||
self.assertIn("bottom: 10%", result)
|
||||
self.assertIn("height: 2%", result)
|
||||
self.assertIn("left:calc(0% + 3px)!important", result)
|
||||
self.assertIn("width:calc(50% - 6px)!important", result)
|
||||
|
||||
self.assertIs(RackElevationView.get, patched_get)
|
||||
self.assertIs(RackElevationView._netbox_utilities_original_get, original_get)
|
||||
@patch("netbox_utilities.topology_views._inject_topology_widths")
|
||||
@patch("netbox_utilities.topology_views.topology_rack_width_enabled", return_value=True)
|
||||
def test_response_processor_runs_after_the_topology_view(self, _enabled, inject):
|
||||
response = HttpResponse("<html></html>")
|
||||
inject.return_value = response
|
||||
|
||||
result = apply_topology_rack_widths(self.request, response)
|
||||
|
||||
self.assertIs(result, response)
|
||||
inject.assert_called_once_with(response)
|
||||
|
||||
Reference in New Issue
Block a user