فهرست منبع

Add circuit cloud filters & tests

Jeremy Stretch 4 سال پیش
والد
کامیت
d45a17247d
3فایلهای تغییر یافته به همراه57 افزوده شده و 10 حذف شده
  1. 5 0
      netbox/circuits/filters.py
  2. 10 1
      netbox/circuits/forms.py
  3. 42 9
      netbox/circuits/tests/test_filters.py

+ 5 - 0
netbox/circuits/filters.py

@@ -132,6 +132,11 @@ class CircuitFilterSet(BaseFilterSet, CustomFieldModelFilterSet, TenancyFilterSe
         to_field_name='slug',
         label='Provider (slug)',
     )
+    cloud_id = django_filters.ModelMultipleChoiceFilter(
+        field_name='terminations__cloud',
+        queryset=Cloud.objects.all(),
+        label='Cloud (ID)',
+    )
     type_id = django_filters.ModelMultipleChoiceFilter(
         queryset=CircuitType.objects.all(),
         label='Circuit type (ID)',

+ 10 - 1
netbox/circuits/forms.py

@@ -357,7 +357,8 @@ class CircuitBulkEditForm(BootstrapMixin, AddRemoveTagsForm, CustomFieldBulkEdit
 class CircuitFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldFilterForm):
     model = Circuit
     field_order = [
-        'q', 'type_id', 'provider_id', 'status', 'region_id', 'site_id', 'tenant_group_id', 'tenant_id', 'commit_rate',
+        'q', 'type_id', 'provider_id', 'cloud_id', 'status', 'region_id', 'site_id', 'tenant_group_id', 'tenant_id',
+        'commit_rate',
     ]
     q = forms.CharField(
         required=False,
@@ -373,6 +374,14 @@ class CircuitFilterForm(BootstrapMixin, TenancyFilterForm, CustomFieldFilterForm
         required=False,
         label=_('Provider')
     )
+    cloud_id = DynamicModelMultipleChoiceField(
+        queryset=Cloud.objects.all(),
+        required=False,
+        query_params={
+            'provider_id': '$provider_id'
+        },
+        label=_('Cloud')
+    )
     status = forms.MultipleChoiceField(
         choices=CircuitStatusChoices,
         required=False,

+ 42 - 9
netbox/circuits/tests/test_filters.py

@@ -186,6 +186,13 @@ class CircuitTestCase(TestCase):
         )
         Provider.objects.bulk_create(providers)
 
+        clouds = (
+            Cloud(name='Cloud 1', provider=providers[1]),
+            Cloud(name='Cloud 2', provider=providers[1]),
+            Cloud(name='Cloud 3', provider=providers[1]),
+        )
+        Cloud.objects.bulk_create(clouds)
+
         circuits = (
             Circuit(provider=providers[0], tenant=tenants[0], type=circuit_types[0], cid='Test Circuit 1', install_date='2020-01-01', commit_rate=1000, status=CircuitStatusChoices.STATUS_ACTIVE),
             Circuit(provider=providers[0], tenant=tenants[0], type=circuit_types[0], cid='Test Circuit 2', install_date='2020-01-02', commit_rate=2000, status=CircuitStatusChoices.STATUS_ACTIVE),
@@ -200,6 +207,9 @@ class CircuitTestCase(TestCase):
             CircuitTermination(circuit=circuits[0], site=sites[0], term_side='A'),
             CircuitTermination(circuit=circuits[1], site=sites[1], term_side='A'),
             CircuitTermination(circuit=circuits[2], site=sites[2], term_side='A'),
+            CircuitTermination(circuit=circuits[3], cloud=clouds[0], term_side='A'),
+            CircuitTermination(circuit=circuits[4], cloud=clouds[1], term_side='A'),
+            CircuitTermination(circuit=circuits[5], cloud=clouds[2], term_side='A'),
         ))
         CircuitTermination.objects.bulk_create(circuit_terminations)
 
@@ -226,6 +236,11 @@ class CircuitTestCase(TestCase):
         params = {'provider': [provider.slug]}
         self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3)
 
+    def test_cloud(self):
+        clouds = Cloud.objects.all()[:2]
+        params = {'cloud_id': [clouds[0].pk, clouds[1].pk]}
+        self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
+
     def test_type(self):
         circuit_type = CircuitType.objects.first()
         params = {'type_id': [circuit_type.pk]}
@@ -281,14 +296,14 @@ class CircuitTerminationTestCase(TestCase):
     def setUpTestData(cls):
 
         sites = (
-            Site(name='Test Site 1', slug='test-site-1'),
-            Site(name='Test Site 2', slug='test-site-2'),
-            Site(name='Test Site 3', slug='test-site-3'),
+            Site(name='Site 1', slug='site-1'),
+            Site(name='Site 2', slug='site-2'),
+            Site(name='Site 3', slug='site-3'),
         )
         Site.objects.bulk_create(sites)
 
         circuit_types = (
-            CircuitType(name='Test Circuit Type 1', slug='test-circuit-type-1'),
+            CircuitType(name='Circuit Type 1', slug='circuit-type-1'),
         )
         CircuitType.objects.bulk_create(circuit_types)
 
@@ -297,10 +312,20 @@ class CircuitTerminationTestCase(TestCase):
         )
         Provider.objects.bulk_create(providers)
 
+        clouds = (
+            Cloud(name='Cloud 1', provider=providers[0]),
+            Cloud(name='Cloud 2', provider=providers[0]),
+            Cloud(name='Cloud 3', provider=providers[0]),
+        )
+        Cloud.objects.bulk_create(clouds)
+
         circuits = (
-            Circuit(provider=providers[0], type=circuit_types[0], cid='Test Circuit 1'),
-            Circuit(provider=providers[0], type=circuit_types[0], cid='Test Circuit 2'),
-            Circuit(provider=providers[0], type=circuit_types[0], cid='Test Circuit 3'),
+            Circuit(provider=providers[0], type=circuit_types[0], cid='Circuit 1'),
+            Circuit(provider=providers[0], type=circuit_types[0], cid='Circuit 2'),
+            Circuit(provider=providers[0], type=circuit_types[0], cid='Circuit 3'),
+            Circuit(provider=providers[0], type=circuit_types[0], cid='Circuit 4'),
+            Circuit(provider=providers[0], type=circuit_types[0], cid='Circuit 5'),
+            Circuit(provider=providers[0], type=circuit_types[0], cid='Circuit 6'),
         )
         Circuit.objects.bulk_create(circuits)
 
@@ -311,6 +336,9 @@ class CircuitTerminationTestCase(TestCase):
             CircuitTermination(circuit=circuits[1], site=sites[2], term_side='Z', port_speed=2000, upstream_speed=2000, xconnect_id='JKL'),
             CircuitTermination(circuit=circuits[2], site=sites[2], term_side='A', port_speed=3000, upstream_speed=3000, xconnect_id='MNO'),
             CircuitTermination(circuit=circuits[2], site=sites[0], term_side='Z', port_speed=3000, upstream_speed=3000, xconnect_id='PQR'),
+            CircuitTermination(circuit=circuits[3], cloud=clouds[0], term_side='A'),
+            CircuitTermination(circuit=circuits[4], cloud=clouds[1], term_side='A'),
+            CircuitTermination(circuit=circuits[5], cloud=clouds[2], term_side='A'),
         ))
         CircuitTermination.objects.bulk_create(circuit_terminations)
 
@@ -318,7 +346,7 @@ class CircuitTerminationTestCase(TestCase):
 
     def test_term_side(self):
         params = {'term_side': 'A'}
-        self.assertEqual(self.filterset(params, self.queryset).qs.count(), 3)
+        self.assertEqual(self.filterset(params, self.queryset).qs.count(), 6)
 
     def test_port_speed(self):
         params = {'port_speed': ['1000', '2000']}
@@ -344,6 +372,11 @@ class CircuitTerminationTestCase(TestCase):
         params = {'site': [sites[0].slug, sites[1].slug]}
         self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
 
+    def test_cloud(self):
+        clouds = Cloud.objects.all()[:2]
+        params = {'cloud_id': [clouds[0].pk, clouds[1].pk]}
+        self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
+
     def test_cabled(self):
         params = {'cabled': True}
         self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
@@ -352,7 +385,7 @@ class CircuitTerminationTestCase(TestCase):
         params = {'connected': True}
         self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
         params = {'connected': False}
-        self.assertEqual(self.filterset(params, self.queryset).qs.count(), 4)
+        self.assertEqual(self.filterset(params, self.queryset).qs.count(), 7)
 
 
 class CloudTestCase(TestCase):