Files
Plugin_SN_Basis/tests/test_settings_logic.py
T
DanielandClaude Sonnet 5 bfcd8c2777 test_settings_logic: Docstring korrigiert - Fallback lebt in get_variable(), nicht in load()
SettingsLogic.load() reicht get_variable()-Werte unverändert durch, ohne
eigene Fallback-Logik. Der "or \"\""-Fallback für unbekannte Variablen
sitzt in variable_wrapper.get_variable(). Der Test selbst war korrekt,
nur die Docstring hat die Verantwortung falsch zugeordnet.

Co-Authored-By: Claude Sonnet 5 <noreply@anthropic.com>
2026-09-17 14:59:50 +02:00

91 lines
3.5 KiB
Python

# sn_basis/test/test_settings_logic.py
import unittest
from unittest.mock import patch
from sn_basis.functions.settings_logic import SettingsLogic
class TestSettingsLogic(unittest.TestCase):
# -----------------------------------------------------
# Test: load() liest alle Variablen über get_variable()
# -----------------------------------------------------
@patch("sn_basis.functions.settings_logic.get_variable")
def test_load(self, mock_get):
"""Prüft, dass load() jede bekannte Projektvariable genau einmal über get_variable() liest."""
# Mock-Rückgabe für jede Variable
mock_get.side_effect = lambda key, scope="project": f"wert_{key}"
logic = SettingsLogic()
daten = logic.load()
# Alle Variablen müssen enthalten sein
for key in SettingsLogic.VARIABLEN:
self.assertIn(key, daten)
self.assertEqual(daten[key], f"wert_{key}")
# get_variable muss für jede Variable genau einmal aufgerufen werden
self.assertEqual(mock_get.call_count, len(SettingsLogic.VARIABLEN))
# -----------------------------------------------------
# Test: save() ruft set_variable() nur für bekannte Keys auf
# -----------------------------------------------------
@patch("sn_basis.functions.settings_logic.set_variable")
def test_save(self, mock_set):
"""Prüft, dass save() nur bekannte Variablen-Keys speichert und unbekannte Keys ignoriert."""
logic = SettingsLogic()
# Eingabedaten enthalten gültige und ungültige Keys
daten = {
"amt": "A1",
"behoerde": "B1",
"unbekannt": "IGNORIEREN",
"gemeinden": "G1",
}
logic.save(daten)
# set_variable muss nur für gültige Keys aufgerufen werden
expected_calls = 3 # amt, behoerde, gemeinden
self.assertEqual(mock_set.call_count, expected_calls)
# Prüfen, ob die richtigen Keys gespeichert wurden
saved_keys = [call.args[0] for call in mock_set.call_args_list]
self.assertIn("amt", saved_keys)
self.assertIn("behoerde", saved_keys)
self.assertIn("gemeinden", saved_keys)
self.assertNotIn("unbekannt", saved_keys)
@patch("sn_basis.functions.settings_logic.get_variable")
def test_load_handles_partial_values_with_empty_fallback(self, mock_get):
"""Prüft, dass load() für jede Variable den (auch leeren) Wert von get_variable() unverändert übernimmt, selbst wenn nicht alle Variablen im Mock konfiguriert sind."""
values = {
"amt": "A1",
"behoerde": "",
"landkreis_user": "L1",
}
mock_get.side_effect = lambda key, scope="project": values.get(key, "")
logic = SettingsLogic()
daten = logic.load()
self.assertEqual(daten["amt"], "A1")
self.assertEqual(daten["behoerde"], "")
self.assertEqual(daten["landkreis_user"], "L1")
self.assertEqual(daten["sachgebiet"], "")
@patch("sn_basis.functions.settings_logic.set_variable")
def test_save_empty_string_value_is_persisted(self, mock_set):
"""Prüft, dass save() einen leeren String als gültigen Wert speichert, statt ihn wie einen fehlenden Key zu behandeln."""
logic = SettingsLogic()
logic.save({"amt": "", "behoerde": "B2"})
mock_set.assert_any_call("amt", "", scope="project")
mock_set.assert_any_call("behoerde", "B2", scope="project")
if __name__ == "__main__":
unittest.main()