|
|
@@ -7,7 +7,9 @@ from django.test import TestCase
|
|
|
|
|
|
from circuits.models import Provider
|
|
|
from dcim.models import DeviceRole, DeviceType, Manufacturer, Platform, Rack, Region, Site, SiteGroup
|
|
|
-from extras.choices import JournalEntryKindChoices, ObjectChangeActionChoices
|
|
|
+from extras.choices import (
|
|
|
+ CustomFieldTypeChoices, CustomFieldFilterLogicChoices, JournalEntryKindChoices, ObjectChangeActionChoices,
|
|
|
+)
|
|
|
from extras.filtersets import *
|
|
|
from extras.models import *
|
|
|
from ipam.models import IPAddress
|
|
|
@@ -16,6 +18,65 @@ from utilities.testing import BaseFilterSetTests, ChangeLoggedFilterSetTests, cr
|
|
|
from virtualization.models import Cluster, ClusterGroup, ClusterType
|
|
|
|
|
|
|
|
|
+class CustomFieldTestCase(TestCase, BaseFilterSetTests):
|
|
|
+ queryset = CustomField.objects.all()
|
|
|
+ filterset = CustomFieldFilterSet
|
|
|
+
|
|
|
+ @classmethod
|
|
|
+ def setUpTestData(cls):
|
|
|
+ content_types = ContentType.objects.filter(model__in=['site', 'rack', 'device'])
|
|
|
+
|
|
|
+ custom_fields = (
|
|
|
+ CustomField(
|
|
|
+ name='Custom Field 1',
|
|
|
+ type=CustomFieldTypeChoices.TYPE_TEXT,
|
|
|
+ required=True,
|
|
|
+ weight=100,
|
|
|
+ filter_logic=CustomFieldFilterLogicChoices.FILTER_LOOSE
|
|
|
+ ),
|
|
|
+ CustomField(
|
|
|
+ name='Custom Field 2',
|
|
|
+ type=CustomFieldTypeChoices.TYPE_INTEGER,
|
|
|
+ required=False,
|
|
|
+ weight=200,
|
|
|
+ filter_logic=CustomFieldFilterLogicChoices.FILTER_EXACT
|
|
|
+ ),
|
|
|
+ CustomField(
|
|
|
+ name='Custom Field 3',
|
|
|
+ type=CustomFieldTypeChoices.TYPE_BOOLEAN,
|
|
|
+ required=False,
|
|
|
+ weight=300,
|
|
|
+ filter_logic=CustomFieldFilterLogicChoices.FILTER_DISABLED
|
|
|
+ ),
|
|
|
+ )
|
|
|
+ CustomField.objects.bulk_create(custom_fields)
|
|
|
+ custom_fields[0].content_types.add(content_types[0])
|
|
|
+ custom_fields[1].content_types.add(content_types[1])
|
|
|
+ custom_fields[2].content_types.add(content_types[2])
|
|
|
+
|
|
|
+ def test_name(self):
|
|
|
+ params = {'name': ['Custom Field 1', 'Custom Field 2']}
|
|
|
+ self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
|
|
+
|
|
|
+ def test_content_types(self):
|
|
|
+ params = {'content_types': 'dcim.site'}
|
|
|
+ self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
|
|
|
+ params = {'content_type_id': [ContentType.objects.get_for_model(Site).pk]}
|
|
|
+ self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
|
|
|
+
|
|
|
+ def test_required(self):
|
|
|
+ params = {'required': True}
|
|
|
+ self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
|
|
|
+
|
|
|
+ def test_weight(self):
|
|
|
+ params = {'weight': [100, 200]}
|
|
|
+ self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
|
|
+
|
|
|
+ def test_filter_logic(self):
|
|
|
+ params = {'filter_logic': CustomFieldFilterLogicChoices.FILTER_LOOSE}
|
|
|
+ self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
|
|
|
+
|
|
|
+
|
|
|
class WebhookTestCase(TestCase, BaseFilterSetTests):
|
|
|
queryset = Webhook.objects.all()
|
|
|
filterset = WebhookFilterSet
|
|
|
@@ -62,6 +123,8 @@ class WebhookTestCase(TestCase, BaseFilterSetTests):
|
|
|
def test_content_types(self):
|
|
|
params = {'content_types': 'dcim.site'}
|
|
|
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
|
|
|
+ params = {'content_type_id': [ContentType.objects.get_for_model(Site).pk]}
|
|
|
+ self.assertEqual(self.filterset(params, self.queryset).qs.count(), 1)
|
|
|
|
|
|
def test_type_create(self):
|
|
|
params = {'type_create': True}
|