Initial commit
This commit is contained in:
commit
4ff9eac274
45 files changed
+2911
No files matched your search
@@ -0,0 +1,76 @@
|
||||
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
|
||||
Reference in new issue
Block a user