mirror of
https://github.com/netbox-community/netbox.git
synced 2025-08-25 08:46:10 -06:00
Add tests for object type validation
This commit is contained in:
parent
bbcec4ffff
commit
8b0633ebf2
@ -821,6 +821,10 @@ class TagTestCase(TestCase, ChangeLoggedFilterSetTests):
|
||||
|
||||
@classmethod
|
||||
def setUpTestData(cls):
|
||||
content_types = {
|
||||
'site': ContentType.objects.get_by_natural_key('dcim', 'site'),
|
||||
'provider': ContentType.objects.get_by_natural_key('circuits', 'provider'),
|
||||
}
|
||||
|
||||
tags = (
|
||||
Tag(name='Tag 1', slug='tag-1', color='ff0000', description='foobar1'),
|
||||
@ -828,6 +832,8 @@ class TagTestCase(TestCase, ChangeLoggedFilterSetTests):
|
||||
Tag(name='Tag 3', slug='tag-3', color='0000ff'),
|
||||
)
|
||||
Tag.objects.bulk_create(tags)
|
||||
tags[0].object_types.add(content_types['site'])
|
||||
tags[1].object_types.add(content_types['provider'])
|
||||
|
||||
# Apply some tags so we can filter by content type
|
||||
site = Site.objects.create(name='Site 1', slug='site-1')
|
||||
@ -860,6 +866,18 @@ class TagTestCase(TestCase, ChangeLoggedFilterSetTests):
|
||||
params = {'content_type_id': [site_ct, provider_ct]}
|
||||
self.assertEqual(self.filterset(params, self.queryset).qs.count(), 2)
|
||||
|
||||
def test_object_types(self):
|
||||
params = {'for_object_type_id': [ContentType.objects.get_by_natural_key('dcim', 'site').pk]}
|
||||
self.assertEqual(
|
||||
list(self.filterset(params, self.queryset).qs.values_list('name', flat=True)),
|
||||
['Tag 1', 'Tag 3']
|
||||
)
|
||||
params = {'for_object_type_id': [ContentType.objects.get_by_natural_key('circuits', 'provider').pk]}
|
||||
self.assertEqual(
|
||||
list(self.filterset(params, self.queryset).qs.values_list('name', flat=True)),
|
||||
['Tag 2', 'Tag 3']
|
||||
)
|
||||
|
||||
|
||||
class ObjectChangeTestCase(TestCase, BaseFilterSetTests):
|
||||
queryset = ObjectChange.objects.all()
|
||||
|
@ -1,8 +1,10 @@
|
||||
from django.contrib.contenttypes.models import ContentType
|
||||
from django.test import TestCase
|
||||
|
||||
from dcim.models import Device, DeviceRole, DeviceType, Location, Manufacturer, Platform, Region, Site, SiteGroup
|
||||
from extras.models import ConfigContext, Tag
|
||||
from tenancy.models import Tenant, TenantGroup
|
||||
from utilities.exceptions import AbortRequest
|
||||
from virtualization.models import Cluster, ClusterGroup, ClusterType, VirtualMachine
|
||||
|
||||
|
||||
@ -14,6 +16,22 @@ class TagTest(TestCase):
|
||||
|
||||
self.assertEqual(tag.slug, 'testing-unicode-台灣')
|
||||
|
||||
def test_object_type_validation(self):
|
||||
region = Region.objects.create(name='Region 1', slug='region-1')
|
||||
sitegroup = SiteGroup.objects.create(name='Site Group 1', slug='site-group-1')
|
||||
|
||||
# Create a Tag that can only be applied to Regions
|
||||
tag = Tag.objects.create(name='Tag 1', slug='tag-1')
|
||||
tag.object_types.add(ContentType.objects.get_by_natural_key('dcim', 'region'))
|
||||
|
||||
# Apply the Tag to a Region
|
||||
region.tags.add(tag)
|
||||
self.assertIn(tag, region.tags.all())
|
||||
|
||||
# Apply the Tag to a SiteGroup
|
||||
with self.assertRaises(AbortRequest):
|
||||
sitegroup.tags.add(tag)
|
||||
|
||||
|
||||
class ConfigContextTest(TestCase):
|
||||
"""
|
||||
|
Loading…
Reference in New Issue
Block a user