Code development platform for open source projects from the European Union institutions

Skip to content
Snippets Groups Projects
Commit 9c9fd3b6 authored by Arkadiusz SZCZECINSKI's avatar Arkadiusz SZCZECINSKI
Browse files

Merge branch 'test/vm_assigned_virtual_machine_type_view' into 'main'

Test/vm assigned virtual machine type view

See merge request !32
parents 73357380 3eb6fc48
No related branches found
No related tags found
1 merge request!32Test/vm assigned virtual machine type view
Pipeline #260809 passed
......@@ -36,16 +36,6 @@ class VmAssignedVmTypeForm(NetBoxModelForm):
kwargs["initial"] = initial
super().__init__(*args, **kwargs)
if instance:
current_vm_id = instance.assigned_object.id if instance.assigned_object else None
else:
current_vm_id = None
assigned_vms = VmAssignedVirtualMachineType.objects.filter(
assigned_object_type=ContentType.objects.get_for_model(VirtualMachine)
).exclude(assigned_object_id=current_vm_id).values_list('assigned_object_id', flat=True)
self.fields['virtual_machine'].queryset = VirtualMachine.objects.exclude(id__in=assigned_vms)
class Meta:
"""Meta class"""
model = VmAssignedVirtualMachineType
......@@ -55,14 +45,25 @@ class VmAssignedVmTypeForm(NetBoxModelForm):
"""Validates form inputs before submitting:"""
super().clean()
vm = self.cleaned_data.get("virtual_machine")
vm_ct = ContentType.objects.get_for_model(VirtualMachine)
#Check if Virtual Machine is assigned corretly
if not vm:
raise ValidationError(
{"__all__": "Can't assign more than one Type to the same Virtual Machine"},
{"__all__":"Virtual Machine can't be null"}
)
if VmAssignedVirtualMachineType.objects.filter(
assigned_object_type=vm_ct,
assigned_object_id=vm.id
).exclude(pk=self.instance.pk).exists():
raise ValidationError(
{"__all__":"Can't assign more than one Type to the same Virtual Machine"}
)
def save(self, *args, **kwargs):
"""Set assigned object and save"""
# Set assigned object
......
"""VM Assigned Extra Config Views Test Case Class"""
from django.contrib.contenttypes.models import ContentType
from users.models import ObjectPermission
from virtualization.models import VirtualMachine, Cluster, ClusterType
from netbox_sys_plugin.models import VmAssignedVirtualMachineType, VirtualMachineType
from netbox_sys_plugin.forms import VmAssignedVmTypeForm
from ..base import BaseModelViewTestCase
class VmAssignedVmTypeFormTestCase(
BaseModelViewTestCase,
):
"""VM Assigned Extra Config Test Case Class"""
model = VmAssignedVirtualMachineType
form = VmAssignedVmTypeForm
def test_create_valid_vm_assigned_virtual_machine_type(self):
"""Create a valid Extra Config Assignment"""
cluster_type = ClusterType.objects.create(name="Test ClusterType1", slug="ClusterType1")
cluster = Cluster.objects.create(name="Test Cluster1", type=cluster_type)
vm_type = VirtualMachineType.objects.create(virtual_machine_type_name='VMType1',
assigned_object=cluster_type,
virtual_machine_type_desc='AWS description')
virtual_machine = VirtualMachine.objects.create(name="Test VM",status="active",cluster=cluster)
form = VmAssignedVmTypeForm(data= {
"virtual_machine": virtual_machine.pk,
"virtual_machine_type_assignment_desc": 'Test virtual_machine_type_assignment',
"virtual_machine_type": vm_type.pk
})
self.assertTrue(form.is_valid())
# Setup object permissions for the test user
obj_perm = ObjectPermission(
name='Test permission',
actions=['add', 'change']
)
obj_perm.save()
obj_perm.users.add(self.user) # pylint: disable=no-member
obj_perm.object_types.add(ContentType.objects.get_for_model(self.model)) # pylint: disable=no-member
def test_invalid_vm_assigned_virtual_machine_type(self):
"""
Test invalid extra config invalid format.
"""
vm_content_type = ContentType.objects.get_for_model(VirtualMachine)
cluster_type = ClusterType.objects.create(name="Test ClusterType1", slug="ClusterType1")
cluster = Cluster.objects.create(name="Test Cluster1", type=cluster_type)
vm_type = VirtualMachineType.objects.create(virtual_machine_type_name='VMType1',
assigned_object=cluster_type,
virtual_machine_type_desc='AWS description')
vm_type2 = VirtualMachineType.objects.create(virtual_machine_type_name='VMType2',
assigned_object=cluster_type,
virtual_machine_type_desc='AWS description')
virtual_machine = VirtualMachine.objects.create(name="Test VM",status="active",cluster=cluster)
# Assign VirtualMachineTypes to VirtualMachines
VmAssignedVirtualMachineType.objects.create(
virtual_machine_type=vm_type,
assigned_object_id=virtual_machine.pk,
assigned_object_type=vm_content_type
)
# Set up invalid form data
invalid_valid_form_data = {
"virtual_machine": virtual_machine.pk,
"virtual_machine_type_assignment_desc": 'Test virtual_machine_type_assignment',
"virtual_machine_type": vm_type2.pk
}
form = self.form(data=invalid_valid_form_data)
self.assertFalse(form.is_valid())
self.assertIn(
"Can't assign more than one Type to the same Virtual Machine",
form.non_field_errors(),[]
)
def tearDown(self) -> None:# pylint: disable=invalid-name
"""Method called immediately after the test method has been called and the result recorded."""
VmAssignedVirtualMachineType.objects.all().delete()
VirtualMachineType.objects.all().delete()
super().tearDown()
0% Loading or .
You are about to add 0 people to the discussion. Proceed with caution.
Finish editing this message first!
Please register or to comment