|
| 1 | +from django.test import tag |
1 | 2 | from django.urls import reverse |
| 3 | +from netaddr import IPNetwork |
2 | 4 | from rest_framework import status |
3 | 5 |
|
| 6 | +from core.models import ObjectType |
4 | 7 | from dcim.choices import InterfaceModeChoices |
5 | 8 | from dcim.models import Site |
6 | | -from extras.models import ConfigTemplate |
| 9 | +from extras.choices import CustomFieldTypeChoices |
| 10 | +from extras.models import ConfigTemplate, CustomField |
7 | 11 | from ipam.choices import VLANQinQRoleChoices |
8 | | -from ipam.models import VLAN, VRF |
| 12 | +from ipam.models import Prefix, VLAN, VRF |
9 | 13 | from utilities.testing import APITestCase, APIViewTestCases, create_test_device, create_test_virtualmachine |
10 | 14 | from virtualization.choices import * |
11 | 15 | from virtualization.models import * |
@@ -350,6 +354,39 @@ def setUpTestData(cls): |
350 | 354 | }, |
351 | 355 | ] |
352 | 356 |
|
| 357 | + @tag('regression') |
| 358 | + def test_set_vminterface_as_object_in_custom_field(self): |
| 359 | + cf = CustomField.objects.create( |
| 360 | + name='associated_interface', |
| 361 | + type=CustomFieldTypeChoices.TYPE_OBJECT, |
| 362 | + related_object_type=ObjectType.objects.get_for_model(VMInterface), |
| 363 | + required=False |
| 364 | + ) |
| 365 | + cf.object_types.set([ObjectType.objects.get_for_model(Prefix)]) |
| 366 | + cf.save() |
| 367 | + |
| 368 | + prefix = Prefix.objects.create(prefix=IPNetwork('10.0.0.0/12')) |
| 369 | + vmi = VMInterface.objects.first() |
| 370 | + |
| 371 | + url = reverse('ipam-api:prefix-detail', kwargs={'pk': prefix.pk}) |
| 372 | + data = { |
| 373 | + 'custom_fields': { |
| 374 | + 'associated_interface': vmi.id, |
| 375 | + }, |
| 376 | + } |
| 377 | + |
| 378 | + self.add_permissions('ipam.change_prefix') |
| 379 | + |
| 380 | + response = self.client.patch(url, data, format='json', **self.header) |
| 381 | + self.assertEqual(response.status_code, 200) |
| 382 | + |
| 383 | + prefix_data = response.json() |
| 384 | + self.assertEqual(prefix_data['custom_fields']['associated_interface']['id'], vmi.id) |
| 385 | + |
| 386 | + reloaded_prefix = Prefix.objects.get(pk=prefix.pk) |
| 387 | + self.assertEqual(prefix.pk, reloaded_prefix.pk) |
| 388 | + self.assertNotEqual(reloaded_prefix.cf['associated_interface'], None) |
| 389 | + |
353 | 390 | def test_bulk_delete_child_interfaces(self): |
354 | 391 | interface1 = VMInterface.objects.get(name='Interface 1') |
355 | 392 | virtual_machine = interface1.virtual_machine |
|
0 commit comments