modified: netbox_services/engine/__init__.py
modified: netbox_services/engine/allocators.py modified: netbox_services/engine/context.py new file: netbox_services/engine/mappers.py modified: netbox_services/engine/resolver.py new file: netbox_services/engine/templating.py modified: netbox_services/forms.py modified: netbox_services/models.py modified: netbox_services/tests/test_allocators.py new file: netbox_services/tests/test_mappers.py modified: netbox_services/tests/test_resolver.py new file: netbox_services/tests/test_templating.py Simplify layout to template and service instances
This commit is contained in:
1 parent
4ff9eac274
commit
b1c9c7a40b
12 files changed
+1133
-33
No files matched your search
@@ -1,6 +1,10 @@
|
||||
import pytest
|
||||
|
||||
from netbox_services.engine.allocators import FirstFreeIPAddressAllocator, SpecificAllocator
|
||||
from netbox_services.engine.allocators import (
|
||||
CreateAllocator,
|
||||
FirstFreeIPAddressAllocator,
|
||||
SpecificAllocator,
|
||||
)
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
@@ -41,3 +45,69 @@ class TestSpecificAllocator:
|
||||
allocator = SpecificAllocator({"strategy": "specific"})
|
||||
with pytest.raises(ValueError):
|
||||
allocator.allocate(Context(service=None))
|
||||
|
||||
|
||||
@pytest.mark.django_db
|
||||
class TestCreateAllocator:
|
||||
def test_create_returns_unsaved_instance(self, db):
|
||||
from dcim.models import Device, DeviceRole, DeviceType, Manufacturer, Site
|
||||
from netbox_services.engine.context import Context
|
||||
|
||||
mfr = Manufacturer.objects.create(name="alloc-mfr", slug="alloc-mfr")
|
||||
dt = DeviceType.objects.create(manufacturer=mfr, model="alloc-model", slug="alloc-model")
|
||||
role = DeviceRole.objects.create(name="alloc-role", slug="alloc-role")
|
||||
site = Site.objects.create(name="alloc-site", slug="alloc-site")
|
||||
|
||||
allocator = CreateAllocator({
|
||||
"strategy": "create",
|
||||
"attrs": {
|
||||
"name": "test-device",
|
||||
"device_type": dt.pk,
|
||||
"role": role.pk,
|
||||
"site": site.pk,
|
||||
"status": "active",
|
||||
},
|
||||
})
|
||||
ctx = Context(service=None)
|
||||
obj = allocator.allocate(ctx, model=Device)
|
||||
assert obj.pk is None
|
||||
assert obj.name == "test-device"
|
||||
assert obj.device_type == dt
|
||||
assert obj.role == role
|
||||
assert obj.site == site
|
||||
assert obj.status == "active"
|
||||
|
||||
def test_create_with_jinja2_attrs(self, db):
|
||||
from dcim.models import Device, DeviceRole, DeviceType, Manufacturer, Site
|
||||
from tenancy.models import Tenant
|
||||
from netbox_services.engine.context import Context
|
||||
|
||||
mfr = Manufacturer.objects.create(name="jinja-mfr", slug="jinja-mfr")
|
||||
dt = DeviceType.objects.create(manufacturer=mfr, model="jinja-model", slug="jinja-model")
|
||||
role = DeviceRole.objects.create(name="jinja-role", slug="jinja-role")
|
||||
site = Site.objects.create(name="jinja-site", slug="jinja-site")
|
||||
tenant = Tenant.objects.create(name="jinja-tenant", slug="jinja-tenant")
|
||||
|
||||
service = type("FakeService", (), {"tenant": tenant})()
|
||||
parent = Device(name="parent-dev", device_type=dt, role=role, site=site)
|
||||
|
||||
allocator = CreateAllocator({
|
||||
"strategy": "create",
|
||||
"attrs": {
|
||||
"name": "rtr-{{ service.tenant.slug }}-{{ index + 1 }}",
|
||||
"device_type": dt.pk,
|
||||
"role": role.pk,
|
||||
"site": "{{ ..site.pk }}",
|
||||
"status": "active",
|
||||
},
|
||||
})
|
||||
ctx = Context(service=service, parent_object=parent)
|
||||
obj = allocator.allocate(ctx, model=Device, index=0, ancestors=[parent])
|
||||
assert obj.name == "rtr-jinja-tenant-1"
|
||||
assert obj.site == site
|
||||
|
||||
def test_create_requires_model(self, db):
|
||||
from netbox_services.engine.context import Context
|
||||
allocator = CreateAllocator({"strategy": "create", "attrs": {}})
|
||||
with pytest.raises(ValueError):
|
||||
allocator.allocate(Context(service=None))
|
||||
Reference in new issue
Block a user