mirror of
https://github.com/netbox-community/netbox.git
synced 2026-04-11 03:37:06 +02:00
Closes #15490: CustomValidator support for accessing related object attribute via dotted path
This commit is contained in:
@@ -4,7 +4,7 @@ from django.db import transaction
|
||||
from django.test import TestCase, override_settings
|
||||
|
||||
from dcim.choices import SiteStatusChoices
|
||||
from dcim.models import Site
|
||||
from dcim.models import Site, Region
|
||||
from extras.validators import CustomValidator
|
||||
from ipam.models import ASN, RIR
|
||||
from users.models import User
|
||||
@@ -82,6 +82,13 @@ prohibited_validator = CustomValidator({
|
||||
})
|
||||
|
||||
|
||||
region_validator = CustomValidator({
|
||||
'region.name': {
|
||||
'eq': 'Bar',
|
||||
}
|
||||
})
|
||||
|
||||
|
||||
request_validator = CustomValidator({
|
||||
'request.user.username': {
|
||||
'eq': 'Bob'
|
||||
@@ -154,6 +161,20 @@ class CustomValidatorTest(TestCase):
|
||||
def test_valid(self):
|
||||
Site(name='abcdef123', slug='abcdef123').clean()
|
||||
|
||||
@override_settings(CUSTOM_VALIDATORS={'dcim.site': [region_validator]})
|
||||
def test_valid(self):
|
||||
region1 = Region(name='Foo', slug='foo')
|
||||
region1.save()
|
||||
region2 = Region(name='Bar', slug='bar')
|
||||
region2.save()
|
||||
|
||||
# Invalid region
|
||||
with self.assertRaises(ValidationError):
|
||||
Site(name='abcdef123', slug='abcdef123', region=region1).clean()
|
||||
|
||||
# Valid region
|
||||
Site(name='abcdef123', slug='abcdef123', region=region2).clean()
|
||||
|
||||
@override_settings(CUSTOM_VALIDATORS={'dcim.site': [custom_validator]})
|
||||
def test_custom_invalid(self):
|
||||
with self.assertRaises(ValidationError):
|
||||
@@ -207,7 +228,7 @@ class CustomValidatorConfigTest(TestCase):
|
||||
@override_settings(
|
||||
CUSTOM_VALIDATORS={
|
||||
'dcim.site': (
|
||||
'extras.tests.test_customvalidation.MyValidator',
|
||||
'extras.tests.test_customvalidators.MyValidator',
|
||||
)
|
||||
}
|
||||
)
|
||||
@@ -254,7 +275,7 @@ class ProtectionRulesConfigTest(TestCase):
|
||||
@override_settings(
|
||||
PROTECTION_RULES={
|
||||
'dcim.site': (
|
||||
'extras.tests.test_customvalidation.MyValidator',
|
||||
'extras.tests.test_customvalidators.MyValidator',
|
||||
)
|
||||
}
|
||||
)
|
||||
Reference in New Issue
Block a user