Files
Netbox-Utilities/netbox_utilities/tests/test_bulk_module_form.py
T

59 lines
2.0 KiB
Python

from types import SimpleNamespace
from django import forms
from django.forms.utils import ErrorDict
from django.test import SimpleTestCase
from netbox_utilities.forms import BulkModuleInstallForm
class AvailableModuleBays(list):
def count(self):
return len(self)
class BulkModuleInstallFormTest(SimpleTestCase):
def _form_for_clean(self, *, module_bays=None, quantity=None, available_bays=None):
form = BulkModuleInstallForm.__new__(BulkModuleInstallForm)
forms.Form.__init__(form)
form._errors = ErrorDict()
form.cleaned_data = {
"device": SimpleNamespace(pk=10),
"module_bays": module_bays or [],
"quantity": quantity,
}
form.available_module_bays = AvailableModuleBays(available_bays or [])
return form
def test_quantity_selects_first_available_bays(self):
available_bays = [SimpleNamespace(pk=1), SimpleNamespace(pk=2), SimpleNamespace(pk=3)]
form = self._form_for_clean(quantity=2, available_bays=available_bays)
cleaned_data = form.clean()
self.assertEqual(cleaned_data["module_bays"], available_bays[:2])
self.assertFalse(form.errors)
def test_quantity_cannot_exceed_available_bays(self):
form = self._form_for_clean(quantity=3, available_bays=[SimpleNamespace(pk=1)])
form.clean()
self.assertIn("quantity", form.errors)
self.assertIn("nur ein freier Modulschacht", str(form.errors["quantity"]))
def test_quantity_and_manual_selection_are_mutually_exclusive(self):
module_bay = SimpleNamespace(pk=1, name="A1", device_id=10, enabled=True)
form = self._form_for_clean(module_bays=[module_bay], quantity=1, available_bays=[module_bay])
form.clean()
self.assertIn("quantity", form.errors)
def test_requires_quantity_or_manual_selection(self):
form = self._form_for_clean()
form.clean()
self.assertIn("__all__", form.errors)