51 lines
1.8 KiB
Python
51 lines
1.8 KiB
Python
from types import SimpleNamespace
|
|
from unittest.mock import patch
|
|
|
|
from django.core.exceptions import FieldDoesNotExist, ValidationError
|
|
from django.test import SimpleTestCase
|
|
from tenancy.models import Tenant
|
|
|
|
from netbox_utilities.tenant_validation import model_supports_tenant, validate_tenant_assignment
|
|
|
|
|
|
class FakeMeta:
|
|
def __init__(self, supports_tenant=True):
|
|
self.supports_tenant = supports_tenant
|
|
|
|
def get_field(self, name):
|
|
if name != "tenant" or not self.supports_tenant:
|
|
raise FieldDoesNotExist(name)
|
|
return SimpleNamespace(concrete=True, is_relation=True, related_model=Tenant)
|
|
|
|
|
|
class TenantModel:
|
|
_meta = FakeMeta()
|
|
|
|
def __init__(self, tenant_id=None):
|
|
self.tenant_id = tenant_id
|
|
|
|
|
|
class SharedModel:
|
|
_meta = FakeMeta(supports_tenant=False)
|
|
|
|
|
|
class TenantValidationTest(SimpleTestCase):
|
|
def test_detects_tenant_capable_model(self):
|
|
self.assertTrue(model_supports_tenant(TenantModel))
|
|
self.assertFalse(model_supports_tenant(SharedModel))
|
|
|
|
@patch("netbox_utilities.tenant_validation.tenant_required", return_value=True)
|
|
def test_rejects_missing_tenant_when_required(self, _tenant_required):
|
|
with self.assertRaises(ValidationError) as context:
|
|
validate_tenant_assignment(TenantModel())
|
|
|
|
self.assertEqual(context.exception.messages, ["Für dieses Objekt muss ein Mandant angegeben werden."])
|
|
|
|
@patch("netbox_utilities.tenant_validation.tenant_required", return_value=True)
|
|
def test_accepts_assigned_tenant(self, _tenant_required):
|
|
validate_tenant_assignment(TenantModel(tenant_id=42))
|
|
|
|
@patch("netbox_utilities.tenant_validation.tenant_required", return_value=False)
|
|
def test_allows_missing_tenant_when_disabled(self, _tenant_required):
|
|
validate_tenant_assignment(TenantModel())
|