from typing import ClassVar from django.db import models from netbox_export.services.importer import _field_kwargs from netbox_export.services.references import ReferenceResolver class Tenant(models.Model): class Meta: app_label = "tenancy" class TenantManagedObject(models.Model): tenant = models.ForeignKey(Tenant, on_delete=models.PROTECT, null=True) class Meta: app_label = "compat_tests" class Platform(models.Model): class Meta: app_label = "compat_tests" class ConstrainedInstallation(models.Model): platform = models.ForeignKey(Platform, on_delete=models.PROTECT, null=True) class Meta: app_label = "compat_tests" constraints: ClassVar[list] = [ models.CheckConstraint( condition=models.Q(platform__isnull=False), name="compat_tests_installation_platform", ) ] def tenant_record(): return { "fields": {}, "relations": {"tenant": {"ref": "tenancy.tenant:23"}}, } def test_unresolved_tenant_always_blocks_initial_save(): resolver = ReferenceResolver({}, [], lambda label: None) kwargs, unresolved, unresolved_values, missing_required = _field_kwargs( TenantManagedObject, tenant_record(), resolver, tenant_required=True, ) assert kwargs is None assert unresolved == [] assert unresolved_values == [] assert missing_required == [] def test_unresolved_tenant_also_blocks_when_policy_detection_is_unavailable(): resolver = ReferenceResolver({}, [], lambda label: None) kwargs, unresolved, unresolved_values, missing_required = _field_kwargs( TenantManagedObject, tenant_record(), resolver, tenant_required=False, ) assert kwargs is None assert unresolved == [] assert unresolved_values == [] assert missing_required == [] def test_unresolved_relation_in_check_constraint_blocks_initial_save(): resolver = ReferenceResolver({}, [], lambda label: None) record = { "fields": {}, "relations": {"platform": {"ref": "compat_tests.platform:5"}}, } kwargs, unresolved, unresolved_values, missing_required = _field_kwargs( ConstrainedInstallation, record, resolver, tenant_required=False, ) assert kwargs is None assert unresolved == [] assert unresolved_values == [] assert missing_required == []