Files
2026-08-16 13:10:26 +02:00

77 lines
2.9 KiB
Python

import pytest
from netbox_services.engine.context import Context
from netbox_services.engine.selectors import NetBoxFilterSelector, ReferenceSelector
@pytest.mark.django_db
class TestContext:
def test_resolve_service(self, service):
ctx = Context(service=service)
assert ctx.resolve_path("service") is service
def test_resolve_parent_none(self, service):
ctx = Context(service=service)
assert ctx.resolve_path("parent") is None
def test_resolve_dotted_path(self, service, service_template):
ctx = Context(service=service)
assert ctx.resolve_path("service.service_template") is service_template
def test_resolve_deep_path(self, service, service_template):
ctx = Context(service=service)
assert ctx.resolve_path("service.service_template.name") == service_template.name
def test_resolve_missing_attr(self, service):
ctx = Context(service=service)
assert ctx.resolve_path("service.nonexistent") is None
def test_child_context(self, service):
ctx = Context(service=service)
parent_obj = object()
child = ctx.child(parent_obj)
assert child.service is service
assert child.parent_object is parent_obj
@pytest.mark.django_db
class TestNetBoxFilterSelector:
def test_filter_devices(self, db):
from dcim.models import Device, DeviceRole, DeviceType, Manufacturer, Site
site = Site.objects.create(name="sel-site", slug="sel-site")
mfr = Manufacturer.objects.create(name="sel-mfr", slug="sel-mfr")
dt = DeviceType.objects.create(manufacturer=mfr, model="sel-model", slug="sel-model")
role = DeviceRole.objects.create(name="sel-router", slug="sel-router")
Device.objects.create(name="r1", site=site, device_type=dt, role=role)
Device.objects.create(name="r2", site=site, device_type=dt, role=role)
sel = NetBoxFilterSelector({"type": "netbox_filter", "filters": {"role": ["sel-router"]}})
qs = sel.resolve(Context(service=None), Device)
assert qs.count() == 2
@pytest.mark.django_db
class TestReferenceSelector:
def test_resolve_reference(self, db):
from dcim.models import Site
site = Site.objects.create(name="ref-site", slug="ref-site")
ctx = Context(service=None, parent_object=site)
sel = ReferenceSelector({"type": "reference", "path": "parent"})
qs = sel.resolve(ctx, Site)
assert qs.first() == site
@pytest.mark.django_db
class TestPrefixSelector:
def test_prefix_by_filter(self, db):
from ipam.models import Prefix
from netbox_services.engine.selectors import PrefixSelector
Prefix.objects.create(prefix="10.0.0.0/24")
Prefix.objects.create(prefix="10.1.0.0/24")
sel = PrefixSelector({"type": "prefix", "filters": {}})
qs = sel.resolve(Context(service=None), Prefix)
assert qs.count() == 2