Files
netbox-librenms-plugin/netbox_librenms_plugin/tests/test_coverage_forms.py
Vlastislav Svatek 673e67106e
Some checks failed
ci / deploy (push) Has been cancelled
CodeQL Advanced / Analyze (actions) (push) Has been cancelled
CodeQL Advanced / Analyze (javascript-typescript) (push) Has been cancelled
CodeQL Advanced / Analyze (python) (push) Has been cancelled
first commit
2026-06-05 10:39:05 +02:00

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