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

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

:white_check_mark: :bug: Fix to form and add test validations for createvm

parent bda66c50
No related branches found
No related tags found
1 merge request!30✅ Add valid VIEW test for createvm
......@@ -302,12 +302,22 @@ class CreateVmForm(NetBoxModelForm):
@staticmethod
def parse_ports(ports_field):
"""Parse the port numbers."""
try:
ports = [int(port.strip()) for port in ports_field.split(',') if port.strip().isdigit()]
return ports
except ValueError as e:
raise ValueError(f"Invalid ports value: {ports_field}") from e
if not ports_field.strip():
return[]
ports =[]
invalid_ports=[]
for port in ports_field.split(','):
port = port.strip()
if port.isdigit():
ports.append(int(port))
else:
invalid_ports.append(port)
if invalid_ports:
raise ValueError(f"Invalid ports value: {ports_field}")
return ports
@staticmethod
def get_parse_tags(data):
"""Parse Tags"""
......@@ -319,7 +329,7 @@ class CreateVmForm(NetBoxModelForm):
tags_field = Tag.objects.get(pk=tag_id)
return [tags_field]
except Tag.DoesNotExist as e:
raise ValueError (f"Invalid tag: {tags_field}") from e
raise ValueError ("Invalid tag") from e
@staticmethod
def assign_tags(obj,data):
......
# test_create_vm_form.py
from django.test import TestCase
from django.contrib.contenttypes.models import ContentType
from django.core.exceptions import ValidationError
from virtualization.models import ClusterType, Cluster, VirtualMachine, VMInterface
from ipam.models import Service
from dcim.models import DeviceRole, Platform
......@@ -8,7 +9,7 @@ from extras.models import Tag
from netbox_sys_plugin.models import ProviderTypeExtraConfig, VirtualMachineType
from netbox_sys_plugin.forms import CreateVmForm
# pylint: disable=W0201, R0902
class CreateVmFormTestCase(TestCase):
"""Test suite for the CreateVmForm."""
......@@ -33,9 +34,7 @@ class CreateVmFormTestCase(TestCase):
assigned_object_type=ContentType.objects.get_for_model(ClusterType),
assigned_object_id=self.cluster_type.pk)
def test_valid_form_submission_without_webhook(self):
"""Test a valid form submission."""
form_data = {
self.form_data_template = {
'cl_list_new-cluster_type': self.cluster_type.id,
'cl_list_new-cluster': self.cluster.id,
'vms_new-0-name': 'TEST_DATA2',
......@@ -61,7 +60,12 @@ class CreateVmFormTestCase(TestCase):
'service_syslog-0-name': 'TEST_DATA3',
'service_syslog-0-protocol': 'tcp',
'service_syslog-0-ports': '111',
'tag_new-tag':self.tag.id
}
def test_valid_form_submission_without_webhook(self):
"""Test a valid form submission."""
form_data = self.form_data_template
form = CreateVmForm(data=form_data)
vm = form.process_creation(form_data)
......@@ -74,6 +78,71 @@ class CreateVmFormTestCase(TestCase):
#Assert Services
self.assertEqual(Service.objects.filter(virtual_machine=vm).count(), 3)
def test_invalid_form(self):
"""Test a valid form submission."""
#invalid json
self.invalid_ports_form_data = self.form_data_template.copy()
self.invalid_ports_form_data["domainnames_new-domain_names"] = "Invalid" # Invalid format
form_data = self.invalid_ports_form_data
form = CreateVmForm(data=form_data)
with self.assertRaises(ValueError) as context:
form.process_creation(form_data)
self.assertIn(
"Invalid JSON format: Please provide a valid JSON object.", str(context.exception))
#black ports
self.invalid_ports_form_data = self.form_data_template.copy()
self.invalid_ports_form_data["service_ntp-0-ports"] = "" # Invalid format
form_data = self.invalid_ports_form_data
form = CreateVmForm(data=form_data)
with self.assertRaises(ValidationError) as context:
form.process_creation(form_data)
self.assertIn(
"{'ports': ['This field cannot be blank.']}", str(context.exception))
#invalid/black ports
self.invalid_ports_form_data = self.form_data_template.copy()
self.invalid_ports_form_data["service_ntp-0-ports"] = "1,A," # Invalid format
form_data = self.invalid_ports_form_data
form = CreateVmForm(data=form_data)
with self.assertRaises(ValueError) as context:
form.process_creation(form_data)
self.assertIn(
"Invalid ports value:", str(context.exception))
#invalid tag
self.invalid_ports_form_data = self.form_data_template.copy()
self.invalid_ports_form_data["tag_new-tag"] = "10" # Invalid format
form_data = self.invalid_ports_form_data
form = CreateVmForm(data=form_data)
with self.assertRaises(ValueError) as context:
form.process_creation(form_data)
self.assertIn(
"Invalid tag", str(context.exception))
#invalid role/owner
self.invalid_ports_form_data = self.form_data_template.copy()
self.invalid_ports_form_data["vms_new-0-role"] = "2" # Invalid format
form_data = self.invalid_ports_form_data
form = CreateVmForm(data=form_data)
with self.assertRaises(ValueError) as context:
form.process_creation(form_data)
self.assertIn(
"Error during creation: Invalid Device Role ID", str(context.exception))
#invalid platform
self.invalid_ports_form_data = self.form_data_template.copy()
self.invalid_ports_form_data["vms_new-0-platform"] = "2" # Invalid format
form_data = self.invalid_ports_form_data
form = CreateVmForm(data=form_data)
with self.assertRaises(ValueError) as context:
form.process_creation(form_data)
self.assertIn(
"Invalid Platform ID", str(context.exception))
def tearDown(self):
"""Clean up after tests."""
......
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