diff --git a/awx/main/tasks.py b/awx/main/tasks.py index dc3c8df28b..e6c2fa584a 100644 --- a/awx/main/tasks.py +++ b/awx/main/tasks.py @@ -558,6 +558,9 @@ def delete_inventory(self, inventory_id, user_id): i = Inventory.objects.get(id=inventory_id) for host in i.hosts.iterator(): host.job_events_as_primary_host.update(host=None) + for topology_rel in i.topologyinventory_set.iterator(): + topology_rel.topology.delete() + topology_rel.delete() i.delete() emit_channel_notification( 'inventories-status_changed', diff --git a/awx/network_ui/tests/functional/test_models.py b/awx/network_ui/tests/functional/test_models.py index e392662a99..8592061672 100644 --- a/awx/network_ui/tests/functional/test_models.py +++ b/awx/network_ui/tests/functional/test_models.py @@ -1,6 +1,13 @@ +import pytest +import inspect -from awx.network_ui.models import Device, Topology, Interface +from awx.network_ui.models import Device, Topology, Interface, Link + +from awx.main.models import Organization, Inventory +from awx.main.tasks import delete_inventory + +from django.db.models import Model def test_device(): @@ -13,3 +20,35 @@ def test_topology(): def test_interface(): assert str(Interface(name="foo")) == "foo" + + +@pytest.mark.django_db +def test_deletion(): + org = Organization.objects.create(name='Default') + inv = Inventory.objects.create(name='inv', organization=org) + host1 = inv.hosts.create(name='foo') + host2 = inv.hosts.create(name='bar') + topology = Topology.objects.create( + name='inv', scale=1.0, panX=0.0, panY=0.0 + ) + inv.topologyinventory_set.create(topology=topology) + device1 = topology.device_set.create(name='foo', host=host1, x=0.0, y=0.0, cid=1) + interface1 = Interface.objects.create(device=device1, name='foo', cid=2) + device2 = topology.device_set.create(name='bar', host=host2, x=0.0, y=0.0, cid=3) + interface2 = Interface.objects.create(device=device2, name='bar', cid=4) + Link.objects.create( + from_device=device1, to_device=device2, + from_interface=interface1, to_interface=interface2, + cid=10 + ) + + network_ui_models = [] + from awx.network_ui import models as network_models + for name, model in vars(network_models).items(): + if not inspect.isclass(model) or not issubclass(model, Model): + continue + network_ui_models.append(model) + + delete_inventory.run(inv.pk, None) + for cls in network_ui_models: + assert cls.objects.count() == 0, cls