feat: add tenant groups and required tenancy
This commit is contained in:
@@ -4,6 +4,7 @@ from unittest.mock import patch
|
||||
from django.test import RequestFactory, SimpleTestCase
|
||||
|
||||
from netbox_utilities.middleware import GlobalTenantFilterMiddleware
|
||||
from netbox_utilities.tenant_scope import ActiveTenantScope
|
||||
|
||||
|
||||
class TenantFilterSet:
|
||||
@@ -32,7 +33,8 @@ class GlobalTenantFilterMiddlewareTest(SimpleTestCase):
|
||||
mocked_resolve.return_value = resolver_match(TenantFilterSet)
|
||||
request = self.factory.get("/dcim/devices/?tenant_id=7&status=active")
|
||||
|
||||
GlobalTenantFilterMiddleware._inject_filter_parameter(request, 42)
|
||||
scope = ActiveTenantScope("tenant", 42, frozenset({42}))
|
||||
GlobalTenantFilterMiddleware._inject_filter_parameter(request, scope)
|
||||
|
||||
self.assertEqual(request.GET.getlist("tenant_id"), ["42"])
|
||||
self.assertEqual(request.GET["status"], "active")
|
||||
@@ -42,7 +44,8 @@ class GlobalTenantFilterMiddlewareTest(SimpleTestCase):
|
||||
mocked_resolve.return_value = resolver_match(SharedFilterSet)
|
||||
request = self.factory.get("/dcim/manufacturers/?status=active")
|
||||
|
||||
GlobalTenantFilterMiddleware._inject_filter_parameter(request, 42)
|
||||
scope = ActiveTenantScope("tenant", 42, frozenset({42}))
|
||||
GlobalTenantFilterMiddleware._inject_filter_parameter(request, scope)
|
||||
|
||||
self.assertNotIn("tenant_id", request.GET)
|
||||
self.assertEqual(request.GET["status"], "active")
|
||||
@@ -52,6 +55,40 @@ class GlobalTenantFilterMiddlewareTest(SimpleTestCase):
|
||||
mocked_resolve.return_value = resolver_match(None, "tenancy:tenant_list")
|
||||
request = self.factory.get("/tenancy/tenants/")
|
||||
|
||||
GlobalTenantFilterMiddleware._inject_filter_parameter(request, 42)
|
||||
scope = ActiveTenantScope("tenant", 42, frozenset({42}))
|
||||
GlobalTenantFilterMiddleware._inject_filter_parameter(request, scope)
|
||||
|
||||
self.assertEqual(request.GET.getlist("id"), ["42"])
|
||||
|
||||
@patch("netbox_utilities.middleware.resolve")
|
||||
def test_injects_tenant_group(self, mocked_resolve):
|
||||
class TenantGroupFilterSet:
|
||||
base_filters = {"tenant_id": object(), "tenant_group_id": object()}
|
||||
|
||||
mocked_resolve.return_value = resolver_match(TenantGroupFilterSet)
|
||||
request = self.factory.get("/dcim/devices/")
|
||||
|
||||
scope = ActiveTenantScope("group", 8, frozenset({42, 43}))
|
||||
GlobalTenantFilterMiddleware._inject_filter_parameter(request, scope)
|
||||
|
||||
self.assertEqual(request.GET.getlist("tenant_group_id"), ["8"])
|
||||
|
||||
@patch("netbox_utilities.middleware.resolve")
|
||||
def test_group_falls_back_to_tenant_ids(self, mocked_resolve):
|
||||
mocked_resolve.return_value = resolver_match(TenantFilterSet)
|
||||
request = self.factory.get("/dcim/virtual-chassis/")
|
||||
|
||||
scope = ActiveTenantScope("group", 8, frozenset({42, 43}))
|
||||
GlobalTenantFilterMiddleware._inject_filter_parameter(request, scope)
|
||||
|
||||
self.assertCountEqual(request.GET.getlist("tenant_id"), ["42", "43"])
|
||||
|
||||
@patch("netbox_utilities.middleware.resolve")
|
||||
def test_tenant_group_list_includes_descendant_groups(self, mocked_resolve):
|
||||
mocked_resolve.return_value = resolver_match(None, "tenancy:tenantgroup_list")
|
||||
request = self.factory.get("/tenancy/tenant-groups/")
|
||||
|
||||
scope = ActiveTenantScope("group", 8, frozenset({42}), frozenset({8, 9}))
|
||||
GlobalTenantFilterMiddleware._inject_filter_parameter(request, scope)
|
||||
|
||||
self.assertCountEqual(request.GET.getlist("id"), ["8", "9"])
|
||||
|
||||
Reference in New Issue
Block a user