mirror of
https://github.com/TheNetworkGuy/netbox-zabbix-sync.git
synced 2026-03-21 20:18:38 -06:00
158 lines
6.3 KiB
Python
158 lines
6.3 KiB
Python
"""Tests for the Description class in the host_description module."""
|
|
|
|
import unittest
|
|
from unittest.mock import MagicMock, patch
|
|
|
|
from netbox_zabbix_sync.modules.host_description import Description
|
|
|
|
|
|
class TestDescription(unittest.TestCase):
|
|
"""Test class for Description functionality."""
|
|
|
|
def setUp(self):
|
|
"""Set up test fixtures."""
|
|
# Create mock NetBox object
|
|
self.mock_nb_object = MagicMock()
|
|
self.mock_nb_object.name = "test-host"
|
|
self.mock_nb_object.owner = "admin"
|
|
self.mock_nb_object.config_context = {}
|
|
|
|
# Create logger mock
|
|
self.mock_logger = MagicMock()
|
|
|
|
# Base configuration
|
|
self.base_config = {}
|
|
|
|
# Test 1: Config context description override
|
|
@patch("netbox_zabbix_sync.modules.host_description.datetime")
|
|
def test_1_config_context_override_value(self, mock_datetime):
|
|
"""Test 1: User that provides a config context description value should get this override value back."""
|
|
mock_now = MagicMock()
|
|
mock_now.strftime.return_value = "2026-02-25 10:30:00"
|
|
mock_datetime.now.return_value = mock_now
|
|
|
|
# Set config context with description
|
|
self.mock_nb_object.config_context = {
|
|
"zabbix": {"description": "Custom override for {owner}"}
|
|
}
|
|
|
|
config = {"description": "static"}
|
|
desc = Description(self.mock_nb_object, config, "4.5", logger=self.mock_logger)
|
|
|
|
result = desc.generate()
|
|
# Should use config context, not config
|
|
self.assertEqual(result, "Custom override for admin")
|
|
|
|
# Test 2: Static description
|
|
def test_2_static_description(
|
|
self,
|
|
):
|
|
"""Test 2: User that provides static as description should get the default static value."""
|
|
config = {"description": "static"}
|
|
desc = Description(self.mock_nb_object, config, "4.5", logger=self.mock_logger)
|
|
|
|
result = desc.generate()
|
|
self.assertEqual(result, "Host added by NetBox sync script.")
|
|
|
|
# Test 3: Dynamic description
|
|
@patch("netbox_zabbix_sync.modules.host_description.datetime")
|
|
def test_3_dynamic_description(self, mock_datetime):
|
|
"""Test 3: User that provides 'dynamic' should get the resolved description string back."""
|
|
mock_now = MagicMock()
|
|
mock_now.strftime.return_value = "2026-02-25 10:30:00"
|
|
mock_datetime.now.return_value = mock_now
|
|
|
|
config = {"description": "dynamic"}
|
|
desc = Description(self.mock_nb_object, config, "4.5", logger=self.mock_logger)
|
|
|
|
result = desc.generate()
|
|
expected = (
|
|
"Host by owner admin added by NetBox sync script on 2026-02-25 10:30:00."
|
|
)
|
|
self.assertEqual(result, expected)
|
|
|
|
# Test 4: Invalid macro fallback
|
|
def test_4_invalid_macro_fallback_to_static(self):
|
|
"""Test 4: Users who provide invalid macros should fallback to the static variant."""
|
|
config = {"description": "Host {owner} with {invalid_macro}"}
|
|
desc = Description(self.mock_nb_object, config, "4.5", logger=self.mock_logger)
|
|
|
|
result = desc.generate()
|
|
# Should fall back to static default
|
|
self.assertEqual(result, "Host added by NetBox sync script.")
|
|
# Verify warning was logged
|
|
self.mock_logger.warning.assert_called_once()
|
|
|
|
# Test 5: Custom time format
|
|
@patch("netbox_zabbix_sync.modules.host_description.datetime")
|
|
def test_5_custom_datetime_format(self, mock_datetime):
|
|
"""Test 5: Users who change the time format."""
|
|
mock_now = MagicMock()
|
|
# Will be called twice: once with custom format, once for string
|
|
mock_now.strftime.side_effect = ["25/02/2026", "25/02/2026"]
|
|
mock_datetime.now.return_value = mock_now
|
|
|
|
config = {
|
|
"description": "Updated on {datetime}",
|
|
"description_dt_format": "%d/%m/%Y",
|
|
}
|
|
desc = Description(self.mock_nb_object, config, "4.5", logger=self.mock_logger)
|
|
|
|
result = desc.generate()
|
|
self.assertEqual(result, "Updated on 25/02/2026")
|
|
|
|
# Test 6: Custom description format in config
|
|
@patch("netbox_zabbix_sync.modules.host_description.datetime")
|
|
def test_6_custom_description_format(self, mock_datetime):
|
|
"""Test 6: Users who provide a custom description format in the config."""
|
|
mock_now = MagicMock()
|
|
mock_now.strftime.return_value = "2026-02-25 10:30:00"
|
|
mock_datetime.now.return_value = mock_now
|
|
|
|
config = {"description": "Server {owner} managed at {datetime}"}
|
|
desc = Description(self.mock_nb_object, config, "4.5", logger=self.mock_logger)
|
|
|
|
result = desc.generate()
|
|
self.assertEqual(result, "Server admin managed at 2026-02-25 10:30:00")
|
|
|
|
# Test 7: Owner on lower NetBox version
|
|
@patch("netbox_zabbix_sync.modules.host_description.datetime")
|
|
def test_7_owner_on_lower_netbox_version(self, mock_datetime):
|
|
"""Test 7: Users who try to resolve the owner property on a lower NetBox version (3.2)."""
|
|
mock_now = MagicMock()
|
|
mock_now.strftime.return_value = "2026-02-25 10:30:00"
|
|
mock_datetime.now.return_value = mock_now
|
|
|
|
config = {"description": "Device owned by {owner}"}
|
|
desc = Description(
|
|
self.mock_nb_object,
|
|
config,
|
|
"3.2", # Lower NetBox version
|
|
logger=self.mock_logger,
|
|
)
|
|
|
|
result = desc.generate()
|
|
# Owner should be empty string on version < 4.5
|
|
self.assertEqual(result, "Device owned by ")
|
|
|
|
# Test 8: Missing or False description returns static
|
|
def test_8a_missing_description_returns_static(self):
|
|
"""Test 8a: When description option is not found, script should return the static variant."""
|
|
config = {} # No description key
|
|
desc = Description(self.mock_nb_object, config, "4.5", logger=self.mock_logger)
|
|
|
|
result = desc.generate()
|
|
self.assertEqual(result, "Host added by NetBox sync script.")
|
|
|
|
def test_8b_false_description_returns_empty(self):
|
|
"""Test 8b: When description is set to False, script should return empty string."""
|
|
config = {"description": False}
|
|
desc = Description(self.mock_nb_object, config, "4.5", logger=self.mock_logger)
|
|
|
|
result = desc.generate()
|
|
self.assertEqual(result, "")
|
|
|
|
|
|
if __name__ == "__main__":
|
|
unittest.main()
|