fix: clarify installation platform selection

Group device, virtual machine, and cluster as the required platform destination and validate that exactly one is selected with an actionable localized error.
This commit is contained in:
2026-07-27 12:28:26 +02:00
parent adfc2ae72c
commit 71a5db0ece
8 changed files with 71 additions and 6 deletions
+20 -1
View File
@@ -1,6 +1,6 @@
from django.core.exceptions import ValidationError
from django.utils.translation import gettext, override
from netbox_slm.forms import SoftwareLicenseForm
from netbox_slm.forms import SoftwareLicenseForm, SoftwareProductInstallationForm
from netbox_slm.models import RenewalIntervalUnits, SoftwareLicense
from tenancy.models import Tenant, TenantGroup
@@ -56,6 +56,25 @@ class ModelTestCase(SlmBaseTestCase):
self.assertEqual("cluster", self.software_product_installation.render_type())
self.assertEqual(self.cluster, self.software_product_installation.platform)
def test_installation_form_requires_exactly_one_platform_destination(self):
base_data = {
"software_product": self.software_product.pk,
"version": self.software_product_version.pk,
}
no_destination_form = SoftwareProductInstallationForm(data=base_data)
self.assertFalse(no_destination_form.is_valid())
self.assertIn("Select exactly one platform destination", str(no_destination_form.non_field_errors()))
one_destination_form = SoftwareProductInstallationForm(data={**base_data, "device": self.device.pk})
self.assertTrue(one_destination_form.is_valid(), one_destination_form.errors)
multiple_destinations_form = SoftwareProductInstallationForm(
data={**base_data, "device": self.device.pk, "cluster": self.cluster.pk}
)
self.assertFalse(multiple_destinations_form.is_valid())
self.assertIn("Select exactly one platform destination", str(multiple_destinations_form.non_field_errors()))
def test_software_license_stored_location_txt(self):
self.assertEqual("Link", self.software_license.stored_location_txt)