62 lines
3.0 KiB
Python
62 lines
3.0 KiB
Python
"""Coverage tests for netbox_librenms_plugin.forms — has_option_only empty-data guard."""
|
|
|
|
from unittest.mock import patch
|
|
|
|
|
|
class TestLibreNMSFilterFormBackgroundJobDefault:
|
|
"""Tests for use_background_job default injection in LibreNMSImportFilterForm.__init__.
|
|
|
|
The form checks args[0] (positional) for the data dict, matching how Django
|
|
binds forms from request.GET/POST. Tests pass data positionally to match.
|
|
"""
|
|
|
|
def _make_form(self, data):
|
|
"""Instantiate LibreNMSImportFilterForm with mocked server settings.
|
|
Pass data as positional arg to match how Django provides request.GET.
|
|
"""
|
|
with (
|
|
patch("netbox_librenms_plugin.forms.LibreNMSImportFilterForm._populate_librenms_locations"),
|
|
):
|
|
from netbox_librenms_plugin.forms import LibreNMSImportFilterForm
|
|
|
|
# Pass data positionally — the form's __init__ checks args[0], not kwargs
|
|
return LibreNMSImportFilterForm(data)
|
|
|
|
def test_empty_data_sets_use_background_job_on(self):
|
|
"""LibreNMSImportFilterForm({}) should set use_background_job='on' (initial GET)."""
|
|
form = self._make_form({})
|
|
assert form.data.get("use_background_job") == "on"
|
|
|
|
def test_option_only_data_does_not_auto_set_background_job(self):
|
|
"""Submitting only option-only fields should NOT auto-set use_background_job."""
|
|
# show_disabled is an option-only field — not a real filter field
|
|
# has_option_only = bool({show_disabled}) and not non_option_fields and not has_filters
|
|
# = True and True and True = True → condition fails → use_background_job NOT injected
|
|
form = self._make_form({"show_disabled": "on"})
|
|
assert form.data.get("use_background_job") is None
|
|
|
|
def test_filter_data_does_not_auto_set_background_job(self):
|
|
"""When real filter fields are submitted, use_background_job is not auto-injected."""
|
|
form = self._make_form({"librenms_hostname": "switch01"})
|
|
assert form.data.get("use_background_job") is None
|
|
|
|
def test_use_background_job_preserved_when_already_set(self):
|
|
"""If use_background_job is already in data, it should not be overridden."""
|
|
form = self._make_form({"use_background_job": "off"})
|
|
assert form.data.get("use_background_job") == "off"
|
|
|
|
def test_no_positional_args_no_injection(self):
|
|
"""Unbound form (no positional args) should not inject use_background_job."""
|
|
with (
|
|
patch("netbox_librenms_plugin.forms.LibreNMSImportFilterForm._populate_librenms_locations"),
|
|
):
|
|
from netbox_librenms_plugin.forms import LibreNMSImportFilterForm
|
|
|
|
form = LibreNMSImportFilterForm()
|
|
assert form.data.get("use_background_job") is None
|
|
|
|
def test_pagination_param_does_not_inject_background_job(self):
|
|
"""Auxiliary params like 'page' must not trigger background-job default injection."""
|
|
form = self._make_form({"page": "2"})
|
|
assert form.data.get("use_background_job") is None
|