Files
Plugin_SN_Basis/tests/test_variable_wrapper.py
T
DanielandClaude Sonnet 5 23aab76e42 Restliche sn_basis-Tests: deutsche Docstrings ergänzt
81 Testfälle in 11 Dateien im Rahmen des Test-Audits durchgesehen und mit
"Prüft, dass ..."-Docstring versehen (Projektwissen #16). Kein Verhalten
geändert.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-16 15:06:16 +02:00

85 lines
3.5 KiB
Python

import unittest
from unittest.mock import patch
from sn_basis.functions import variable_wrapper
class _Scope:
def __init__(self, value: str):
self._value = value
def variable(self, _name: str) -> str:
return self._value
class TestVariableWrapper(unittest.TestCase):
@patch("sn_basis.functions.variable_wrapper.QgsProject.instance")
@patch("sn_basis.functions.variable_wrapper.QgsExpressionContextUtils.setProjectVariable")
@patch("sn_basis.functions.variable_wrapper.QgsExpressionContextUtils.projectScope")
def test_set_variable_project_noop_write_is_skipped(
self,
mock_project_scope,
mock_set_project_variable,
mock_project_instance,
):
"""Prüft, dass set_variable() im Projekt-Scope nicht schreibt, wenn der neue Wert dem bestehenden entspricht."""
mock_project_instance.return_value = object()
mock_project_scope.return_value = _Scope("layer_1")
variable_wrapper.set_variable("verfahrensgebiet_layer", "layer_1", scope="project")
mock_set_project_variable.assert_not_called()
@patch("sn_basis.functions.variable_wrapper.QgsProject.instance")
@patch("sn_basis.functions.variable_wrapper.QgsExpressionContextUtils.setProjectVariable")
@patch("sn_basis.functions.variable_wrapper.QgsExpressionContextUtils.projectScope")
def test_set_variable_project_changed_value_is_written(
self,
mock_project_scope,
mock_set_project_variable,
mock_project_instance,
):
"""Prüft, dass set_variable() im Projekt-Scope bei geändertem Wert mit dem Präfix 'sn_' geschrieben wird."""
fake_project = object()
mock_project_instance.return_value = fake_project
mock_project_scope.return_value = _Scope("old_value")
variable_wrapper.set_variable("verfahrensgebiet_layer", "new_value", scope="project")
mock_set_project_variable.assert_called_once_with(
fake_project,
"sn_verfahrensgebiet_layer",
"new_value",
)
@patch("sn_basis.functions.variable_wrapper.QgsExpressionContextUtils.setGlobalVariable")
def test_set_variable_global_writes_prefixed_name(self, mock_set_global):
"""Prüft, dass set_variable() im globalen Scope den Variablennamen mit 'sn_' vorangestellt schreibt."""
variable_wrapper.set_variable("verfahrensnummer", "123", scope="global")
mock_set_global.assert_called_once_with("sn_verfahrensnummer", "123")
@patch("sn_basis.functions.variable_wrapper.QgsExpressionContextUtils.globalScope")
def test_get_variable_global_returns_empty_string_fallback(self, mock_global_scope):
"""Prüft, dass get_variable() im globalen Scope für eine nicht gesetzte Variable einen leeren String liefert."""
mock_global_scope.return_value = _Scope("")
value = variable_wrapper.get_variable("nicht_vorhanden", scope="global")
self.assertEqual(value, "")
def test_get_variable_invalid_scope_raises(self):
"""Prüft, dass get_variable() bei einem unbekannten Scope-Namen einen ValueError auslöst."""
with self.assertRaises(ValueError):
variable_wrapper.get_variable("foo", scope="invalid")
def test_set_variable_invalid_scope_raises(self):
"""Prüft, dass set_variable() bei einem unbekannten Scope-Namen einen ValueError auslöst."""
with self.assertRaises(ValueError):
variable_wrapper.set_variable("foo", "bar", scope="invalid")
if __name__ == "__main__":
unittest.main()