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):
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
......
......@@ -20,19 +20,14 @@ class VmAssignedVmTypeFormTestCase(
def test_create_valid_vm_assigned_virtual_machine_type(self):
"""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 = 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,
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',
......@@ -53,60 +48,44 @@ class VmAssignedVmTypeFormTestCase(
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 = 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,
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,
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)
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 = {
"virtual_machine": virtual_machine.pk,
"virtual_machine_type_assignment_desc": 'Test virtual_machine_type_assignment',
"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)
self.assertFalse(form.is_valid())
self.assertIn(
"Can't assign more than one Type to the same Virtual Machine",
form.errors.get("virtual_machine_type", []),
)
#List Validation
# invalid_form_data["extra_config_values"] = {"description":"description"} # Wrong field
# form = self.form(data=invalid_form_data)
# self.assertFalse(form.is_valid())
# self.assertIn(
# "Missing or empty required field: 'id' with type string",
# 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()
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