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

Skip to content
Snippets Groups Projects
Commit 3eb6fc48 authored by Frederico SEQUEIRA's avatar Frederico SEQUEIRA
Browse files

:white_check_mark: :bug: Fix issue in form validation and add test for multiple assignment

parent 16c7e3cf
No related branches found
No related tags found
1 merge request!32Test/vm assigned virtual machine type view
Pipeline #260233 passed
...@@ -36,16 +36,6 @@ class VmAssignedVmTypeForm(NetBoxModelForm): ...@@ -36,16 +36,6 @@ class VmAssignedVmTypeForm(NetBoxModelForm):
kwargs["initial"] = initial kwargs["initial"] = initial
super().__init__(*args, **kwargs) 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: class Meta:
"""Meta class""" """Meta class"""
model = VmAssignedVirtualMachineType model = VmAssignedVirtualMachineType
...@@ -55,14 +45,25 @@ class VmAssignedVmTypeForm(NetBoxModelForm): ...@@ -55,14 +45,25 @@ class VmAssignedVmTypeForm(NetBoxModelForm):
"""Validates form inputs before submitting:""" """Validates form inputs before submitting:"""
super().clean() super().clean()
vm = self.cleaned_data.get("virtual_machine") 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: if not vm:
raise ValidationError( 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): def save(self, *args, **kwargs):
"""Set assigned object and save""" """Set assigned object and save"""
# Set assigned object # Set assigned object
......
...@@ -20,19 +20,14 @@ class VmAssignedVmTypeFormTestCase( ...@@ -20,19 +20,14 @@ class VmAssignedVmTypeFormTestCase(
def test_create_valid_vm_assigned_virtual_machine_type(self): def test_create_valid_vm_assigned_virtual_machine_type(self):
"""Create a valid Extra Config Assignment""" """Create a valid Extra Config Assignment"""
clt_content_type = ContentType.objects.get_for_model(ClusterType)
cluster_type = ClusterType.objects.create(name="Test ClusterType1", slug="ClusterType1") cluster_type = ClusterType.objects.create(name="Test ClusterType1", slug="ClusterType1")
cluster = Cluster.objects.create(name="Test Cluster1", type=cluster_type) cluster = Cluster.objects.create(name="Test Cluster1", type=cluster_type)
vm_type = VirtualMachineType.objects.create(virtual_machine_type_name='VMType1',
vm_type = VirtualMachineType.objects.create(virtual_machine_type_name='VMType1',
assigned_object=cluster_type, assigned_object=cluster_type,
virtual_machine_type_desc='AWS description') virtual_machine_type_desc='AWS description')
virtual_machine = VirtualMachine.objects.create(name="Test VM",status="active",cluster=cluster) virtual_machine = VirtualMachine.objects.create(name="Test VM",status="active",cluster=cluster)
form = VmAssignedVmTypeForm(data= { form = VmAssignedVmTypeForm(data= {
"virtual_machine": virtual_machine.pk, "virtual_machine": virtual_machine.pk,
"virtual_machine_type_assignment_desc": 'Test virtual_machine_type_assignment', "virtual_machine_type_assignment_desc": 'Test virtual_machine_type_assignment',
...@@ -53,60 +48,44 @@ class VmAssignedVmTypeFormTestCase( ...@@ -53,60 +48,44 @@ class VmAssignedVmTypeFormTestCase(
Test invalid extra config invalid format. Test invalid extra config invalid format.
""" """
clt_content_type = ContentType.objects.get_for_model(ClusterType) vm_content_type = ContentType.objects.get_for_model(VirtualMachine)
cluster_type = ClusterType.objects.create(name="Test ClusterType1", slug="ClusterType1") cluster_type = ClusterType.objects.create(name="Test ClusterType1", slug="ClusterType1")
cluster = Cluster.objects.create(name="Test Cluster1", type=cluster_type) cluster = Cluster.objects.create(name="Test Cluster1", type=cluster_type)
vm_type = VirtualMachineType.objects.create(virtual_machine_type_name='VMType1', vm_type = VirtualMachineType.objects.create(virtual_machine_type_name='VMType1',
assigned_object=cluster_type, assigned_object=cluster_type,
virtual_machine_type_desc='AWS description') virtual_machine_type_desc='AWS description')
vm_type2 = VirtualMachineType.objects.create(virtual_machine_type_name='VMType2',
vm_type2 = VirtualMachineType.objects.create(virtual_machine_type_name='VMType2',
assigned_object=cluster_type, assigned_object=cluster_type,
virtual_machine_type_desc='AWS description') virtual_machine_type_desc='AWS description')
virtual_machine = VirtualMachine.objects.create(name="Test VM",status="active",cluster=cluster) virtual_machine = VirtualMachine.objects.create(name="Test VM",status="active",cluster=cluster)
# Assign VirtualMachineTypes to VirtualMachines # Assign VirtualMachineTypes to VirtualMachines
VmAssignedVirtualMachineType.objects.create(virtual_machine_type=vm_type, assigned_object_id=virtual_machine.pk) VmAssignedVirtualMachineType.objects.create(
virtual_machine_type=vm_type,
assigned_object_id=virtual_machine.pk,
assigned_object_type=vm_content_type
)
# Set up valid form data # Set up invalid form data
invalid_valid_form_data = { invalid_valid_form_data = {
"virtual_machine": virtual_machine.pk, "virtual_machine": virtual_machine.pk,
"virtual_machine_type_assignment_desc": 'Test virtual_machine_type_assignment', "virtual_machine_type_assignment_desc": 'Test virtual_machine_type_assignment',
"virtual_machine_type": vm_type2.pk "virtual_machine_type": vm_type2.pk
} }
#Invalid assigment 2 types to 1 VM
# invalid_form_data = invalid_valid_form_data.copy()
# invalid_form_data["virtual_machine_type"] = vm_type2.pk # assign second type
form = self.form(data=invalid_valid_form_data) form = self.form(data=invalid_valid_form_data)
self.assertFalse(form.is_valid()) self.assertFalse(form.is_valid())
self.assertIn( self.assertIn(
"Can't assign more than one Type to the same Virtual Machine", "Can't assign more than one Type to the same Virtual Machine",
form.errors.get("virtual_machine_type", []), form.non_field_errors(),[]
) )
#List Validation
# invalid_form_data["extra_config_values"] = {"description":"description"} # Wrong field def tearDown(self) -> None:# pylint: disable=invalid-name
# form = self.form(data=invalid_form_data) """Method called immediately after the test method has been called and the result recorded."""
# self.assertFalse(form.is_valid()) VmAssignedVirtualMachineType.objects.all().delete()
# self.assertIn( VirtualMachineType.objects.all().delete()
# "Missing or empty required field: 'id' with type string", super().tearDown()
# form.errors.get("extra_config_values", []),
# )
# #Missing property Type
# invalid_form_data["extra_config_values"] = {"id":True} # Wrong type
# form = self.form(data=invalid_form_data)
# self.assertFalse(form.is_valid())
# self.assertIn(
# "Incorrect type for field 'id': expected string, got bool",
# form.errors.get("extra_config_values", []),
# )
# def tearDown(self) -> None:# pylint: disable=invalid-name
# """Method called immediately after the test method has been called and the result recorded."""
# VmAssignedExtraConfig.objects.all().delete()
# ProviderTypeExtraConfig.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