From a212725d2e6c3d0f240d800823d6247eaa305360 Mon Sep 17 00:00:00 2001 From: Jeremy Stretch Date: Fri, 17 Nov 2023 08:21:19 -0500 Subject: [PATCH] Add tests for render-config API endpoint --- netbox/dcim/tests/test_api.py | 17 +++++++++++++++++ netbox/extras/api/mixins.py | 2 +- netbox/virtualization/tests/test_api.py | 17 +++++++++++++++++ 3 files changed, 35 insertions(+), 1 deletion(-) diff --git a/netbox/dcim/tests/test_api.py b/netbox/dcim/tests/test_api.py index 1ce362963..82b4b7917 100644 --- a/netbox/dcim/tests/test_api.py +++ b/netbox/dcim/tests/test_api.py @@ -6,6 +6,7 @@ from rest_framework import status from dcim.choices import * from dcim.constants import * from dcim.models import * +from extras.models import ConfigTemplate from ipam.models import ASN, RIR, VLAN, VRF from netbox.api.serializers import GenericObjectSerializer from utilities.testing import APITestCase, APIViewTestCases, create_test_device @@ -1265,6 +1266,22 @@ class DeviceTest(APIViewTestCases.APIViewTestCase): self.assertHttpStatus(response, status.HTTP_400_BAD_REQUEST) + def test_render_config(self): + configtemplate = ConfigTemplate.objects.create( + name='Config Template 1', + template_code='Config for device {{ device.name }}' + ) + + device = Device.objects.first() + device.config_template = configtemplate + device.save() + + self.add_permissions('dcim.add_device') + url = reverse('dcim-api:device-detail', kwargs={'pk': device.pk}) + 'render-config/' + response = self.client.post(url, {}, format='json', **self.header) + self.assertHttpStatus(response, status.HTTP_200_OK) + self.assertEqual(response.data['content'], f'Config for device {device.name}') + class ModuleTest(APIViewTestCases.APIViewTestCase): model = Module diff --git a/netbox/extras/api/mixins.py b/netbox/extras/api/mixins.py index f7f5842b9..1737ff9f8 100644 --- a/netbox/extras/api/mixins.py +++ b/netbox/extras/api/mixins.py @@ -70,7 +70,7 @@ class RenderConfigMixin(ConfigTemplateRenderMixin): Resolve and render the preferred ConfigTemplate for this Device. """ instance = self.get_object() - object_type = instance._meta._model_name + object_type = instance._meta.model_name configtemplate = instance.get_config_template() if not configtemplate: return Response({ diff --git a/netbox/virtualization/tests/test_api.py b/netbox/virtualization/tests/test_api.py index b2ae68860..237e406d8 100644 --- a/netbox/virtualization/tests/test_api.py +++ b/netbox/virtualization/tests/test_api.py @@ -3,6 +3,7 @@ from rest_framework import status from dcim.choices import InterfaceModeChoices from dcim.models import Site +from extras.models import ConfigTemplate from ipam.models import VLAN, VRF from utilities.testing import APITestCase, APIViewTestCases, create_test_device from virtualization.choices import * @@ -228,6 +229,22 @@ class VirtualMachineTest(APIViewTestCases.APIViewTestCase): response = self.client.post(url, data, format='json', **self.header) self.assertHttpStatus(response, status.HTTP_400_BAD_REQUEST) + def test_render_config(self): + configtemplate = ConfigTemplate.objects.create( + name='Config Template 1', + template_code='Config for virtual machine {{ virtualmachine.name }}' + ) + + vm = VirtualMachine.objects.first() + vm.config_template = configtemplate + vm.save() + + self.add_permissions('virtualization.add_virtualmachine') + url = reverse('virtualization-api:virtualmachine-detail', kwargs={'pk': vm.pk}) + 'render-config/' + response = self.client.post(url, {}, format='json', **self.header) + self.assertHttpStatus(response, status.HTTP_200_OK) + self.assertEqual(response.data['content'], f'Config for virtual machine {vm.name}') + class VMInterfaceTest(APIViewTestCases.APIViewTestCase): model = VMInterface