Browse Source

Added some simple tests for custom fields

Jeremy Stretch 8 years ago
parent
commit
af459cd19b
2 changed files with 96 additions and 0 deletions
  1. 0 0
      netbox/extras/tests/__init__.py
  2. 96 0
      netbox/extras/tests/test_customfields.py

+ 0 - 0
netbox/extras/tests/__init__.py


+ 96 - 0
netbox/extras/tests/test_customfields.py

@@ -0,0 +1,96 @@
+from datetime import date
+
+from django.contrib.contenttypes.models import ContentType
+from django.test import TestCase
+
+from dcim.models import Site
+
+from extras.models import (
+    CustomField, CustomFieldValue, CustomFieldChoice, CF_TYPE_TEXT, CF_TYPE_INTEGER, CF_TYPE_BOOLEAN, CF_TYPE_DATE,
+    CF_TYPE_SELECT,
+)
+
+
+class RackTestCase(TestCase):
+
+    def setUp(self):
+
+        Site.objects.bulk_create([
+            Site(name='Site A', slug='site-a'),
+            Site(name='Site B', slug='site-b'),
+            Site(name='Site C', slug='site-c'),
+        ])
+
+    def test_simple_fields(self):
+
+        DATA = (
+            {'field_type': CF_TYPE_TEXT, 'field_value': 'Foobar!', 'empty_value': ''},
+            {'field_type': CF_TYPE_INTEGER, 'field_value': 0, 'empty_value': None},
+            {'field_type': CF_TYPE_INTEGER, 'field_value': 42, 'empty_value': None},
+            {'field_type': CF_TYPE_BOOLEAN, 'field_value': True, 'empty_value': None},
+            {'field_type': CF_TYPE_BOOLEAN, 'field_value': False, 'empty_value': None},
+            {'field_type': CF_TYPE_DATE, 'field_value': date(2016, 6, 23), 'empty_value': None},
+        )
+
+        obj_type = ContentType.objects.get_for_model(Site)
+
+        for data in DATA:
+
+            # Create a custom field
+            cf = CustomField(type=data['field_type'], name='my_field', required=False)
+            cf.save()
+            cf.obj_type = [obj_type]
+            cf.save()
+
+            # Assign a value to the first Site
+            site = Site.objects.first()
+            cfv = CustomFieldValue(field=cf, obj_type=obj_type, obj_id=site.id)
+            cfv.value = data['field_value']
+            cfv.save()
+
+            # Retrieve the stored value
+            cfv = CustomFieldValue.objects.filter(obj_type=obj_type, obj_id=site.pk).first()
+            self.assertEqual(cfv.value, data['field_value'])
+
+            # Delete the stored value
+            cfv.value = data['empty_value']
+            cfv.save()
+            self.assertEqual(CustomFieldValue.objects.filter(obj_type=obj_type, obj_id=site.pk).count(), 0)
+
+            # Delete the custom field
+            cf.delete()
+
+    def test_select_field(self):
+
+        obj_type = ContentType.objects.get_for_model(Site)
+
+        # Create a custom field
+        cf = CustomField(type=CF_TYPE_SELECT, name='my_field', required=False)
+        cf.save()
+        cf.obj_type = [obj_type]
+        cf.save()
+
+        # Create some choices for the field
+        CustomFieldChoice.objects.bulk_create([
+            CustomFieldChoice(field=cf, value='Option A'),
+            CustomFieldChoice(field=cf, value='Option B'),
+            CustomFieldChoice(field=cf, value='Option C'),
+        ])
+
+        # Assign a value to the first Site
+        site = Site.objects.first()
+        cfv = CustomFieldValue(field=cf, obj_type=obj_type, obj_id=site.id)
+        cfv.value = cf.choices.first()
+        cfv.save()
+
+        # Retrieve the stored value
+        cfv = CustomFieldValue.objects.filter(obj_type=obj_type, obj_id=site.pk).first()
+        self.assertEqual(str(cfv.value), 'Option A')
+
+        # Delete the stored value
+        cfv.value = None
+        cfv.save()
+        self.assertEqual(CustomFieldValue.objects.filter(obj_type=obj_type, obj_id=site.pk).count(), 0)
+
+        # Delete the custom field
+        cf.delete()